diff --git a/backend/api/api.go b/backend/api/api.go
index ec1032b..da0dc4c 100644
--- a/backend/api/api.go
+++ b/backend/api/api.go
@@ -70,6 +70,19 @@ func (a *APIHandler) postHandler(c *gin.Context) {
}
jsonMsg(c, "", nil)
+ case "changePass":
+ id := c.Request.FormValue("id")
+ oldPass := c.Request.FormValue("oldPass")
+ newUsername := c.Request.FormValue("newUsername")
+ newPass := c.Request.FormValue("newPass")
+ err = a.UserService.ChangePass(id, oldPass, newUsername, newPass)
+ if err == nil {
+ logger.Info("change user credentials success")
+ jsonMsg(c, "save", nil)
+ } else {
+ logger.Warning("change user credentials failed:", err)
+ jsonMsg(c, "", err)
+ }
case "save":
loginUser := GetLoginUser(c)
data := map[string]string{}
@@ -104,6 +117,13 @@ func (a *APIHandler) getHandler(c *gin.Context) {
return
}
jsonObj(c, data, nil)
+ case "users":
+ users, err := a.UserService.GetUsers()
+ if err != nil {
+ jsonMsg(c, "", err)
+ return
+ }
+ jsonObj(c, *users, nil)
case "setting":
data, err := a.SettingService.GetAllSetting()
if err != nil {
diff --git a/backend/service/user.go b/backend/service/user.go
index 094d883..0a1a7c7 100644
--- a/backend/service/user.go
+++ b/backend/service/user.go
@@ -36,7 +36,7 @@ func (s *UserService) CheckUser(username string, password string, remoteIP strin
return nil
}
- lastLoginTxt := time.Now().Format("2006-01-02 15:04:05") + "-" + remoteIP
+ lastLoginTxt := time.Now().Format("2006-01-02 15:04:05") + " " + remoteIP
err = db.Model(model.User{}).
Where("username = ?", username).
Update("last_logins", &lastLoginTxt).Error
@@ -45,3 +45,25 @@ func (s *UserService) CheckUser(username string, password string, remoteIP strin
}
return user
}
+
+func (s *UserService) GetUsers() (*[]model.User, error) {
+ var users []model.User
+ db := database.GetDB()
+ err := db.Model(model.User{}).Select("id,username,last_logins").Scan(&users).Error
+ if err != nil {
+ return nil, err
+ }
+ return &users, nil
+}
+
+func (s *UserService) ChangePass(id string, oldPass string, newUser string, newPass string) error {
+ db := database.GetDB()
+ user := &model.User{}
+ err := db.Model(model.User{}).Where("id = ? AND password = ?", id, oldPass).First(user).Error
+ if err != nil || database.IsNotFound(err) {
+ return err
+ }
+ user.Username = newUser
+ user.Password = newPass
+ return db.Save(user).Error
+}
diff --git a/frontend/src/layouts/default/Drawer.vue b/frontend/src/layouts/default/Drawer.vue
index de3b003..48552ef 100644
--- a/frontend/src/layouts/default/Drawer.vue
+++ b/frontend/src/layouts/default/Drawer.vue
@@ -55,6 +55,7 @@ const menu = [
{ title: 'pages.outbounds', icon: 'mdi-cloud-upload', path: '/outbounds' },
{ title: 'pages.rules', icon: 'mdi-routes', path: '/rules' },
{ title: 'pages.basics', icon: 'mdi-application-cog', path: '/basics' },
+ { title: 'pages.admins', icon: 'mdi-account-tie', path: '/admins' },
{ title: 'pages.settings', icon: 'mdi-cog', path: '/settings' },
]
diff --git a/frontend/src/layouts/modals/Admin.vue b/frontend/src/layouts/modals/Admin.vue
new file mode 100644
index 0000000..192eb63
--- /dev/null
+++ b/frontend/src/layouts/modals/Admin.vue
@@ -0,0 +1,96 @@
+
+
+
+
+ {{ $t('admin.changeCred') + " " + user.username }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('actions.close') }}
+
+
+ {{ $t('actions.save') }}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/src/locales/en.ts b/frontend/src/locales/en.ts
index a0970fa..af0c046 100644
--- a/frontend/src/locales/en.ts
+++ b/frontend/src/locales/en.ts
@@ -27,6 +27,7 @@ export default {
clients: "Clients",
rules: "Rules",
basics: "Basics",
+ admins: "Admins",
settings: "Settings",
},
main: {
@@ -84,6 +85,12 @@ export default {
menu: {
logout: "Logout",
},
+ admin: {
+ changeCred: "Change credentials",
+ oldPass: "Current Password",
+ newUname: "New Username",
+ newPass: "New Password",
+ },
setting: {
interface: "Interface",
sub: "Subscription",
diff --git a/frontend/src/locales/fa.ts b/frontend/src/locales/fa.ts
index dcd0fa8..3082738 100644
--- a/frontend/src/locales/fa.ts
+++ b/frontend/src/locales/fa.ts
@@ -27,6 +27,7 @@ export default {
clients: "کاربران",
rules: "قوانین",
basics: "ترازها",
+ admins: "ادمینها",
settings: "پیکربندی",
},
main: {
@@ -84,6 +85,12 @@ export default {
menu: {
logout: "خروج",
},
+ admin: {
+ changeCred: "ویرایش دادهها",
+ oldPass: "رمز کنونی",
+ newUname: "نام کاربری جدید",
+ newPass: "رمز جدید",
+ },
setting: {
interface: "نما",
sub: "سابسکریپشن",
diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts
index c004042..bf53188 100644
--- a/frontend/src/router/index.ts
+++ b/frontend/src/router/index.ts
@@ -44,6 +44,11 @@ const routes = [
name: 'pages.basics',
component: () => import('@/views/Basics.vue'),
},
+ {
+ path: '/admins',
+ name: 'pages.admins',
+ component: () => import('@/views/Admins.vue'),
+ },
{
path: '/settings',
name: 'pages.settings',
diff --git a/frontend/src/views/Admins.vue b/frontend/src/views/Admins.vue
new file mode 100644
index 0000000..16baf27
--- /dev/null
+++ b/frontend/src/views/Admins.vue
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+ Last Login
+
+
+
+ Date
+
+ {{ item.lastLogin.split(" ")[0]?? '-' }}
+
+
+
+ Time
+
+ {{ item.lastLogin.split(" ")[1]?? '-' }}
+
+
+
+ IP
+
+ {{ item.lastLogin.split(" ")[2]?? '-' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file