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 @@ + + + \ 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 @@ + + + \ No newline at end of file