added permission check and swagger doc
parent
0b78d26151
commit
0a0c0317d2
|
@ -70,7 +70,7 @@ func addLog(logMessage structs.LogMessage, systemLog bool) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func ReadLogs(date string, systemLogs bool, language string) []structs.LogMessageResponse {
|
func ReadLogs(date string, systemLogs bool, language string) []structs.LogListMessage {
|
||||||
path := config.Cfg.FolderPaths.LogsSystem
|
path := config.Cfg.FolderPaths.LogsSystem
|
||||||
|
|
||||||
if !systemLogs {
|
if !systemLogs {
|
||||||
|
@ -88,7 +88,7 @@ func ReadLogs(date string, systemLogs bool, language string) []structs.LogMessag
|
||||||
|
|
||||||
fileScanner := bufio.NewScanner(file)
|
fileScanner := bufio.NewScanner(file)
|
||||||
|
|
||||||
var logMessages []structs.LogMessageResponse
|
var logMessages []structs.LogListMessage
|
||||||
|
|
||||||
for fileScanner.Scan() {
|
for fileScanner.Scan() {
|
||||||
var logMessage structs.LogMessage
|
var logMessage structs.LogMessage
|
||||||
|
@ -116,8 +116,8 @@ func ReadLogs(date string, systemLogs bool, language string) []structs.LogMessag
|
||||||
return logMessages
|
return logMessages
|
||||||
}
|
}
|
||||||
|
|
||||||
func getLogMessage(languageLogMessages []structs.LanguageLogMessages, logMessage structs.LogMessage, language string) structs.LogMessageResponse {
|
func getLogMessage(languageLogMessages []structs.LanguageLogMessages, logMessage structs.LogMessage, language string) structs.LogListMessage {
|
||||||
logMessageResponse := structs.LogMessageResponse{
|
logListMessage := structs.LogListMessage{
|
||||||
Time: logMessage.Time,
|
Time: logMessage.Time,
|
||||||
Type: logMessage.Type,
|
Type: logMessage.Type,
|
||||||
LogData: logMessage.Messages,
|
LogData: logMessage.Messages,
|
||||||
|
@ -125,13 +125,13 @@ func getLogMessage(languageLogMessages []structs.LanguageLogMessages, logMessage
|
||||||
|
|
||||||
for _, systemLanguageLogMessage := range languageLogMessages {
|
for _, systemLanguageLogMessage := range languageLogMessages {
|
||||||
if logMessage.Id == systemLanguageLogMessage.Id {
|
if logMessage.Id == systemLanguageLogMessage.Id {
|
||||||
logMessageResponse.Message = getLogLanguageMessage(systemLanguageLogMessage.Languages, language)
|
logListMessage.Message = getLogLanguageMessage(systemLanguageLogMessage.Languages, language)
|
||||||
|
|
||||||
return logMessageResponse
|
return logListMessage
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return logMessageResponse
|
return logListMessage
|
||||||
}
|
}
|
||||||
|
|
||||||
func getLogLanguageMessage(languages []structs.LanguageLogMessagesLanguage, language string) string {
|
func getLogLanguageMessage(languages []structs.LanguageLogMessagesLanguage, language string) string {
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
package structs
|
||||||
|
|
||||||
|
// swagger:model AdminAreaRolesResponse
|
||||||
|
type AdminAreaRolesResponse struct {
|
||||||
|
Roles []Role
|
||||||
|
RolesPermissions []RolePermissions
|
||||||
|
}
|
|
@ -103,3 +103,10 @@ type ApiGroupTaskRequest struct {
|
||||||
Description string
|
Description string
|
||||||
GlobalInputs json.RawMessage
|
GlobalInputs json.RawMessage
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// swagger:model GroupTasksResponse
|
||||||
|
type GroupTasksResponse struct {
|
||||||
|
CategoryGroups []CategoryGroup
|
||||||
|
GroupTasks []GroupTasks
|
||||||
|
GroupTasksSteps []GroupTaskSteps
|
||||||
|
}
|
||||||
|
|
|
@ -26,9 +26,19 @@ type LanguageLogMessagesLanguage struct {
|
||||||
Message string
|
Message string
|
||||||
}
|
}
|
||||||
|
|
||||||
type LogMessageResponse struct {
|
type LogListMessage struct {
|
||||||
Time time.Time
|
Time time.Time
|
||||||
Type uint8
|
Type uint8
|
||||||
Message string
|
Message string
|
||||||
LogData []LogData
|
LogData []LogData
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type LogMessageResponse struct {
|
||||||
|
Logs []LogListMessage
|
||||||
|
Dates []string
|
||||||
|
Users []AllUsers
|
||||||
|
Roles []Role
|
||||||
|
CategoryGroups []CategoryGroup
|
||||||
|
GroupTasks []GroupTasks
|
||||||
|
GroupTasksSteps []GroupTaskSteps
|
||||||
|
}
|
||||||
|
|
|
@ -83,8 +83,9 @@ func (socketClient *SocketClient) writeMessage(messageType int, message SendSock
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
type InitUserSocketConnection struct {
|
type InitUserSocketConnection struct {
|
||||||
User UserData
|
User UserProfile
|
||||||
CategoryGroups []CategoryGroup // config specific group tasks
|
CategoryGroups []CategoryGroup // config specific group tasks
|
||||||
GroupTasks []GroupTasks // in database saved group tasks
|
GroupTasks []GroupTasks // in database saved group tasks
|
||||||
GroupTasksSteps []GroupTaskSteps
|
GroupTasksSteps []GroupTaskSteps
|
||||||
|
@ -92,7 +93,7 @@ type InitUserSocketConnection struct {
|
||||||
Scanners []Scanner
|
Scanners []Scanner
|
||||||
AllRoles []Role
|
AllRoles []Role
|
||||||
AdminArea InitUserSocketConnectionAdminArea
|
AdminArea InitUserSocketConnectionAdminArea
|
||||||
}
|
} */
|
||||||
|
|
||||||
type InitUserSocketConnectionAdminArea struct {
|
type InitUserSocketConnectionAdminArea struct {
|
||||||
RolesPermissions []RolePermissions `json:"RolesPermissions,omitempty"`
|
RolesPermissions []RolePermissions `json:"RolesPermissions,omitempty"`
|
||||||
|
@ -108,17 +109,6 @@ type AllUsers struct {
|
||||||
LastOnline time.Time
|
LastOnline time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
type UserData struct {
|
|
||||||
Id string
|
|
||||||
RoleId string
|
|
||||||
Avatar string
|
|
||||||
Username string
|
|
||||||
Email string
|
|
||||||
Sessions []UserSessionSocket
|
|
||||||
Permissions []string
|
|
||||||
ApiKeys []UserApiKey
|
|
||||||
}
|
|
||||||
|
|
||||||
type UserSessionSocket struct {
|
type UserSessionSocket struct {
|
||||||
IdForDeletion string
|
IdForDeletion string
|
||||||
UserAgent string
|
UserAgent string
|
||||||
|
|
|
@ -56,9 +56,19 @@ type UserApiKey struct {
|
||||||
LastUsed time.Time
|
LastUsed time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// swagger:model UserInfoResponse
|
||||||
type UserInfoResponse struct {
|
type UserInfoResponse struct {
|
||||||
|
UserId string
|
||||||
Username string
|
Username string
|
||||||
Avatar string
|
Avatar string
|
||||||
Permissions []string
|
Permissions []string
|
||||||
AvailableGroupTasks []string
|
AvailableGroupTasks []string
|
||||||
|
Users []AllUsers
|
||||||
|
}
|
||||||
|
|
||||||
|
// swagger:model UserProfileResponse
|
||||||
|
type UserProfileResponse struct {
|
||||||
|
Email string
|
||||||
|
Sessions []UserSessionSocket
|
||||||
|
ApiKeys []UserApiKey
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package structs
|
package structs
|
||||||
|
|
||||||
|
// swagger:model UsersResponse
|
||||||
type UsersResponse struct {
|
type UsersResponse struct {
|
||||||
RoleId string
|
RoleId string
|
||||||
Users []AllUsers
|
Users []AllUsers
|
||||||
|
|
|
@ -145,6 +145,8 @@ var (
|
||||||
const (
|
const (
|
||||||
_equipmentDocumentation = "equipment_documentation."
|
_equipmentDocumentation = "equipment_documentation."
|
||||||
PermissionEquipmentDocumentationView = _equipmentDocumentation + "view"
|
PermissionEquipmentDocumentationView = _equipmentDocumentation + "view"
|
||||||
|
PermissionEquipmentDocumentationEdit = _equipmentDocumentation + "edit"
|
||||||
|
PermissionEquipmentDocumentationCreate = _equipmentDocumentation + "create"
|
||||||
_groupTasks = "group_tasks."
|
_groupTasks = "group_tasks."
|
||||||
PermissionGroupTasksOverviewXYNewTask = _groupTasks + "overview.XY.new_task"
|
PermissionGroupTasksOverviewXYNewTask = _groupTasks + "overview.XY.new_task"
|
||||||
PermissionGroupTasksOverviewXYReloadGroupConfig = _groupTasks + "overview.XY.reload_group_config"
|
PermissionGroupTasksOverviewXYReloadGroupConfig = _groupTasks + "overview.XY.reload_group_config"
|
||||||
|
@ -172,6 +174,8 @@ const (
|
||||||
|
|
||||||
var SystemPermissions = []string{
|
var SystemPermissions = []string{
|
||||||
PermissionEquipmentDocumentationView,
|
PermissionEquipmentDocumentationView,
|
||||||
|
PermissionEquipmentDocumentationEdit,
|
||||||
|
PermissionEquipmentDocumentationCreate,
|
||||||
PermissionGroupTasksHistory,
|
PermissionGroupTasksHistory,
|
||||||
PermissionGroupTasksInstallGlobalPythonPackages,
|
PermissionGroupTasksInstallGlobalPythonPackages,
|
||||||
PermissionGroupTasksCheckingForCategoryGroupChanges,
|
PermissionGroupTasksCheckingForCategoryGroupChanges,
|
||||||
|
|
|
@ -16,6 +16,42 @@
|
||||||
"host": "jannex",
|
"host": "jannex",
|
||||||
"basePath": "/v1",
|
"basePath": "/v1",
|
||||||
"paths": {
|
"paths": {
|
||||||
|
"/adminarea/roles": {
|
||||||
|
"get": {
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"adminarea"
|
||||||
|
],
|
||||||
|
"summary": "Get all roles",
|
||||||
|
"operationId": "adminareaGetRoles",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "You can create a new api key in your user profile",
|
||||||
|
"name": "X-Api-Key",
|
||||||
|
"in": "header"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "All roles",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/AdminAreaRolesResponse"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "No permissions"
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Failed to get roles"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/equipment/documentation/create": {
|
"/equipment/documentation/create": {
|
||||||
"post": {
|
"post": {
|
||||||
"consumes": [
|
"consumes": [
|
||||||
|
@ -239,6 +275,42 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/grouptasks": {
|
||||||
|
"get": {
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"grouptask"
|
||||||
|
],
|
||||||
|
"summary": "Get all group tasks",
|
||||||
|
"operationId": "grouptaskGetGroupTasks",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "You can create a new api key in your user profile",
|
||||||
|
"name": "X-Api-Key",
|
||||||
|
"in": "header"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "All group tasks",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/GroupTasksResponse"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "No permissions"
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Failed to get group tasks"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/grouptasks/start": {
|
"/grouptasks/start": {
|
||||||
"post": {
|
"post": {
|
||||||
"consumes": [
|
"consumes": [
|
||||||
|
@ -404,6 +476,78 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"/user/info": {
|
||||||
|
"get": {
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"user"
|
||||||
|
],
|
||||||
|
"summary": "Get user info",
|
||||||
|
"operationId": "userInfo",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "You can create a new api key in your user profile",
|
||||||
|
"name": "X-Api-Key",
|
||||||
|
"in": "header"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "User info",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/UserInfoResponse"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "No permissions"
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Failed to get user info"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/user/profile": {
|
||||||
|
"get": {
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"user"
|
||||||
|
],
|
||||||
|
"summary": "Get user profile",
|
||||||
|
"operationId": "userProfile",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "You can create a new api key in your user profile",
|
||||||
|
"name": "X-Api-Key",
|
||||||
|
"in": "header"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "User profile",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/UserProfileResponse"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "No permissions"
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Failed to get user profile"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"/user/session/{idForDeletion}": {
|
"/user/session/{idForDeletion}": {
|
||||||
"delete": {
|
"delete": {
|
||||||
"consumes": [
|
"consumes": [
|
||||||
|
@ -444,9 +588,92 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"/users": {
|
||||||
|
"get": {
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"users"
|
||||||
|
],
|
||||||
|
"summary": "Get all users",
|
||||||
|
"operationId": "usersGetUsers",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "You can create a new api key in your user profile",
|
||||||
|
"name": "X-Api-Key",
|
||||||
|
"in": "header"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "All users",
|
||||||
|
"schema": {
|
||||||
|
"$ref": "#/definitions/UsersResponse"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"401": {
|
||||||
|
"description": "No permissions"
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Failed to get users"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"definitions": {
|
"definitions": {
|
||||||
|
"AdminAreaRolesResponse": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"Roles": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/Role"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"RolesPermissions": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/RolePermissions"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"x-go-package": "jannex/admin-dashboard-backend/modules/structs"
|
||||||
|
},
|
||||||
|
"AllUsers": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"Avatar": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"ConnectionStatus": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "uint8"
|
||||||
|
},
|
||||||
|
"Deactivated": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"Id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"LastOnline": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time"
|
||||||
|
},
|
||||||
|
"RoleId": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"Username": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"x-go-package": "jannex/admin-dashboard-backend/modules/structs"
|
||||||
|
},
|
||||||
"ApiGroupTaskRequest": {
|
"ApiGroupTaskRequest": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
@ -465,6 +692,23 @@
|
||||||
},
|
},
|
||||||
"x-go-package": "jannex/admin-dashboard-backend/modules/structs"
|
"x-go-package": "jannex/admin-dashboard-backend/modules/structs"
|
||||||
},
|
},
|
||||||
|
"CategoryGroup": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"category": {
|
||||||
|
"type": "string",
|
||||||
|
"x-go-name": "Category"
|
||||||
|
},
|
||||||
|
"groups": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/Group"
|
||||||
|
},
|
||||||
|
"x-go-name": "Groups"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"x-go-package": "jannex/admin-dashboard-backend/modules/structs"
|
||||||
|
},
|
||||||
"CreateEquipmentDocumentationRequest": {
|
"CreateEquipmentDocumentationRequest": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
@ -560,6 +804,336 @@
|
||||||
},
|
},
|
||||||
"x-go-package": "jannex/admin-dashboard-backend/modules/structs"
|
"x-go-package": "jannex/admin-dashboard-backend/modules/structs"
|
||||||
},
|
},
|
||||||
|
"GlobalInputs": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"displayName": {
|
||||||
|
"type": "string",
|
||||||
|
"x-go-name": "DisplayName"
|
||||||
|
},
|
||||||
|
"parameterName": {
|
||||||
|
"type": "string",
|
||||||
|
"x-go-name": "ParameterName"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "string",
|
||||||
|
"x-go-name": "Type"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"x-go-package": "jannex/admin-dashboard-backend/modules/structs"
|
||||||
|
},
|
||||||
|
"Group": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"category": {
|
||||||
|
"type": "string",
|
||||||
|
"x-go-name": "Category"
|
||||||
|
},
|
||||||
|
"globalInputs": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/GlobalInputs"
|
||||||
|
},
|
||||||
|
"x-go-name": "GlobalInputs"
|
||||||
|
},
|
||||||
|
"id": {
|
||||||
|
"type": "string",
|
||||||
|
"x-go-name": "Id"
|
||||||
|
},
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"x-go-name": "Name"
|
||||||
|
},
|
||||||
|
"tasks": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/Task"
|
||||||
|
},
|
||||||
|
"x-go-name": "Tasks"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"x-go-package": "jannex/admin-dashboard-backend/modules/structs"
|
||||||
|
},
|
||||||
|
"GroupTaskSteps": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"CreatorUserId": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"EndedAt": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time"
|
||||||
|
},
|
||||||
|
"Files": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"GroupTasksId": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"Id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"Inputs": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"LockedByUserId": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"Log": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"StartedAt": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time"
|
||||||
|
},
|
||||||
|
"Status": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "uint8"
|
||||||
|
},
|
||||||
|
"Step": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "uint8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"x-go-package": "jannex/admin-dashboard-backend/modules/structs"
|
||||||
|
},
|
||||||
|
"GroupTasks": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"Category": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"CreatorUserId": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"CurrentTasksStep": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "uint8"
|
||||||
|
},
|
||||||
|
"Description": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"EndedAt": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time"
|
||||||
|
},
|
||||||
|
"GlobalInputs": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"GroupId": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"GroupName": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"Id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"NumberOfSteps": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "uint8"
|
||||||
|
},
|
||||||
|
"RememberId": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"StartedAt": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time"
|
||||||
|
},
|
||||||
|
"Status": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "uint8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"x-go-package": "jannex/admin-dashboard-backend/modules/structs"
|
||||||
|
},
|
||||||
|
"GroupTasksResponse": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"CategoryGroups": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/CategoryGroup"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"GroupTasks": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/GroupTasks"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"GroupTasksSteps": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/GroupTaskSteps"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"x-go-package": "jannex/admin-dashboard-backend/modules/structs"
|
||||||
|
},
|
||||||
|
"Role": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"CreatedAt": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time"
|
||||||
|
},
|
||||||
|
"Description": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"DisplayName": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"Id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"Master": {
|
||||||
|
"type": "boolean"
|
||||||
|
},
|
||||||
|
"SortingOrder": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "int64"
|
||||||
|
},
|
||||||
|
"UpdatedAt": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"x-go-package": "jannex/admin-dashboard-backend/modules/structs"
|
||||||
|
},
|
||||||
|
"RolePermissions": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"Permissions": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"RoleId": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"x-go-package": "jannex/admin-dashboard-backend/modules/structs"
|
||||||
|
},
|
||||||
|
"Task": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"name": {
|
||||||
|
"type": "string",
|
||||||
|
"x-go-name": "Name"
|
||||||
|
},
|
||||||
|
"onFinish": {
|
||||||
|
"type": "string",
|
||||||
|
"x-go-name": "OnFinish"
|
||||||
|
},
|
||||||
|
"parameters": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/TaskParameter"
|
||||||
|
},
|
||||||
|
"x-go-name": "Parameters"
|
||||||
|
},
|
||||||
|
"repeatPossible": {
|
||||||
|
"type": "boolean",
|
||||||
|
"x-go-name": "RepeatPossible"
|
||||||
|
},
|
||||||
|
"scriptPath": {
|
||||||
|
"type": "string",
|
||||||
|
"x-go-name": "ScriptPath"
|
||||||
|
},
|
||||||
|
"undoPossible": {
|
||||||
|
"type": "boolean",
|
||||||
|
"x-go-name": "UndoPossible"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"x-go-package": "jannex/admin-dashboard-backend/modules/structs"
|
||||||
|
},
|
||||||
|
"TaskParameter": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"displayName": {
|
||||||
|
"type": "string",
|
||||||
|
"x-go-name": "DisplayName"
|
||||||
|
},
|
||||||
|
"global": {
|
||||||
|
"type": "boolean",
|
||||||
|
"x-go-name": "Global"
|
||||||
|
},
|
||||||
|
"parameterName": {
|
||||||
|
"type": "string",
|
||||||
|
"x-go-name": "ParameterName"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"type": "string",
|
||||||
|
"x-go-name": "Type"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"x-go-package": "jannex/admin-dashboard-backend/modules/structs"
|
||||||
|
},
|
||||||
|
"UserApiKey": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"CreatedAt": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time"
|
||||||
|
},
|
||||||
|
"Id": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"LastUsed": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time"
|
||||||
|
},
|
||||||
|
"Name": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"Token": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"UsageCount": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "uint64"
|
||||||
|
},
|
||||||
|
"UserId": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"x-go-package": "jannex/admin-dashboard-backend/modules/structs"
|
||||||
|
},
|
||||||
|
"UserInfoResponse": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"AvailableGroupTasks": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Avatar": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"Permissions": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"UserId": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"Username": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"Users": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/AllUsers"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"x-go-package": "jannex/admin-dashboard-backend/modules/structs"
|
||||||
|
},
|
||||||
"UserLoginRequest": {
|
"UserLoginRequest": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"properties": {
|
"properties": {
|
||||||
|
@ -580,6 +1154,72 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"x-go-package": "jannex/admin-dashboard-backend/modules/structs"
|
"x-go-package": "jannex/admin-dashboard-backend/modules/structs"
|
||||||
|
},
|
||||||
|
"UserProfileResponse": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"ApiKeys": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/UserApiKey"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Email": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"Sessions": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/UserSessionSocket"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"x-go-package": "jannex/admin-dashboard-backend/modules/structs"
|
||||||
|
},
|
||||||
|
"UserSessionSocket": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"ConnectionStatus": {
|
||||||
|
"type": "integer",
|
||||||
|
"format": "uint8"
|
||||||
|
},
|
||||||
|
"ExpiresAt": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time"
|
||||||
|
},
|
||||||
|
"IdForDeletion": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"LastUsed": {
|
||||||
|
"type": "string",
|
||||||
|
"format": "date-time"
|
||||||
|
},
|
||||||
|
"UserAgent": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"x-go-package": "jannex/admin-dashboard-backend/modules/structs"
|
||||||
|
},
|
||||||
|
"UsersResponse": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"RoleId": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"Roles": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/Role"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Users": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/AllUsers"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"x-go-package": "jannex/admin-dashboard-backend/modules/structs"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
package adminarea
|
||||||
|
|
||||||
|
import (
|
||||||
|
"jannex/admin-dashboard-backend/modules/structs"
|
||||||
|
"jannex/admin-dashboard-backend/modules/utils"
|
||||||
|
"jannex/admin-dashboard-backend/socketclients"
|
||||||
|
|
||||||
|
"github.com/gofiber/fiber/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetRoles(c *fiber.Ctx) error {
|
||||||
|
// swagger:operation GET /adminarea/roles adminarea adminareaGetRoles
|
||||||
|
// ---
|
||||||
|
// summary: Get all roles
|
||||||
|
// consumes:
|
||||||
|
// - application/json
|
||||||
|
// produces:
|
||||||
|
// - application/json
|
||||||
|
// parameters:
|
||||||
|
// - name: X-Api-Key
|
||||||
|
// in: header
|
||||||
|
// description: You can create a new api key in your user profile
|
||||||
|
// responses:
|
||||||
|
// '200':
|
||||||
|
// description: All roles
|
||||||
|
// schema:
|
||||||
|
// "$ref": "#/definitions/AdminAreaRolesResponse"
|
||||||
|
// '401':
|
||||||
|
// description: No permissions
|
||||||
|
// '500':
|
||||||
|
// description: Failed to get roles
|
||||||
|
|
||||||
|
if !socketclients.HasOnePermission(c.Locals("userId").(string),
|
||||||
|
[]string{utils.PermissionAdminAreaCreateNewRole,
|
||||||
|
utils.PermissionAdminAreaDeleteRole,
|
||||||
|
utils.PermissionAdminAreaMoveRoleUpDown,
|
||||||
|
utils.PermissionAdminAreaUpdateRole}) {
|
||||||
|
return c.SendStatus(fiber.StatusUnauthorized)
|
||||||
|
}
|
||||||
|
|
||||||
|
return c.JSON(structs.AdminAreaRolesResponse{
|
||||||
|
Roles: socketclients.GetAllRoles(),
|
||||||
|
RolesPermissions: socketclients.GetAdminAreaRolesPermissions(),
|
||||||
|
})
|
||||||
|
}
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"jannex/admin-dashboard-backend/modules/equipment"
|
"jannex/admin-dashboard-backend/modules/equipment"
|
||||||
"jannex/admin-dashboard-backend/modules/structs"
|
"jannex/admin-dashboard-backend/modules/structs"
|
||||||
"jannex/admin-dashboard-backend/modules/utils"
|
"jannex/admin-dashboard-backend/modules/utils"
|
||||||
|
"jannex/admin-dashboard-backend/socketclients"
|
||||||
|
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
)
|
)
|
||||||
|
@ -34,6 +35,10 @@ func CreateEquipmentDocumentation(c *fiber.Ctx) error {
|
||||||
// '500':
|
// '500':
|
||||||
// description: Failed to create equipment documentation
|
// description: Failed to create equipment documentation
|
||||||
|
|
||||||
|
if !socketclients.HasPermission(c.Locals("userId").(string), utils.PermissionEquipmentDocumentationCreate) {
|
||||||
|
return c.SendStatus(fiber.StatusUnauthorized)
|
||||||
|
}
|
||||||
|
|
||||||
var body structs.CreateEquipmentDocumentationRequest
|
var body structs.CreateEquipmentDocumentationRequest
|
||||||
|
|
||||||
if err := utils.BodyParserHelper(c, &body); err != nil {
|
if err := utils.BodyParserHelper(c, &body); err != nil {
|
||||||
|
@ -72,6 +77,10 @@ func GetEquipmentDocumentations(c *fiber.Ctx) error {
|
||||||
// '500':
|
// '500':
|
||||||
// description: Failed to get equipment documentations
|
// description: Failed to get equipment documentations
|
||||||
|
|
||||||
|
if !socketclients.HasPermission(c.Locals("userId").(string), utils.PermissionEquipmentDocumentationView) {
|
||||||
|
return c.SendStatus(fiber.StatusUnauthorized)
|
||||||
|
}
|
||||||
|
|
||||||
var params structs.EquipmentRequest
|
var params structs.EquipmentRequest
|
||||||
|
|
||||||
if err := utils.ParamsParserHelper(c, ¶ms); err != nil {
|
if err := utils.ParamsParserHelper(c, ¶ms); err != nil {
|
||||||
|
@ -115,6 +124,10 @@ func GetEquipmentDocumentation(c *fiber.Ctx) error {
|
||||||
// '500':
|
// '500':
|
||||||
// description: Failed to get equipment documentation
|
// description: Failed to get equipment documentation
|
||||||
|
|
||||||
|
if !socketclients.HasPermission(c.Locals("userId").(string), utils.PermissionEquipmentDocumentationView) {
|
||||||
|
return c.SendStatus(fiber.StatusUnauthorized)
|
||||||
|
}
|
||||||
|
|
||||||
var params structs.GetDocumentationEquipmentRequest
|
var params structs.GetDocumentationEquipmentRequest
|
||||||
|
|
||||||
if err := utils.ParamsParserHelper(c, ¶ms); err != nil {
|
if err := utils.ParamsParserHelper(c, ¶ms); err != nil {
|
||||||
|
@ -150,6 +163,10 @@ func EditEquipmentDocumentation(c *fiber.Ctx) error {
|
||||||
// '500':
|
// '500':
|
||||||
// description: Failed to edit equipment documentation
|
// description: Failed to edit equipment documentation
|
||||||
|
|
||||||
|
if !socketclients.HasPermission(c.Locals("userId").(string), utils.PermissionEquipmentDocumentationEdit) {
|
||||||
|
return c.SendStatus(fiber.StatusUnauthorized)
|
||||||
|
}
|
||||||
|
|
||||||
var body structs.EditEquipmentDocumentationRequest
|
var body structs.EditEquipmentDocumentationRequest
|
||||||
|
|
||||||
if err := utils.BodyParserHelper(c, &body); err != nil {
|
if err := utils.BodyParserHelper(c, &body); err != nil {
|
||||||
|
|
|
@ -12,6 +12,35 @@ import (
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func GetGroupTasks(c *fiber.Ctx) error {
|
||||||
|
// swagger:operation GET /grouptasks grouptask grouptaskGetGroupTasks
|
||||||
|
// ---
|
||||||
|
// summary: Get all group tasks
|
||||||
|
// consumes:
|
||||||
|
// - application/json
|
||||||
|
// produces:
|
||||||
|
// - application/json
|
||||||
|
// parameters:
|
||||||
|
// - name: X-Api-Key
|
||||||
|
// in: header
|
||||||
|
// description: You can create a new api key in your user profile
|
||||||
|
// responses:
|
||||||
|
// '200':
|
||||||
|
// description: All group tasks
|
||||||
|
// schema:
|
||||||
|
// "$ref": "#/definitions/GroupTasksResponse"
|
||||||
|
// '401':
|
||||||
|
// description: No permissions
|
||||||
|
// '500':
|
||||||
|
// description: Failed to get group tasks
|
||||||
|
|
||||||
|
return c.JSON(structs.GroupTasksResponse{
|
||||||
|
CategoryGroups: cache.GetCategoryGroupsSorted(),
|
||||||
|
GroupTasks: grouptasks.GetAllGroupTasks(),
|
||||||
|
GroupTasksSteps: grouptasks.GetAllGroupTasksSteps(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func StartGroupTask(c *fiber.Ctx) error {
|
func StartGroupTask(c *fiber.Ctx) error {
|
||||||
// swagger:operation POST /grouptasks/start grouptask grouptaskStartGroupTask
|
// swagger:operation POST /grouptasks/start grouptask grouptaskStartGroupTask
|
||||||
// ---
|
// ---
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package logger
|
package logger
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"jannex/admin-dashboard-backend/modules/cache"
|
||||||
|
"jannex/admin-dashboard-backend/modules/grouptasks"
|
||||||
"jannex/admin-dashboard-backend/modules/logger"
|
"jannex/admin-dashboard-backend/modules/logger"
|
||||||
"jannex/admin-dashboard-backend/modules/structs"
|
"jannex/admin-dashboard-backend/modules/structs"
|
||||||
"jannex/admin-dashboard-backend/modules/utils"
|
"jannex/admin-dashboard-backend/modules/utils"
|
||||||
|
@ -38,22 +40,29 @@ func GetSystemLog(c *fiber.Ctx) error {
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
if t == "g" { // grouptasks logs
|
// / TODO: remove this by rendering the log message on backend site
|
||||||
return c.JSON(struct {
|
|
||||||
Logs []structs.LogMessageResponse
|
if t == "g" {
|
||||||
Dates []string
|
// grouptasks logs
|
||||||
}{
|
return c.JSON(structs.LogMessageResponse{
|
||||||
Logs: logger.ReadLogs(date, false, lang),
|
Logs: logger.ReadLogs(date, false, lang),
|
||||||
Dates: logger.GetAllLogMessagesDates(false),
|
Dates: logger.GetAllLogMessagesDates(false),
|
||||||
|
Users: socketclients.GetAllUsers(),
|
||||||
|
Roles: socketclients.GetAllRoles(),
|
||||||
|
CategoryGroups: cache.GetCategoryGroupsSorted(),
|
||||||
|
GroupTasks: grouptasks.GetAllGroupTasks(),
|
||||||
|
GroupTasksSteps: grouptasks.GetAllGroupTasksSteps(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// system logs
|
// system logs
|
||||||
return c.JSON(struct {
|
return c.JSON(structs.LogMessageResponse{
|
||||||
Logs []structs.LogMessageResponse
|
Logs: logger.ReadLogs(date, true, lang),
|
||||||
Dates []string
|
Dates: logger.GetAllLogMessagesDates(true),
|
||||||
}{
|
Users: socketclients.GetAllUsers(),
|
||||||
Logs: logger.ReadLogs(date, true, lang),
|
Roles: socketclients.GetAllRoles(),
|
||||||
Dates: logger.GetAllLogMessagesDates(true),
|
CategoryGroups: cache.GetCategoryGroupsSorted(),
|
||||||
|
GroupTasks: grouptasks.GetAllGroupTasks(),
|
||||||
|
GroupTasksSteps: grouptasks.GetAllGroupTasksSteps(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,19 +9,35 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func GetUserProfile(c *fiber.Ctx) error {
|
func GetUserProfile(c *fiber.Ctx) error {
|
||||||
|
// swagger:operation GET /user/profile user userProfile
|
||||||
|
// ---
|
||||||
|
// summary: Get user profile
|
||||||
|
// consumes:
|
||||||
|
// - application/json
|
||||||
|
// produces:
|
||||||
|
// - application/json
|
||||||
|
// parameters:
|
||||||
|
// - name: X-Api-Key
|
||||||
|
// in: header
|
||||||
|
// description: You can create a new api key in your user profile
|
||||||
|
// responses:
|
||||||
|
// '200':
|
||||||
|
// description: User profile
|
||||||
|
// schema:
|
||||||
|
// "$ref": "#/definitions/UserProfileResponse"
|
||||||
|
// '401':
|
||||||
|
// description: No permissions
|
||||||
|
// '500':
|
||||||
|
// description: Failed to get user profile
|
||||||
|
|
||||||
var user structs.User
|
var user structs.User
|
||||||
userId := c.Locals("userId").(string)
|
userId := c.Locals("userId").(string)
|
||||||
|
|
||||||
database.DB.First(&user, "id = ?", userId)
|
database.DB.First(&user, "id = ?", userId)
|
||||||
|
|
||||||
return c.JSON(structs.UserData{
|
return c.JSON(structs.UserProfileResponse{
|
||||||
Id: user.Id,
|
|
||||||
//RoleId: user.RoleId,
|
|
||||||
Avatar: user.Avatar,
|
|
||||||
Username: user.Username,
|
|
||||||
Email: user.Email,
|
Email: user.Email,
|
||||||
Sessions: socketclients.GetUserSessions(userId),
|
Sessions: socketclients.GetUserSessions(userId),
|
||||||
//Permissions: socketclients.GetPermissionsByRoleId(user.RoleId),
|
ApiKeys: socketclients.GetUserApiKeys(userId),
|
||||||
ApiKeys: socketclients.GetUserApiKeys(userId),
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,14 +9,37 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func UserInfo(c *fiber.Ctx) error {
|
func UserInfo(c *fiber.Ctx) error {
|
||||||
|
// swagger:operation GET /user/info user userInfo
|
||||||
|
// ---
|
||||||
|
// summary: Get user info
|
||||||
|
// consumes:
|
||||||
|
// - application/json
|
||||||
|
// produces:
|
||||||
|
// - application/json
|
||||||
|
// parameters:
|
||||||
|
// - name: X-Api-Key
|
||||||
|
// in: header
|
||||||
|
// description: You can create a new api key in your user profile
|
||||||
|
// responses:
|
||||||
|
// '200':
|
||||||
|
// description: User info
|
||||||
|
// schema:
|
||||||
|
// "$ref": "#/definitions/UserInfoResponse"
|
||||||
|
// '401':
|
||||||
|
// description: No permissions
|
||||||
|
// '500':
|
||||||
|
// description: Failed to get user info
|
||||||
|
|
||||||
var user structs.User
|
var user structs.User
|
||||||
|
|
||||||
database.DB.First(&user, "id = ?", c.Locals("userId").(string))
|
database.DB.Select("id, username, avatar", "role_id").First(&user, "id = ?", c.Locals("userId").(string))
|
||||||
|
|
||||||
return c.JSON(structs.UserInfoResponse{
|
return c.JSON(structs.UserInfoResponse{
|
||||||
|
UserId: user.Id,
|
||||||
Username: user.Username,
|
Username: user.Username,
|
||||||
Avatar: user.Avatar,
|
Avatar: user.Avatar,
|
||||||
Permissions: socketclients.GetPermissionsByRoleId(user.RoleId),
|
Permissions: socketclients.GetPermissionsByRoleId(user.RoleId),
|
||||||
AvailableGroupTasks: []string{},
|
AvailableGroupTasks: []string{},
|
||||||
|
Users: socketclients.GetAllUsers(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,27 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func GetUsers(c *fiber.Ctx) error {
|
func GetUsers(c *fiber.Ctx) error {
|
||||||
|
// swagger:operation GET /users users usersGetUsers
|
||||||
|
// ---
|
||||||
|
// summary: Get all users
|
||||||
|
// consumes:
|
||||||
|
// - application/json
|
||||||
|
// produces:
|
||||||
|
// - application/json
|
||||||
|
// parameters:
|
||||||
|
// - name: X-Api-Key
|
||||||
|
// in: header
|
||||||
|
// description: You can create a new api key in your user profile
|
||||||
|
// responses:
|
||||||
|
// '200':
|
||||||
|
// description: All users
|
||||||
|
// schema:
|
||||||
|
// "$ref": "#/definitions/UsersResponse"
|
||||||
|
// '401':
|
||||||
|
// description: No permissions
|
||||||
|
// '500':
|
||||||
|
// description: Failed to get users
|
||||||
|
|
||||||
var user structs.User
|
var user structs.User
|
||||||
|
|
||||||
database.DB.Select("role_id").First(&user, "id = ?", c.Locals("userId").(string))
|
database.DB.Select("role_id").First(&user, "id = ?", c.Locals("userId").(string))
|
||||||
|
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"jannex/admin-dashboard-backend/modules/logger"
|
"jannex/admin-dashboard-backend/modules/logger"
|
||||||
"jannex/admin-dashboard-backend/modules/structs"
|
"jannex/admin-dashboard-backend/modules/structs"
|
||||||
"jannex/admin-dashboard-backend/modules/utils"
|
"jannex/admin-dashboard-backend/modules/utils"
|
||||||
|
adminarea "jannex/admin-dashboard-backend/routers/router/api/v1/adminArea"
|
||||||
"jannex/admin-dashboard-backend/routers/router/api/v1/equipment"
|
"jannex/admin-dashboard-backend/routers/router/api/v1/equipment"
|
||||||
"jannex/admin-dashboard-backend/routers/router/api/v1/grouptask"
|
"jannex/admin-dashboard-backend/routers/router/api/v1/grouptask"
|
||||||
log "jannex/admin-dashboard-backend/routers/router/api/v1/logger"
|
log "jannex/admin-dashboard-backend/routers/router/api/v1/logger"
|
||||||
|
@ -41,6 +42,7 @@ func SetupRoutes(app *fiber.App) {
|
||||||
l.Get("/", requestAccessValidation, log.GetSystemLog)
|
l.Get("/", requestAccessValidation, log.GetSystemLog)
|
||||||
|
|
||||||
g := v1.Group("/grouptasks")
|
g := v1.Group("/grouptasks")
|
||||||
|
g.Get("/", requestAccessValidation, grouptask.GetGroupTasks)
|
||||||
g.Post("/start", requestAccessValidation, grouptask.StartGroupTask)
|
g.Post("/start", requestAccessValidation, grouptask.StartGroupTask)
|
||||||
|
|
||||||
e := v1.Group("/equipment")
|
e := v1.Group("/equipment")
|
||||||
|
@ -50,6 +52,9 @@ func SetupRoutes(app *fiber.App) {
|
||||||
e.Post("/documentation/edit", requestAccessValidation, equipment.EditEquipmentDocumentation)
|
e.Post("/documentation/edit", requestAccessValidation, equipment.EditEquipmentDocumentation)
|
||||||
e.Get("/thumbnail/:stockItemId", equipment.GetEquipmentThumbnail)
|
e.Get("/thumbnail/:stockItemId", equipment.GetEquipmentThumbnail)
|
||||||
|
|
||||||
|
a := v1.Group("/adminarea")
|
||||||
|
a.Get("/roles", requestAccessValidation, adminarea.GetRoles)
|
||||||
|
|
||||||
app.Static("/", config.Cfg.FolderPaths.PublicStatic)
|
app.Static("/", config.Cfg.FolderPaths.PublicStatic)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,6 +91,22 @@ func userApikeyTokenValidation(c *fiber.Ctx) error {
|
||||||
return fiber.ErrUnauthorized
|
return fiber.ErrUnauthorized
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// check if user has permission to use api keys
|
||||||
|
if !socketclients.HasPermission(apiKey.UserId, utils.PermissionUserProfileApiKeys) {
|
||||||
|
// delete api key from database
|
||||||
|
database.DB.Delete(&apiKey)
|
||||||
|
|
||||||
|
logger.AddSystemLog(structs.LogMessage{
|
||||||
|
Id: 26,
|
||||||
|
Type: utils.LogTypeInfo,
|
||||||
|
Messages: []structs.LogData{
|
||||||
|
{Type: "userId", Value: apiKey.UserId},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
return fiber.ErrUnauthorized
|
||||||
|
}
|
||||||
|
|
||||||
lastUsed := time.Now()
|
lastUsed := time.Now()
|
||||||
|
|
||||||
database.DB.Model(&structs.UserApiKey{}).Where("id = ?", apiKey.Id).Updates(map[string]interface{}{
|
database.DB.Model(&structs.UserApiKey{}).Where("id = ?", apiKey.Id).Updates(map[string]interface{}{
|
||||||
|
|
|
@ -714,6 +714,31 @@ func HasPermission(userId string, permission string) bool {
|
||||||
return rolePermission.PermissionId == permission
|
return rolePermission.PermissionId == permission
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This function is used to check if a user has one of the provided permissions
|
||||||
|
// For example if a user has one of the permissions "user.create" or "user.delete"
|
||||||
|
func HasOnePermission(userId string, permissions []string) bool {
|
||||||
|
var user structs.User
|
||||||
|
|
||||||
|
database.DB.Where("id = ?", userId).First(&user)
|
||||||
|
|
||||||
|
var userPermissions []structs.RolePermission
|
||||||
|
|
||||||
|
database.DB.Where("role_id = ?", user.RoleId).Find(&userPermissions)
|
||||||
|
|
||||||
|
// loop through all provided permissions
|
||||||
|
for _, permission := range permissions {
|
||||||
|
// loop through all user permissions
|
||||||
|
for _, userPermission := range userPermissions {
|
||||||
|
// check if the user has the permission
|
||||||
|
if userPermission.PermissionId == permission {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
func HasXYPermission(userId string, permission string, category string) bool {
|
func HasXYPermission(userId string, permission string, category string) bool {
|
||||||
return HasPermission(userId, systempermissions.ConvertXYPermission(permission, category))
|
return HasPermission(userId, systempermissions.ConvertXYPermission(permission, category))
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,35 +57,6 @@ func RunHub() {
|
||||||
ExpiresAt: utils.GetSessionExpiresAtTime(),
|
ExpiresAt: utils.GetSessionExpiresAtTime(),
|
||||||
})
|
})
|
||||||
|
|
||||||
// init data message
|
|
||||||
var user structs.User
|
|
||||||
|
|
||||||
database.DB.First(&user, "id = ?", userId)
|
|
||||||
|
|
||||||
newSocketClient.SendMessage(structs.SendSocketMessage{
|
|
||||||
Cmd: utils.SentCmdInitUserSocketConnection,
|
|
||||||
Body: structs.InitUserSocketConnection{
|
|
||||||
User: structs.UserData{
|
|
||||||
Id: user.Id,
|
|
||||||
RoleId: user.RoleId,
|
|
||||||
Username: user.Username,
|
|
||||||
Email: user.Email,
|
|
||||||
Sessions: socketclients.GetUserSessions(userId),
|
|
||||||
Permissions: socketclients.GetPermissionsByRoleId(user.RoleId),
|
|
||||||
ApiKeys: socketclients.GetUserApiKeys(userId),
|
|
||||||
},
|
|
||||||
CategoryGroups: cache.GetCategoryGroupsSorted(),
|
|
||||||
GroupTasks: grouptasks.GetAllGroupTasks(),
|
|
||||||
GroupTasksSteps: grouptasks.GetAllGroupTasksSteps(),
|
|
||||||
AllUsers: socketclients.GetAllUsers(),
|
|
||||||
Scanners: socketclients.GetAllScanners(),
|
|
||||||
AllRoles: socketclients.GetAllRoles(),
|
|
||||||
AdminArea: structs.InitUserSocketConnectionAdminArea{
|
|
||||||
RolesPermissions: socketclients.GetAdminAreaRolesPermissions(),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
socketclients.UpdateConnectedUsers(userId)
|
socketclients.UpdateConnectedUsers(userId)
|
||||||
socketclients.UpdateUserSessionsForUser(userId, sessionId)
|
socketclients.UpdateUserSessionsForUser(userId, sessionId)
|
||||||
|
|
||||||
|
@ -93,7 +64,7 @@ func RunHub() {
|
||||||
Id: 0,
|
Id: 0,
|
||||||
Type: utils.LogTypeInfo,
|
Type: utils.LogTypeInfo,
|
||||||
Messages: []structs.LogData{
|
Messages: []structs.LogData{
|
||||||
{Type: "userId", Value: user.Id}}})
|
{Type: "userId", Value: userId}}})
|
||||||
|
|
||||||
case data := <-broadcast:
|
case data := <-broadcast:
|
||||||
var receivedMessage structs.ReceivedMessage
|
var receivedMessage structs.ReceivedMessage
|
||||||
|
@ -128,53 +99,6 @@ func RunHub() {
|
||||||
GlobalInputs: globalInputsJsonString,
|
GlobalInputs: globalInputsJsonString,
|
||||||
RememberId: receivedMessage.Body["rememberId"].(string),
|
RememberId: receivedMessage.Body["rememberId"].(string),
|
||||||
})
|
})
|
||||||
|
|
||||||
//groupTaskId := uuid.New().String()
|
|
||||||
|
|
||||||
/*
|
|
||||||
groupTasks := structs.GroupTasks{
|
|
||||||
Id: groupTaskId,
|
|
||||||
CreatorUserId: data.Conn.Locals("userId").(string),
|
|
||||||
Category: category,
|
|
||||||
GroupId: groupId,
|
|
||||||
GroupName: receivedMessage.Body["groupName"].(string),
|
|
||||||
Description: receivedMessage.Body["description"].(string),
|
|
||||||
CurrentTasksStep: 1,
|
|
||||||
NumberOfSteps: uint8(receivedMessage.Body["numberOfSteps"].(float64)),
|
|
||||||
Status: utils.GroupTasksStatusRunning,
|
|
||||||
GlobalInputs: globalInputsJsonString,
|
|
||||||
StartedAt: time.Now(),
|
|
||||||
RememberId: receivedMessage.Body["rememberId"].(string),
|
|
||||||
}
|
|
||||||
|
|
||||||
database.DB.Create(&groupTasks)
|
|
||||||
|
|
||||||
socketclients.BroadcastMessage(structs.SendSocketMessage{
|
|
||||||
Cmd: utils.SentCmdNewGroupTaskStarted,
|
|
||||||
Body: groupTasks,
|
|
||||||
})
|
|
||||||
|
|
||||||
go grouptasks.RunGroupTask(grouptasks.RunGroupTaskArgs{
|
|
||||||
CreatorUserId: data.Conn.Locals("userId").(string),
|
|
||||||
StartType: grouptasks.RunGroupTaskStartTypeNormal,
|
|
||||||
GroupTaskId: groupTaskId,
|
|
||||||
Category: category,
|
|
||||||
GroupId: groupId,
|
|
||||||
Step: 1,
|
|
||||||
TaskStepId: "",
|
|
||||||
GlobalInputs: globalInputsJsonString,
|
|
||||||
})
|
|
||||||
|
|
||||||
logger.AddGroupTasksLog(structs.LogMessage{
|
|
||||||
Id: 0,
|
|
||||||
Type: utils.LogTypeInfo,
|
|
||||||
Messages: []structs.LogData{
|
|
||||||
{Type: "userId", Value: data.Conn.Locals("userId").(string)},
|
|
||||||
{Type: "groupTaskId", Value: groupTaskId},
|
|
||||||
{Type: "groupTaskName", Value: groupTasks.GroupName},
|
|
||||||
},
|
|
||||||
}) */
|
|
||||||
|
|
||||||
break
|
break
|
||||||
case utils.ReceivedCmdTaskFailedTryAgainRunTaskStep:
|
case utils.ReceivedCmdTaskFailedTryAgainRunTaskStep:
|
||||||
groupTaskArgs := grouptasks.RunGroupTaskArgs{
|
groupTaskArgs := grouptasks.RunGroupTaskArgs{
|
||||||
|
|
|
@ -1,340 +1,353 @@
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"id": 0,
|
"id": 0,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "%userId% has come online"
|
"message": "%userId% has come online"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "%userId% ist online gegangen"
|
"message": "%userId% ist online gegangen"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "%userId% has created the role %roleId%"
|
"message": "%userId% has created the role %roleId%"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "%userId% hat die Rolle %roleId% erstellt"
|
"message": "%userId% hat die Rolle %roleId% erstellt"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 2,
|
"id": 2,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "%userId% has updated the role %roleId% with the following changes: %changes%"
|
"message": "%userId% has updated the role %roleId% with the following changes: %changes%"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "%userId% hat die Rolle %roleId% mit den folgenden Änderungen bearbeitet: %changes%"
|
"message": "%userId% hat die Rolle %roleId% mit den folgenden Änderungen bearbeitet: %changes%"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 3,
|
"id": 3,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "%userId% has changed the sorting order of role %roleId% to %sortingOrder%"
|
"message": "%userId% has changed the sorting order of role %roleId% to %sortingOrder%"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "%userId% hat die Sortierung der Rolle %roleId% zu %sortingOrder% geändert"
|
"message": "%userId% hat die Sortierung der Rolle %roleId% zu %sortingOrder% geändert"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 4,
|
"id": 4,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "%userId% has deleted the role %roleId%"
|
"message": "%userId% has deleted the role %roleId%"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "%userId% hat die Rolle %roleId% gelöscht"
|
"message": "%userId% hat die Rolle %roleId% gelöscht"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 5,
|
"id": 5,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "%userId% has assigned the role %roleId% to %targetUserId%"
|
"message": "%userId% has assigned the role %roleId% to %targetUserId%"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "%userId% hat die Rolle %roleId% dem Benutzer %targetUserId% zugewiesen"
|
"message": "%userId% hat die Rolle %roleId% dem Benutzer %targetUserId% zugewiesen"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 6,
|
"id": 6,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "%userId% has created the user %targetUserId% with the assigned role %roleId%"
|
"message": "%userId% has created the user %targetUserId% with the assigned role %roleId%"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "%userId% hat den Benutzer %targetUserId% mit der zugewiesenen Rolle %roleId% erstellt"
|
"message": "%userId% hat den Benutzer %targetUserId% mit der zugewiesenen Rolle %roleId% erstellt"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 7,
|
"id": 7,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "%userId% has deleted the user %targetUserId%"
|
"message": "%userId% has deleted the user %targetUserId%"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "%userId% hat den Benutzer %targetUserId% gelöscht"
|
"message": "%userId% hat den Benutzer %targetUserId% gelöscht"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 8,
|
"id": 8,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "--------- SERVER has started ---------"
|
"message": "--------- SERVER has started ---------"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "--------- SERVER gestartet ---------"
|
"message": "--------- SERVER gestartet ---------"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 9,
|
"id": 9,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "%userId% has changed the deactivation status of %targetUserId% to %deactivated%"
|
"message": "%userId% has changed the deactivation status of %targetUserId% to %deactivated%"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "%userId% hat den Deaktivierungsstatus von dem Benutzer %targetUserId% zu %deactivated% aktualisiert"
|
"message": "%userId% hat den Deaktivierungsstatus von dem Benutzer %targetUserId% zu %deactivated% aktualisiert"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 10,
|
"id": 10,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "Scanner %scannerId% is now used by %userId%"
|
"message": "Scanner %scannerId% is now used by %userId%"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "Scanner %scannerId% ist nun in Verwendung von %userId%"
|
"message": "Scanner %scannerId% ist nun in Verwendung von %userId%"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 11,
|
"id": 11,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "Scanner %scannerId% is not longer used"
|
"message": "Scanner %scannerId% is not longer used"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "Scanner %scannerId% ist nicht länger in Verwendung"
|
"message": "Scanner %scannerId% ist nicht länger in Verwendung"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 12,
|
"id": 12,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "%userId% has changed his password"
|
"message": "%userId% has changed his password"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "%userId% hat sein Passwort geändert"
|
"message": "%userId% hat sein Passwort geändert"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 13,
|
"id": 13,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "%userId% has updated his account with the following changes: %changes%"
|
"message": "%userId% has updated his account with the following changes: %changes%"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "%userId% hat seinen Account mit folgenden Veränderungen aktualisiert: %changes%"
|
"message": "%userId% hat seinen Account mit folgenden Veränderungen aktualisiert: %changes%"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 14,
|
"id": 14,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "Scanner %scannerId% %scannerName% was registered"
|
"message": "Scanner %scannerId% %scannerName% was registered"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "Scanner %scannerId% %scannerName% wurde registriert"
|
"message": "Scanner %scannerId% %scannerName% wurde registriert"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 15,
|
"id": 15,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "Scanner %scannerId% has scanned %scanResult%"
|
"message": "Scanner %scannerId% has scanned %scanResult%"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "Scanner %scannerId% hat %scanResult% gescannt"
|
"message": "Scanner %scannerId% hat %scanResult% gescannt"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 16,
|
"id": 16,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "Scanner %scannerId% was deleted"
|
"message": "Scanner %scannerId% was deleted"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "Scanner %scannerId% wurde gelöscht"
|
"message": "Scanner %scannerId% wurde gelöscht"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 17,
|
"id": 17,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "%userId% has viewed %logType% logs of the date %logDate%"
|
"message": "%userId% has viewed %logType% logs of the date %logDate%"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "%userId% hat sich die Logs %logType% vom %logDate% angesehen"
|
"message": "%userId% hat sich die Logs %logType% vom %logDate% angesehen"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 18,
|
"id": 18,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "%userId% has gone offline"
|
"message": "%userId% has gone offline"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "%userId% ist offline gegangen"
|
"message": "%userId% ist offline gegangen"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 19,
|
"id": 19,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "%userId% has logged in"
|
"message": "%userId% has logged in"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "%userId% hat sich eingeloggt"
|
"message": "%userId% hat sich eingeloggt"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 20,
|
"id": 20,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "%userId% has logged out"
|
"message": "%userId% has logged out"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "%userId% hat sich abgemeldet"
|
"message": "%userId% hat sich abgemeldet"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 21,
|
"id": 21,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "%userId% has changed his avatar"
|
"message": "%userId% has changed his avatar"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "%userId% hat sein Profilbild aktualisiert"
|
"message": "%userId% hat sein Profilbild aktualisiert"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 22,
|
"id": 22,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "%userId% has logged out one of his account sessions"
|
"message": "%userId% has logged out one of his account sessions"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "%userId% hat eine seiner Sitzungen ausgeloggt"
|
"message": "%userId% hat eine seiner Sitzungen ausgeloggt"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 23,
|
"id": 23,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "%userId% has created an API key"
|
"message": "%userId% has created an API key"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "%userId% hat einen API-Schlüssel erstellt"
|
"message": "%userId% hat einen API-Schlüssel erstellt"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 24,
|
"id": 24,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "%userId% has deleted one of its api keys"
|
"message": "%userId% has deleted one of its api keys"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "%userId% hat einen seiner Api-Schlüssel gelöscht"
|
"message": "%userId% hat einen seiner Api-Schlüssel gelöscht"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 25,
|
"id": 25,
|
||||||
"languages": [
|
"languages": [
|
||||||
{
|
{
|
||||||
"lang": "en",
|
"lang": "en",
|
||||||
"message": "%userId% has used one of its api keys"
|
"message": "%userId% has used one of its api keys"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"lang": "de",
|
"lang": "de",
|
||||||
"message": "%userId% hat einen seiner Api-Schlüssel verwendet"
|
"message": "%userId% hat einen seiner Api-Schlüssel verwendet"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
"id": 26,
|
||||||
|
"languages": [
|
||||||
|
{
|
||||||
|
"lang": "en",
|
||||||
|
"message": "%userId% has tried to use one of its api keys, but has no longer permission to do so"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"lang": "de",
|
||||||
|
"message": "%userId% hat versucht einen seiner Api-Schlüssel zu verwenden, hat aber keine Berechtigung mehr dazu"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
]
|
]
|
Loading…
Reference in New Issue