added logger for grouptasks and system
parent
a6c9eb2900
commit
43a25f817b
|
@ -0,0 +1,11 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"id": 0,
|
||||||
|
"languages": [
|
||||||
|
{
|
||||||
|
"lang": "en",
|
||||||
|
"message": "%userId% has started group tasks"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
|
@ -0,0 +1,103 @@
|
||||||
|
{"Id":0,"Time":"2023-06-26T14:40:53.344359537+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T14:40:54.388697469+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T14:41:08.397273014+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T14:41:09.059905327+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T14:44:00.704064229+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T14:44:00.757018863+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T14:48:22.373511048+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T14:48:23.113997674+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T14:48:32.581372985+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T14:48:33.399112571+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T14:53:21.353456966+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T14:53:21.392168992+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T14:53:42.372417807+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T14:53:42.479579138+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T14:53:53.388534593+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T14:53:53.569891973+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:15:55.476845699+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:15:55.562110779+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:18:00.139081715+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:18:00.188060672+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:20:56.252674262+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:20:56.322052586+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:21:34.183104637+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:21:34.238983689+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:21:47.901594058+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:21:47.957861269+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:21:55.00618043+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:21:55.094324945+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:28:17.378472657+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:28:17.442670752+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:46:42.852109566+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:46:44.117866181+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:51:04.075699656+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:51:04.139294474+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:53:33.812822579+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:53:55.750431162+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:54:23.509249057+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:54:32.489746458+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:54:42.425441725+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T15:56:05.308186703+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:01:23.072004383+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:01:46.172679342+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:03:39.737390245+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:04:05.088615344+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:04:21.533500276+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:05:02.034541248+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:05:06.571337816+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:15:54.596922828+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:15:54.663200369+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:16:58.723786041+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:16:58.778960869+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:17:14.941884767+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:23:21.562944663+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:23:22.371236719+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:23:38.205995944+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:23:44.81232114+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:25:37.248649355+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:25:37.80611411+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:25:46.934383621+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:25:47.015168493+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:26:23.528932114+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:27:19.857060312+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:31:50.791041651+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:37:07.810002714+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:37:08.514678749+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:59:33.232327496+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T16:59:33.85629423+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:15:41.86545891+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:15:41.935428528+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:15:43.062270121+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:15:43.859232118+02:00","Type":0,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:19:02.902554585+02:00","Type":1,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:19:02.952776992+02:00","Type":1,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:19:03.001309906+02:00","Type":1,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:19:03.040355365+02:00","Type":1,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:19:58.303858277+02:00","Type":3,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:19:58.826549462+02:00","Type":3,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:19:58.869519116+02:00","Type":3,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:19:59.210307836+02:00","Type":3,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:20:17.84431075+02:00","Type":2,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:20:17.898623303+02:00","Type":2,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:20:17.985769915+02:00","Type":2,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:20:18.049521892+02:00","Type":2,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:25:10.872894974+02:00","Type":2,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:25:26.032539587+02:00","Type":2,"Messages":[{"Type":"user","Value":"Alex"},{"Type":"role","Value":"Test"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:28:51.958849106+02:00","Type":2,"Messages":[{"Type":"username","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:28:52.051645006+02:00","Type":2,"Messages":[{"Type":"username","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:28:52.0958333+02:00","Type":2,"Messages":[{"Type":"username","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:29:09.128923843+02:00","Type":2,"Messages":[{"Type":"username","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:29:09.179518658+02:00","Type":2,"Messages":[{"Type":"username","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:29:10.007487297+02:00","Type":2,"Messages":[{"Type":"username","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:29:23.009030867+02:00","Type":0,"Messages":[{"Type":"username","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:29:23.079119037+02:00","Type":0,"Messages":[{"Type":"username","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:29:23.146551593+02:00","Type":0,"Messages":[{"Type":"username","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:35:05.91026836+02:00","Type":0,"Messages":[{"Type":"username","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:35:06.030515145+02:00","Type":0,"Messages":[{"Type":"username","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:35:07.115992125+02:00","Type":0,"Messages":[{"Type":"username","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:35:07.803301779+02:00","Type":0,"Messages":[{"Type":"username","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T17:35:39.912754022+02:00","Type":0,"Messages":[{"Type":"username","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T18:49:59.589837134+02:00","Type":0,"Messages":[{"Type":"username","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T19:00:39.906990709+02:00","Type":0,"Messages":[{"Type":"username","Value":"Alex"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T19:03:21.070788107+02:00","Type":0,"Messages":[{"Type":"userId","Value":"34a2e968-8769-4794-97f9-8134db97d50f"}]}
|
||||||
|
{"Id":0,"Time":"2023-06-26T19:03:21.109272654+02:00","Type":0,"Messages":[{"Type":"userId","Value":"34a2e968-8769-4794-97f9-8134db97d50f"}]}
|
1
main.go
1
main.go
|
@ -21,6 +21,7 @@ func init() {
|
||||||
config.LoadConfig()
|
config.LoadConfig()
|
||||||
logger.InitLogger()
|
logger.InitLogger()
|
||||||
utils.ValidatorInit()
|
utils.ValidatorInit()
|
||||||
|
logger.ReadLanguageLogMessages()
|
||||||
systempermissions.InitSystemPermissions()
|
systempermissions.InitSystemPermissions()
|
||||||
grouptasks.LoadGroups("")
|
grouptasks.LoadGroups("")
|
||||||
database.InitDatabase()
|
database.InitDatabase()
|
||||||
|
|
|
@ -37,13 +37,22 @@ func InitDatabase() {
|
||||||
db.AutoMigrate(&structs.Role{})
|
db.AutoMigrate(&structs.Role{})
|
||||||
db.AutoMigrate(&structs.RolePermission{})
|
db.AutoMigrate(&structs.RolePermission{})
|
||||||
|
|
||||||
/* masterRoleId := handleMasterRolePermissions() */
|
masterRoleId := handleMasterRolePermissions()
|
||||||
handleMasterRolePermissions()
|
//handleMasterRolePermissions()
|
||||||
//createUser(masterRoleId)
|
createDefaultAdminUser(masterRoleId)
|
||||||
}
|
}
|
||||||
|
|
||||||
func createUser(masterRoleId string) {
|
func createDefaultAdminUser(masterRoleId string) {
|
||||||
pw := []byte("haha")
|
var userCount int64
|
||||||
|
DB.Model(&structs.User{}).Count(&userCount)
|
||||||
|
|
||||||
|
if userCount > 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Info().Msg("No users found. Master account was created:")
|
||||||
|
|
||||||
|
pw := []byte("adminadmin")
|
||||||
|
|
||||||
hashedPassword, err := bcrypt.GenerateFromPassword(pw, bcrypt.DefaultCost)
|
hashedPassword, err := bcrypt.GenerateFromPassword(pw, bcrypt.DefaultCost)
|
||||||
|
|
||||||
|
@ -51,14 +60,19 @@ func createUser(masterRoleId string) {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
DB.Create(&structs.User{
|
user := structs.User{
|
||||||
Id: uuid.New().String(),
|
Id: uuid.New().String(),
|
||||||
RoleId: masterRoleId,
|
RoleId: masterRoleId,
|
||||||
Username: "Alex",
|
Username: "admin",
|
||||||
Email: "alex@roese.dev",
|
Email: "admin@roese.dev",
|
||||||
Password: string(hashedPassword),
|
Password: string(hashedPassword),
|
||||||
CreatedAt: time.Now(),
|
CreatedAt: time.Now(),
|
||||||
})
|
}
|
||||||
|
|
||||||
|
DB.Create(&user)
|
||||||
|
|
||||||
|
log.Info().Msgf("Username: %s", user.Username)
|
||||||
|
log.Info().Msgf("Password: %s", string(pw))
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleMasterRolePermissions() (roleId string) {
|
func handleMasterRolePermissions() (roleId string) {
|
||||||
|
|
|
@ -1,13 +1,33 @@
|
||||||
package logger
|
package logger
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"janex/admin-dashboard-backend/modules/config"
|
"janex/admin-dashboard-backend/modules/config"
|
||||||
|
"janex/admin-dashboard-backend/modules/structs"
|
||||||
"os"
|
"os"
|
||||||
|
"sort"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/rs/zerolog"
|
"github.com/rs/zerolog"
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var systemLanguageLogMessages []structs.LanguageLogMessages
|
||||||
|
var grouptasksLanguageLogMessages []structs.LanguageLogMessages
|
||||||
|
|
||||||
|
const (
|
||||||
|
systemLogsRootPath = "./logs/system/"
|
||||||
|
groupTasksLogsRootPath = "./logs/grouptasks/"
|
||||||
|
|
||||||
|
systemLanguageLogPath = "./system_lang_log_messages.json"
|
||||||
|
grouptasksLanguageLogPath = "./grouptasks_lang_log_messages.json"
|
||||||
|
)
|
||||||
|
|
||||||
func InitLogger() {
|
func InitLogger() {
|
||||||
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
|
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
|
||||||
|
|
||||||
|
@ -21,3 +41,176 @@ func InitLogger() {
|
||||||
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: "15:04:05"})
|
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: "15:04:05"})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func AddSystemLog(logMessage structs.LogMessage) {
|
||||||
|
addLog(logMessage, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
func AddGroupTasksLog(logMessage structs.LogMessage) {
|
||||||
|
addLog(logMessage, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
func addLog(logMessage structs.LogMessage, systemLog bool) {
|
||||||
|
year, month, day := time.Now().Date()
|
||||||
|
|
||||||
|
path := systemLogsRootPath
|
||||||
|
|
||||||
|
if !systemLog {
|
||||||
|
path = groupTasksLogsRootPath
|
||||||
|
}
|
||||||
|
|
||||||
|
f, err := os.OpenFile(path+strconv.Itoa(day)+"-"+strconv.Itoa(int(month))+"-"+strconv.Itoa(year)+".json", os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0644)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Error().Msgf("Failed to open log file %s", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
logMessage.Time = time.Now()
|
||||||
|
|
||||||
|
file, _ := json.Marshal(logMessage)
|
||||||
|
|
||||||
|
if _, err = fmt.Fprintln(f, string(file)); err != nil {
|
||||||
|
log.Error().Msgf("Failed to write to log file %s", err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func ReadLogs(date string, systemLogs bool) []structs.LogMessageResponse {
|
||||||
|
path := systemLogsRootPath
|
||||||
|
|
||||||
|
if !systemLogs {
|
||||||
|
path = groupTasksLogsRootPath
|
||||||
|
}
|
||||||
|
|
||||||
|
file, err := os.Open(path + date + ".json")
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Error().Msgf("Failed to read log file %s", err.Error())
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
|
fileScanner := bufio.NewScanner(file)
|
||||||
|
|
||||||
|
var logMessages []structs.LogMessageResponse
|
||||||
|
|
||||||
|
for fileScanner.Scan() {
|
||||||
|
var logMessage structs.LogMessage
|
||||||
|
|
||||||
|
if err := json.Unmarshal(fileScanner.Bytes(), &logMessage); err != nil {
|
||||||
|
log.Error().Msgf("Failed to unmarshal log message %v", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
var languageLogMessages []structs.LanguageLogMessages
|
||||||
|
|
||||||
|
if systemLogs {
|
||||||
|
languageLogMessages = systemLanguageLogMessages
|
||||||
|
} else {
|
||||||
|
languageLogMessages = grouptasksLanguageLogMessages
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, systemLanguageLogMessage := range languageLogMessages {
|
||||||
|
if logMessage.Id == systemLanguageLogMessage.Id {
|
||||||
|
replacedLogMessage := systemLanguageLogMessage.Languages[0].Message
|
||||||
|
|
||||||
|
for _, message := range logMessage.Messages {
|
||||||
|
replacedLogMessage = strings.ReplaceAll(replacedLogMessage, "%"+message.Type+"%", message.Value)
|
||||||
|
}
|
||||||
|
|
||||||
|
logMessages = append(logMessages, structs.LogMessageResponse{
|
||||||
|
Time: logMessage.Time,
|
||||||
|
Type: logMessage.Type,
|
||||||
|
Message: replacedLogMessage,
|
||||||
|
})
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := fileScanner.Err(); err != nil {
|
||||||
|
log.Error().Msgf("Error while reading file: %s", err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return logMessages
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetAllLogMessagesDates(systemLogs bool) []string {
|
||||||
|
path := systemLogsRootPath
|
||||||
|
|
||||||
|
if !systemLogs {
|
||||||
|
path = groupTasksLogsRootPath
|
||||||
|
}
|
||||||
|
|
||||||
|
files, err := ioutil.ReadDir(path)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Error().Msgf("Failed to read log messages directory %s", err.Error())
|
||||||
|
return []string{}
|
||||||
|
}
|
||||||
|
|
||||||
|
var dates []string
|
||||||
|
|
||||||
|
for _, file := range files {
|
||||||
|
dates = append(dates, strings.Split(file.Name(), ".")[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
layout := "2-1-2006"
|
||||||
|
parsedDates := make([]time.Time, len(dates))
|
||||||
|
|
||||||
|
for i, dateStr := range dates {
|
||||||
|
parsedDate, err := time.Parse(layout, dateStr)
|
||||||
|
if err != nil {
|
||||||
|
log.Error().Msgf("Failed to parse date %s", err.Error())
|
||||||
|
return []string{}
|
||||||
|
}
|
||||||
|
|
||||||
|
parsedDates[i] = parsedDate
|
||||||
|
}
|
||||||
|
|
||||||
|
sort.Slice(parsedDates, func(i, j int) bool {
|
||||||
|
return parsedDates[i].Before(parsedDates[j])
|
||||||
|
})
|
||||||
|
|
||||||
|
sortedDates := []string{}
|
||||||
|
|
||||||
|
for _, date := range parsedDates {
|
||||||
|
sortedDates = append(sortedDates, date.Format(layout))
|
||||||
|
}
|
||||||
|
|
||||||
|
return sortedDates
|
||||||
|
}
|
||||||
|
|
||||||
|
func ReadLanguageLogMessages() {
|
||||||
|
readLanguageLogMessages(true)
|
||||||
|
readLanguageLogMessages(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
func readLanguageLogMessages(systemLogs bool) {
|
||||||
|
path := systemLanguageLogPath
|
||||||
|
|
||||||
|
if !systemLogs {
|
||||||
|
path = grouptasksLanguageLogPath
|
||||||
|
}
|
||||||
|
|
||||||
|
content, err := ioutil.ReadFile(path)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
panic("Could not read language log messages: " + err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
var langLogMessages []structs.LanguageLogMessages
|
||||||
|
|
||||||
|
if err = json.Unmarshal(content, &langLogMessages); err != nil {
|
||||||
|
panic("Failed to unmarshal: " + err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
if systemLogs {
|
||||||
|
systemLanguageLogMessages = langLogMessages
|
||||||
|
} else {
|
||||||
|
grouptasksLanguageLogMessages = langLogMessages
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
package structs
|
||||||
|
|
||||||
|
import (
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type LogMessage struct {
|
||||||
|
Id uint16
|
||||||
|
Time time.Time
|
||||||
|
Type uint8
|
||||||
|
Messages []LogData
|
||||||
|
}
|
||||||
|
|
||||||
|
type LogData struct {
|
||||||
|
Type string
|
||||||
|
Value string
|
||||||
|
}
|
||||||
|
|
||||||
|
type LanguageLogMessages struct {
|
||||||
|
Id uint16
|
||||||
|
Languages []LanguageLogMessagesLanguage
|
||||||
|
}
|
||||||
|
|
||||||
|
type LanguageLogMessagesLanguage struct {
|
||||||
|
Lang string
|
||||||
|
Message string
|
||||||
|
}
|
||||||
|
|
||||||
|
type LogMessageResponse struct {
|
||||||
|
Time time.Time
|
||||||
|
Type uint8
|
||||||
|
Message string
|
||||||
|
}
|
|
@ -120,3 +120,8 @@ const (
|
||||||
PermissionAdminAreaMoveRoleUpDown = _adminAreaRoles + "move_role_up_down"
|
PermissionAdminAreaMoveRoleUpDown = _adminAreaRoles + "move_role_up_down"
|
||||||
PermissionAdminAreaLogs = _adminArea + "logs"
|
PermissionAdminAreaLogs = _adminArea + "logs"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
LogTypeInfo = 0
|
||||||
|
LogTypeError = 1
|
||||||
|
)
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
package logger
|
||||||
|
|
||||||
|
import (
|
||||||
|
"janex/admin-dashboard-backend/modules/logger"
|
||||||
|
"janex/admin-dashboard-backend/modules/structs"
|
||||||
|
"janex/admin-dashboard-backend/modules/utils"
|
||||||
|
"janex/admin-dashboard-backend/socketclients"
|
||||||
|
|
||||||
|
"github.com/gofiber/fiber/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetSystemLog(c *fiber.Ctx) error {
|
||||||
|
t := c.Query("type")
|
||||||
|
date := c.Query("date")
|
||||||
|
|
||||||
|
if t == "" || date == "" {
|
||||||
|
return c.SendStatus(fiber.StatusBadRequest)
|
||||||
|
}
|
||||||
|
|
||||||
|
if t == "g" && !socketclients.HasPermission(c.Locals("userId").(string), utils.PermissionGroupTasksHistory) || t == "s" && !socketclients.HasPermission(c.Locals("userId").(string), utils.PermissionAdminAreaLogs) {
|
||||||
|
return c.SendStatus(fiber.StatusUnauthorized)
|
||||||
|
}
|
||||||
|
|
||||||
|
if t == "g" { // grouptasks logs
|
||||||
|
return c.JSON(struct {
|
||||||
|
Logs []structs.LogMessageResponse
|
||||||
|
Dates []string
|
||||||
|
}{
|
||||||
|
Logs: logger.ReadLogs(date, false),
|
||||||
|
Dates: logger.GetAllLogMessagesDates(false),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// system logs
|
||||||
|
return c.JSON(struct {
|
||||||
|
Logs []structs.LogMessageResponse
|
||||||
|
Dates []string
|
||||||
|
}{
|
||||||
|
Logs: logger.ReadLogs(date, true),
|
||||||
|
Dates: logger.GetAllLogMessagesDates(true),
|
||||||
|
})
|
||||||
|
}
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"janex/admin-dashboard-backend/modules/structs"
|
"janex/admin-dashboard-backend/modules/structs"
|
||||||
"janex/admin-dashboard-backend/modules/utils"
|
"janex/admin-dashboard-backend/modules/utils"
|
||||||
"janex/admin-dashboard-backend/routers/router/api/v1/jxscanner"
|
"janex/admin-dashboard-backend/routers/router/api/v1/jxscanner"
|
||||||
|
log "janex/admin-dashboard-backend/routers/router/api/v1/logger"
|
||||||
"janex/admin-dashboard-backend/routers/router/api/v1/user"
|
"janex/admin-dashboard-backend/routers/router/api/v1/user"
|
||||||
|
|
||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
|
@ -24,6 +25,9 @@ func SetupRoutes(app *fiber.App) {
|
||||||
s.Post("/scan", scannerSessionValidation, jxscanner.ScanResult)
|
s.Post("/scan", scannerSessionValidation, jxscanner.ScanResult)
|
||||||
s.Delete("/", scannerSessionValidation, jxscanner.DeleteScanner)
|
s.Delete("/", scannerSessionValidation, jxscanner.DeleteScanner)
|
||||||
|
|
||||||
|
l := v1.Group("/log")
|
||||||
|
l.Get("/", userSessionValidation, log.GetSystemLog)
|
||||||
|
|
||||||
app.Static("/", "./public")
|
app.Static("/", "./public")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -722,11 +722,13 @@ func AllUsersCreateNewUser(sessionId string, body map[string]interface{}) {
|
||||||
Username string
|
Username string
|
||||||
RoleId string
|
RoleId string
|
||||||
ConnectionStatus uint8
|
ConnectionStatus uint8
|
||||||
|
Deactivated bool
|
||||||
}{
|
}{
|
||||||
Id: newUser.Id,
|
Id: newUser.Id,
|
||||||
Username: username,
|
Username: username,
|
||||||
RoleId: roleId,
|
RoleId: roleId,
|
||||||
ConnectionStatus: utils.ConnectionStateOffline,
|
ConnectionStatus: utils.ConnectionStateOffline,
|
||||||
|
Deactivated: false,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"janex/admin-dashboard-backend/modules/cache"
|
"janex/admin-dashboard-backend/modules/cache"
|
||||||
"janex/admin-dashboard-backend/modules/database"
|
"janex/admin-dashboard-backend/modules/database"
|
||||||
"janex/admin-dashboard-backend/modules/grouptasks"
|
"janex/admin-dashboard-backend/modules/grouptasks"
|
||||||
|
"janex/admin-dashboard-backend/modules/logger"
|
||||||
"janex/admin-dashboard-backend/modules/structs"
|
"janex/admin-dashboard-backend/modules/structs"
|
||||||
"janex/admin-dashboard-backend/modules/utils"
|
"janex/admin-dashboard-backend/modules/utils"
|
||||||
"janex/admin-dashboard-backend/socketclients"
|
"janex/admin-dashboard-backend/socketclients"
|
||||||
|
@ -86,6 +87,18 @@ func RunHub() {
|
||||||
socketclients.UpdateConnectedUsers(userId)
|
socketclients.UpdateConnectedUsers(userId)
|
||||||
socketclients.UpdateUserSessionsForUser(userId, sessionId)
|
socketclients.UpdateUserSessionsForUser(userId, sessionId)
|
||||||
|
|
||||||
|
logger.AddSystemLog(structs.LogMessage{
|
||||||
|
Id: 0,
|
||||||
|
Type: utils.LogTypeInfo,
|
||||||
|
Messages: []structs.LogData{
|
||||||
|
{Type: "userId", Value: user.Id}}})
|
||||||
|
|
||||||
|
logger.AddGroupTasksLog(structs.LogMessage{
|
||||||
|
Id: 0,
|
||||||
|
Type: utils.LogTypeInfo,
|
||||||
|
Messages: []structs.LogData{
|
||||||
|
{Type: "userId", Value: user.Id}}})
|
||||||
|
|
||||||
case data := <-broadcast:
|
case data := <-broadcast:
|
||||||
var receivedMessage structs.ReceivedMessage
|
var receivedMessage structs.ReceivedMessage
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"id": 0,
|
||||||
|
"languages": [
|
||||||
|
{
|
||||||
|
"lang": "en",
|
||||||
|
"message": "%userId% has logged in"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
Loading…
Reference in New Issue