diff --git a/adminui/registration.go b/adminui/registration.go index efa44077..08b5d72c 100644 --- a/adminui/registration.go +++ b/adminui/registration.go @@ -6,6 +6,8 @@ import ( "log" "net/http" "strings" + + "github.com/NHAS/wag/pkg/control" ) func (au *AdminUI) getAllRegistrationTokens(w http.ResponseWriter, r *http.Request) { @@ -34,11 +36,13 @@ func (au *AdminUI) getAllRegistrationTokens(w http.ResponseWriter, r *http.Reque func (au *AdminUI) createRegistrationToken(w http.ResponseWriter, r *http.Request) { var ( - req RegistrationTokenRequestDTO - err error + req RegistrationTokenRequestDTO + res control.RegistrationResult + err error + successMsg string ) - defer func() { au.respond(err, w) }() + defer func() { au.respondSuccess(err, successMsg, w) }() defer r.Body.Close() err = json.NewDecoder(r.Body).Decode(&req) if err != nil { @@ -55,13 +59,14 @@ func (au *AdminUI) createRegistrationToken(w http.ResponseWriter, r *http.Reques return } - _, err = au.ctrl.NewRegistration(req.Token, req.Username, req.Overwrites, req.Uses, req.Groups...) + res, err = au.ctrl.NewRegistration(req.Token, req.Username, req.Overwrites, req.Uses, req.Groups...) if err != nil { log.Println("unable to create new registration token: ", err) w.WriteHeader(http.StatusInternalServerError) return } + successMsg = res.Token } func (au *AdminUI) deleteRegistrationTokens(w http.ResponseWriter, r *http.Request) { diff --git a/adminui/users.go b/adminui/users.go index fae9ebe0..c602c207 100644 --- a/adminui/users.go +++ b/adminui/users.go @@ -84,7 +84,6 @@ func (au *AdminUI) editUser(w http.ResponseWriter, r *http.Request) { err = errors.Join(errs...) if err != nil { - w.WriteHeader(http.StatusInternalServerError) err = fmt.Errorf("%d/%d failed to %s\n%s", len(errs), len(action.Usernames), action.Action, errors.Join(errs...).Error()) return diff --git a/adminui2/src/api/types.ts b/adminui2/src/api/types.ts index 8df90b43..91ceb7c7 100644 --- a/adminui2/src/api/types.ts +++ b/adminui2/src/api/types.ts @@ -34,10 +34,24 @@ export interface UserDTO { mfa_type: string groups: string[] } + + export interface UsersGetAllResponseDTO { users: UserDTO[] } +export enum UserEditActions { + Lock = "lock", + Unlock = "unlock", + RestMFA = "resetMFA", +} + + +export interface EditUsersDTO { + action: UserEditActions + usernames: string[] +} + export interface GroupDTO { group: string members: string[] diff --git a/adminui2/src/api/users.ts b/adminui2/src/api/users.ts index 5a0a60f6..1c694499 100644 --- a/adminui2/src/api/users.ts +++ b/adminui2/src/api/users.ts @@ -1,7 +1,15 @@ -import type { UserDTO } from './types' +import type { GenericResponseDTO, UserDTO, EditUsersDTO } from './types' import { client } from '.' export function getAllUsers(): Promise { return client.get('/api/management/users').then(res => res.data) } + +export function deleteUsers(users: string[]): Promise { + return client.delete('/api/management/users', {data: users}).then(res => res.data) +} + +export function editUser(edit: EditUsersDTO): Promise { + return client.put('/api/management/users', edit).then(res => res.data) +} diff --git a/adminui2/src/layouts/default.vue b/adminui2/src/layouts/default.vue index 4a8dd04a..0756ecbc 100644 --- a/adminui2/src/layouts/default.vue +++ b/adminui2/src/layouts/default.vue @@ -31,7 +31,7 @@ const policyLinks = [ const managementLinks = [ { name: 'Registration Tokens', icon: Icons.RegistrationKey, to: '/management/registration_tokens' }, - { name: 'Users', icon: Icons.Groups, to: '/admin/users' }, + { name: 'Users', icon: Icons.Groups, to: '/management/users' }, { name: 'Devices', icon: Icons.Device, to: '/admin/users' } ] diff --git a/adminui2/src/pages/RegistrationTokens.vue b/adminui2/src/pages/RegistrationTokens.vue index 53643db4..1d85302b 100644 --- a/adminui2/src/pages/RegistrationTokens.vue +++ b/adminui2/src/pages/RegistrationTokens.vue @@ -65,9 +65,10 @@ async function deleteToken(token: RegistrationTokenRequestDTO) {