|
@@ -62,7 +62,6 @@ func UserHandlers(r *mux.Router) {
|
|
|
r.HandleFunc("/api/users/{username}/remote_access_gw/{remote_access_gateway_id}", logic.SecurityCheck(true, http.HandlerFunc(removeUserFromRemoteAccessGW))).Methods(http.MethodDelete)
|
|
|
r.HandleFunc("/api/users/{username}/remote_access_gw", logic.SecurityCheck(false, logic.ContinueIfUserMatch(http.HandlerFunc(getUserRemoteAccessGwsV1)))).Methods(http.MethodGet)
|
|
|
r.HandleFunc("/api/users/ingress/{ingress_id}", logic.SecurityCheck(true, http.HandlerFunc(ingressGatewayUsers))).Methods(http.MethodGet)
|
|
|
-
|
|
|
}
|
|
|
|
|
|
// swagger:route POST /api/v1/users/invite-signup user userInviteSignUp
|
|
@@ -248,6 +247,21 @@ func inviteUsers(w http.ResponseWriter, r *http.Request) {
|
|
|
if err != nil {
|
|
|
slog.Error("failed to insert invite for user", "email", invite.Email, "error", err)
|
|
|
}
|
|
|
+ logic.LogEvent(&models.Event{
|
|
|
+ Action: models.Create,
|
|
|
+ Source: models.Subject{
|
|
|
+ ID: callerUserName,
|
|
|
+ Name: callerUserName,
|
|
|
+ Type: models.UserSub,
|
|
|
+ },
|
|
|
+ TriggeredBy: callerUserName,
|
|
|
+ Target: models.Subject{
|
|
|
+ ID: inviteeEmail,
|
|
|
+ Name: inviteeEmail,
|
|
|
+ Type: models.UserInviteSub,
|
|
|
+ },
|
|
|
+ Origin: models.Dashboard,
|
|
|
+ })
|
|
|
// notify user with magic link
|
|
|
go func(invite models.UserInvite) {
|
|
|
// Set E-Mail body. You can set plain text or html with text/html
|
|
@@ -266,6 +280,7 @@ func inviteUsers(w http.ResponseWriter, r *http.Request) {
|
|
|
}
|
|
|
}(invite)
|
|
|
}
|
|
|
+
|
|
|
logic.ReturnSuccessResponse(w, r, "triggered user invites")
|
|
|
}
|
|
|
|
|
@@ -309,6 +324,21 @@ func deleteUserInvite(w http.ResponseWriter, r *http.Request) {
|
|
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
|
|
return
|
|
|
}
|
|
|
+ logic.LogEvent(&models.Event{
|
|
|
+ Action: models.Delete,
|
|
|
+ Source: models.Subject{
|
|
|
+ ID: r.Header.Get("user"),
|
|
|
+ Name: r.Header.Get("user"),
|
|
|
+ Type: models.UserSub,
|
|
|
+ },
|
|
|
+ TriggeredBy: r.Header.Get("user"),
|
|
|
+ Target: models.Subject{
|
|
|
+ ID: email,
|
|
|
+ Name: email,
|
|
|
+ Type: models.UserInviteSub,
|
|
|
+ },
|
|
|
+ Origin: models.Dashboard,
|
|
|
+ })
|
|
|
logic.ReturnSuccessResponse(w, r, "deleted user invite")
|
|
|
}
|
|
|
|
|
@@ -463,6 +493,21 @@ func createUserGroup(w http.ResponseWriter, r *http.Request) {
|
|
|
user.UserGroups[userGroupReq.Group.ID] = struct{}{}
|
|
|
logic.UpsertUser(*user)
|
|
|
}
|
|
|
+ logic.LogEvent(&models.Event{
|
|
|
+ Action: models.Create,
|
|
|
+ Source: models.Subject{
|
|
|
+ ID: r.Header.Get("user"),
|
|
|
+ Name: r.Header.Get("user"),
|
|
|
+ Type: models.UserSub,
|
|
|
+ },
|
|
|
+ TriggeredBy: r.Header.Get("user"),
|
|
|
+ Target: models.Subject{
|
|
|
+ ID: userGroupReq.Group.ID.String(),
|
|
|
+ Name: userGroupReq.Group.Name,
|
|
|
+ Type: models.UserGroupSub,
|
|
|
+ },
|
|
|
+ Origin: models.Dashboard,
|
|
|
+ })
|
|
|
logic.ReturnSuccessResponseWithJson(w, r, userGroupReq.Group, "created user group")
|
|
|
}
|
|
|
|
|
@@ -506,7 +551,25 @@ func updateUserGroup(w http.ResponseWriter, r *http.Request) {
|
|
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
|
|
return
|
|
|
}
|
|
|
-
|
|
|
+ logic.LogEvent(&models.Event{
|
|
|
+ Action: models.Update,
|
|
|
+ Source: models.Subject{
|
|
|
+ ID: r.Header.Get("user"),
|
|
|
+ Name: r.Header.Get("user"),
|
|
|
+ Type: models.UserSub,
|
|
|
+ },
|
|
|
+ TriggeredBy: r.Header.Get("user"),
|
|
|
+ Target: models.Subject{
|
|
|
+ ID: userGroup.ID.String(),
|
|
|
+ Name: userGroup.Name,
|
|
|
+ Type: models.UserGroupSub,
|
|
|
+ },
|
|
|
+ Diff: models.Diff{
|
|
|
+ Old: currUserG,
|
|
|
+ New: userGroup,
|
|
|
+ },
|
|
|
+ Origin: models.Dashboard,
|
|
|
+ })
|
|
|
// reset configs for service user
|
|
|
go proLogic.UpdatesUserGwAccessOnGrpUpdates(currUserG.NetworkRoles, userGroup.NetworkRoles)
|
|
|
logic.ReturnSuccessResponseWithJson(w, r, userGroup, "updated user group")
|
|
@@ -551,6 +614,21 @@ func deleteUserGroup(w http.ResponseWriter, r *http.Request) {
|
|
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
|
|
return
|
|
|
}
|
|
|
+ logic.LogEvent(&models.Event{
|
|
|
+ Action: models.Delete,
|
|
|
+ Source: models.Subject{
|
|
|
+ ID: r.Header.Get("user"),
|
|
|
+ Name: r.Header.Get("user"),
|
|
|
+ Type: models.UserSub,
|
|
|
+ },
|
|
|
+ TriggeredBy: r.Header.Get("user"),
|
|
|
+ Target: models.Subject{
|
|
|
+ ID: userG.ID.String(),
|
|
|
+ Name: userG.Name,
|
|
|
+ Type: models.UserGroupSub,
|
|
|
+ },
|
|
|
+ Origin: models.Dashboard,
|
|
|
+ })
|
|
|
go proLogic.UpdatesUserGwAccessOnGrpUpdates(userG.NetworkRoles, make(map[models.NetworkID]map[models.UserRoleID]struct{}))
|
|
|
logic.ReturnSuccessResponseWithJson(w, r, nil, "deleted user group")
|
|
|
}
|
|
@@ -631,6 +709,21 @@ func createRole(w http.ResponseWriter, r *http.Request) {
|
|
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
|
|
return
|
|
|
}
|
|
|
+ logic.LogEvent(&models.Event{
|
|
|
+ Action: models.Create,
|
|
|
+ Source: models.Subject{
|
|
|
+ ID: r.Header.Get("user"),
|
|
|
+ Name: r.Header.Get("user"),
|
|
|
+ Type: models.UserSub,
|
|
|
+ },
|
|
|
+ TriggeredBy: r.Header.Get("user"),
|
|
|
+ Target: models.Subject{
|
|
|
+ ID: userRole.ID.String(),
|
|
|
+ Name: userRole.Name,
|
|
|
+ Type: models.UserRoleSub,
|
|
|
+ },
|
|
|
+ Origin: models.ClientApp,
|
|
|
+ })
|
|
|
logic.ReturnSuccessResponseWithJson(w, r, userRole, "created user role")
|
|
|
}
|
|
|
|
|
@@ -665,6 +758,25 @@ func updateRole(w http.ResponseWriter, r *http.Request) {
|
|
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
|
|
return
|
|
|
}
|
|
|
+ logic.LogEvent(&models.Event{
|
|
|
+ Action: models.Update,
|
|
|
+ Source: models.Subject{
|
|
|
+ ID: r.Header.Get("user"),
|
|
|
+ Name: r.Header.Get("user"),
|
|
|
+ Type: models.UserSub,
|
|
|
+ },
|
|
|
+ TriggeredBy: r.Header.Get("user"),
|
|
|
+ Target: models.Subject{
|
|
|
+ ID: userRole.ID.String(),
|
|
|
+ Name: userRole.Name,
|
|
|
+ Type: models.UserRoleSub,
|
|
|
+ },
|
|
|
+ Diff: models.Diff{
|
|
|
+ Old: currRole,
|
|
|
+ New: userRole,
|
|
|
+ },
|
|
|
+ Origin: models.Dashboard,
|
|
|
+ })
|
|
|
// reset configs for service user
|
|
|
go proLogic.UpdatesUserGwAccessOnRoleUpdates(currRole.NetworkLevelAccess, userRole.NetworkLevelAccess, string(userRole.NetworkID))
|
|
|
logic.ReturnSuccessResponseWithJson(w, r, userRole, "updated user role")
|
|
@@ -693,6 +805,21 @@ func deleteRole(w http.ResponseWriter, r *http.Request) {
|
|
|
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
|
|
|
return
|
|
|
}
|
|
|
+ logic.LogEvent(&models.Event{
|
|
|
+ Action: models.Delete,
|
|
|
+ Source: models.Subject{
|
|
|
+ ID: r.Header.Get("user"),
|
|
|
+ Name: r.Header.Get("user"),
|
|
|
+ Type: models.UserSub,
|
|
|
+ },
|
|
|
+ TriggeredBy: r.Header.Get("user"),
|
|
|
+ Target: models.Subject{
|
|
|
+ ID: role.ID.String(),
|
|
|
+ Name: role.Name,
|
|
|
+ Type: models.UserRoleSub,
|
|
|
+ },
|
|
|
+ Origin: models.Dashboard,
|
|
|
+ })
|
|
|
go proLogic.UpdatesUserGwAccessOnRoleUpdates(role.NetworkLevelAccess, make(map[models.RsrcType]map[models.RsrcID]models.RsrcPermissionScope), role.NetworkID.String())
|
|
|
logic.ReturnSuccessResponseWithJson(w, r, nil, "deleted user role")
|
|
|
}
|
|
@@ -1349,6 +1476,21 @@ func approvePendingUser(w http.ResponseWriter, r *http.Request) {
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
+ logic.LogEvent(&models.Event{
|
|
|
+ Action: models.Create,
|
|
|
+ Source: models.Subject{
|
|
|
+ ID: r.Header.Get("user"),
|
|
|
+ Name: r.Header.Get("user"),
|
|
|
+ Type: models.UserSub,
|
|
|
+ },
|
|
|
+ TriggeredBy: r.Header.Get("user"),
|
|
|
+ Target: models.Subject{
|
|
|
+ ID: username,
|
|
|
+ Name: username,
|
|
|
+ Type: models.PendingUserSub,
|
|
|
+ },
|
|
|
+ Origin: models.Dashboard,
|
|
|
+ })
|
|
|
logic.ReturnSuccessResponse(w, r, "approved "+username)
|
|
|
}
|
|
|
|
|
@@ -1380,6 +1522,21 @@ func deletePendingUser(w http.ResponseWriter, r *http.Request) {
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
+ logic.LogEvent(&models.Event{
|
|
|
+ Action: models.Delete,
|
|
|
+ Source: models.Subject{
|
|
|
+ ID: r.Header.Get("user"),
|
|
|
+ Name: r.Header.Get("user"),
|
|
|
+ Type: models.UserSub,
|
|
|
+ },
|
|
|
+ TriggeredBy: r.Header.Get("user"),
|
|
|
+ Target: models.Subject{
|
|
|
+ ID: username,
|
|
|
+ Name: username,
|
|
|
+ Type: models.PendingUserSub,
|
|
|
+ },
|
|
|
+ Origin: models.Dashboard,
|
|
|
+ })
|
|
|
logic.ReturnSuccessResponse(w, r, "deleted pending "+username)
|
|
|
}
|
|
|
|
|
@@ -1395,5 +1552,20 @@ func deleteAllPendingUsers(w http.ResponseWriter, r *http.Request) {
|
|
|
logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("failed to delete all pending users "+err.Error()), "internal"))
|
|
|
return
|
|
|
}
|
|
|
+ logic.LogEvent(&models.Event{
|
|
|
+ Action: models.DeleteAll,
|
|
|
+ Source: models.Subject{
|
|
|
+ ID: r.Header.Get("user"),
|
|
|
+ Name: r.Header.Get("user"),
|
|
|
+ Type: models.UserSub,
|
|
|
+ },
|
|
|
+ TriggeredBy: r.Header.Get("user"),
|
|
|
+ Target: models.Subject{
|
|
|
+ ID: r.Header.Get("user"),
|
|
|
+ Name: r.Header.Get("user"),
|
|
|
+ Type: models.PendingUserSub,
|
|
|
+ },
|
|
|
+ Origin: models.Dashboard,
|
|
|
+ })
|
|
|
logic.ReturnSuccessResponse(w, r, "cleared all pending users")
|
|
|
}
|