From 208bdc03f370835334c90ffe3099c8d9a0598b5b Mon Sep 17 00:00:00 2001 From: <29165304+Dot-Rar@users.noreply.github.com> Date: Sun, 26 May 2019 02:47:51 +0100 Subject: [PATCH] Finish porting panel --- app/database/database.go | 1 - app/http/endpoints/manage/logs.go | 53 ++++++++++-- app/http/endpoints/manage/settings.go | 72 ++++++++++++---- app/http/endpoints/manage/viewlog.go | 84 +++++++++++++++++++ app/http/endpoints/root/callback.go | 36 ++++---- app/http/endpoints/root/index.go | 13 +-- app/http/server.go | 3 + app/http/template/template.go | 16 ++-- config/config.go | 44 +++++----- database/database.go | 7 +- database/table/archivechannel.go | 29 +++++++ database/table/channelcategory.go | 2 +- database/table/guilds.go | 3 +- database/table/permissions.go | 8 +- database/table/prefix.go | 6 +- database/table/ticketarchive.go | 20 +++-- database/table/ticketlimit.go | 2 +- database/table/welcomemessage.go | 4 +- public/templates/views/logs.mustache | 9 +- public/templates/views/settings.mustache | 16 ++++ utils/discord/auth.go | 64 +++++++------- utils/discord/endpoints.go | 39 +++++---- utils/discord/endpoints/guild/getGuild.go | 4 +- .../endpoints/guild/getGuildChannels.go | 4 +- utils/discord/endpoints/user/currentUser.go | 4 +- .../endpoints/user/currentUserGuilds.go | 4 +- utils/discord/objects/activity.go | 22 ++--- utils/discord/objects/asset.go | 4 +- utils/discord/objects/channel.go | 34 ++++---- utils/discord/objects/clientstatus.go | 4 +- utils/discord/objects/emoji.go | 12 +-- utils/discord/objects/guild.go | 70 ++++++++-------- utils/discord/objects/member.go | 10 +-- utils/discord/objects/overwrite.go | 6 +- utils/discord/objects/party.go | 2 +- utils/discord/objects/presence.go | 12 +-- utils/discord/objects/role.go | 12 +-- utils/discord/objects/secret.go | 4 +- utils/discord/objects/timestamp.go | 2 +- utils/discord/objects/user.go | 14 ++-- utils/discord/objects/voicestate.go | 16 ++-- utils/fileutils.go | 3 +- utils/sliceutils.go | 2 +- 43 files changed, 511 insertions(+), 265 deletions(-) delete mode 100644 app/database/database.go create mode 100644 app/http/endpoints/manage/viewlog.go create mode 100644 database/table/archivechannel.go diff --git a/app/database/database.go b/app/database/database.go deleted file mode 100644 index 636bab8..0000000 --- a/app/database/database.go +++ /dev/null @@ -1 +0,0 @@ -package database diff --git a/app/http/endpoints/manage/logs.go b/app/http/endpoints/manage/logs.go index cab671b..d70635d 100644 --- a/app/http/endpoints/manage/logs.go +++ b/app/http/endpoints/manage/logs.go @@ -20,21 +20,24 @@ func LogsHandler(ctx *gin.Context) { if utils.IsLoggedIn(store) { userIdStr := store.Get("userid").(string) - userId, err := utils.GetUserId(store); if err != nil { + userId, err := utils.GetUserId(store) + if err != nil { ctx.String(500, err.Error()) return } // Verify the guild exists guildIdStr := ctx.Param("id") - guildId, err := strconv.ParseInt(guildIdStr, 10, 64); if err != nil { + guildId, err := strconv.ParseInt(guildIdStr, 10, 64) + if err != nil { ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 404 Page return } pageStr := ctx.Param("page") page := 1 - i, err := strconv.Atoi(pageStr); if err == nil { + i, err := strconv.Atoi(pageStr) + if err == nil { if i > 0 { page = i } @@ -55,11 +58,51 @@ func LogsHandler(ctx *gin.Context) { return } + pageLimit := 30 + // Get logs + // Get user ID from URL + var filteredUserId int64 + if utils.IsInt(ctx.Query("userid")) { + filteredUserId, _ = strconv.ParseInt(ctx.Query("userid"), 10, 64) + } - utils.Respond(ctx, template.TemplateSettings.Render(map[string]interface{}{ - "name": store.Get("name").(string), + // Get ticket ID from URL + var ticketId int + if utils.IsInt(ctx.Query("ticketid")) { + ticketId, _ = strconv.Atoi(ctx.Query("ticketid")) + } + + // Get username from URL + username := ctx.Query("username") + + // Get logs from DB + logs := table.GetFilteredTicketArchives(guildId, filteredUserId, username, ticketId) + + // Select 30 logs + format them + var formattedLogs []map[string]interface{} + for i := (page - 1) * pageLimit; i < (page - 1) * pageLimit + pageLimit; i++ { + if i >= len(logs) { + break + } + + log := logs[i] + formattedLogs = append(formattedLogs, map[string]interface{}{ + "ticketid": log.TicketId, + "userid": log.User, + "username": log.Username, + "uuid": log.Uuid, + }) + } + + utils.Respond(ctx, template.TemplateLogs.Render(map[string]interface{}{ + "name": store.Get("name").(string), "guildId": guildIdStr, + "baseUrl": config.Conf.Server.BaseUrl, + "isPageOne": page == 1, + "previousPage": page - 1, + "nextPage": page + 1, + "logs": formattedLogs, })) } else { ctx.Redirect(302, "/login") diff --git a/app/http/endpoints/manage/settings.go b/app/http/endpoints/manage/settings.go index 53deccd..a6fa4b8 100644 --- a/app/http/endpoints/manage/settings.go +++ b/app/http/endpoints/manage/settings.go @@ -3,6 +3,7 @@ package manage import ( "encoding/base64" "encoding/json" + "fmt" "github.com/TicketsBot/GoPanel/app/http/template" "github.com/TicketsBot/GoPanel/config" "github.com/TicketsBot/GoPanel/database/table" @@ -24,14 +25,16 @@ func SettingsHandler(ctx *gin.Context) { if utils.IsLoggedIn(store) { userIdStr := store.Get("userid").(string) - userId, err := utils.GetUserId(store); if err != nil { + userId, err := utils.GetUserId(store) + if err != nil { ctx.String(500, err.Error()) return } // Verify the guild exists guildIdStr := ctx.Param("id") - guildId, err := strconv.ParseInt(guildIdStr, 10, 64); if err != nil { + guildId, err := strconv.ParseInt(guildIdStr, 10, 64) + if err != nil { ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 404 Page return } @@ -83,11 +86,8 @@ func SettingsHandler(ctx *gin.Context) { table.UpdateTicketLimit(guildId, limit) } - // Get a list of actual category IDs - categories := guild.GetCategories() - // /users/@me/guilds doesn't return channels, so we have to get them for the specific guild - if len(categories) == 0 { + if len(guild.Channels) == 0 { var channels []objects.Channel endpoint := guildendpoint.GetGuildChannels(int(guildId)) err = endpoint.Request(store, nil, nil, &channels) @@ -96,7 +96,6 @@ func SettingsHandler(ctx *gin.Context) { // Not in guild } else { guild.Channels = channels - categories = guild.GetCategories() // Update cache of categories now that we have them guilds := table.GetGuilds(userIdStr) @@ -117,7 +116,8 @@ func SettingsHandler(ctx *gin.Context) { // Insert updated guild guilds = utils.Insert(guilds, index, guild) - marshalled, err := json.Marshal(guilds); if err != nil { + marshalled, err := json.Marshal(guilds) + if err != nil { log.Error(err.Error()) } else { table.UpdateGuilds(userIdStr, base64.StdEncoding.EncodeToString(marshalled)) @@ -126,6 +126,10 @@ func SettingsHandler(ctx *gin.Context) { } } + // Get a list of actual category IDs + categories := guild.GetCategories() + + // Convert to category IDs var categoryIds []string for _, c := range categories { categoryIds = append(categoryIds, c.Id) @@ -149,19 +153,57 @@ func SettingsHandler(ctx *gin.Context) { var formattedCategories []map[string]interface{} for _, c := range categories { formattedCategories = append(formattedCategories, map[string]interface{}{ - "categoryid": c.Id, + "categoryid": c.Id, "categoryname": c.Name, - "active": c.Id == strconv.Itoa(int(category)), + "active": c.Id == strconv.Itoa(int(category)), }) } + // Archive channel + // Create a list of IDs + var channelIds []string + for _, c := range guild.Channels { + channelIds = append(channelIds, c.Id) + } + + // Update or get current archive channel if blank or invalid + var archiveChannel int64 + archiveChannelStr := ctx.Query("archivechannel") + + // Verify category ID is an int and set default category ID + if utils.IsInt(archiveChannelStr) { + archiveChannel, _ = strconv.ParseInt(archiveChannelStr, 10, 64) + } + + if archiveChannelStr == "" || !utils.IsInt(archiveChannelStr) || !utils.Contains(channelIds, archiveChannelStr) { + archiveChannel = table.GetArchiveChannel(guildId) + } else { + table.UpdateArchiveChannel(guildId, archiveChannel) + } + + // Format channels for templating + var formattedChannels []map[string]interface{} + for _, c := range guild.Channels { + if c.Id == strconv.Itoa(int(archiveChannel)) { + fmt.Println(c.Name) + } + if c.Type == 0 { + formattedChannels = append(formattedChannels, map[string]interface{}{ + "channelid": c.Id, + "channelname": c.Name, + "active": c.Id == strconv.Itoa(int(archiveChannel)), + }) + } + } + utils.Respond(ctx, template.TemplateSettings.Render(map[string]interface{}{ - "name": store.Get("name").(string), - "guildId": guildIdStr, - "prefix": prefix, + "name": store.Get("name").(string), + "guildId": guildIdStr, + "prefix": prefix, "welcomeMessage": welcomeMessage, - "ticketLimit": limit, - "categories": formattedCategories, + "ticketLimit": limit, + "categories": formattedCategories, + "channels": formattedChannels, })) } else { ctx.Redirect(302, "/login") diff --git a/app/http/endpoints/manage/viewlog.go b/app/http/endpoints/manage/viewlog.go new file mode 100644 index 0000000..a326243 --- /dev/null +++ b/app/http/endpoints/manage/viewlog.go @@ -0,0 +1,84 @@ +package manage + +import ( + "fmt" + "github.com/TicketsBot/GoPanel/config" + "github.com/TicketsBot/GoPanel/database/table" + "github.com/TicketsBot/GoPanel/utils" + "github.com/TicketsBot/GoPanel/utils/discord/objects" + "github.com/gin-gonic/contrib/sessions" + "github.com/gin-gonic/gin" + "io/ioutil" + "net/http" + "strconv" + "time" +) + +func LogViewHandler(ctx *gin.Context) { + store := sessions.Default(ctx) + if store == nil { + return + } + defer store.Save() + + if utils.IsLoggedIn(store) { + userIdStr := store.Get("userid").(string) + userId, err := utils.GetUserId(store) + if err != nil { + ctx.String(500, err.Error()) + return + } + + // Verify the guild exists + guildIdStr := ctx.Param("id") + guildId, err := strconv.ParseInt(guildIdStr, 10, 64) + if err != nil { + ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 404 Page + return + } + + // Get object for selected guild + var guild objects.Guild + for _, g := range table.GetGuilds(userIdStr) { + if g.Id == guildIdStr { + guild = g + break + } + } + + // Verify the user has permissions to be here + if !guild.Owner && !table.IsAdmin(guildId, userId) { + ctx.Redirect(302, config.Conf.Server.BaseUrl) // TODO: 403 Page + return + } + + uuid := ctx.Param("uuid") + cdnUrl := table.GetCdnUrl(guildId, uuid) + + if cdnUrl == "" { + ctx.Redirect(302, fmt.Sprintf("/manage/%s/logs/page/1", guild.Id)) + return + } else { + req, err := http.NewRequest("GET", cdnUrl, nil); if err != nil { + ctx.String(500, fmt.Sprintf("Failed to read log: %s", err.Error())) + return + } + + client := &http.Client{} + client.Timeout = 3 * time.Second + + res, err := client.Do(req); if err != nil { + ctx.String(500, fmt.Sprintf("Failed to read log: %s", err.Error())) + return + } + defer res.Body.Close() + + content, err := ioutil.ReadAll(res.Body); if err != nil { + ctx.String(500, fmt.Sprintf("Failed to read log: %s", err.Error())) + return + } + + ctx.String(200, string(content)) + } + } +} diff --git a/app/http/endpoints/root/callback.go b/app/http/endpoints/root/callback.go index 1e036e3..c6145f6 100644 --- a/app/http/endpoints/root/callback.go +++ b/app/http/endpoints/root/callback.go @@ -15,22 +15,22 @@ import ( "time" ) -type( +type ( TokenData struct { - ClientId string `qs:"client_id"` + ClientId string `qs:"client_id"` ClientSecret string `qs:"client_secret"` - GrantType string `qs:"grant_type"` - Code string `qs:"code"` - RedirectUri string `qs:"redirect_uri"` - Scope string `qs:"scope"` + GrantType string `qs:"grant_type"` + Code string `qs:"code"` + RedirectUri string `qs:"redirect_uri"` + Scope string `qs:"scope"` } TokenResponse struct { - AccessToken string `json:"access_token"` - TokenType string `json:"token_type"` - ExpiresIn int `json:"expires_in"` + AccessToken string `json:"access_token"` + TokenType string `json:"token_type"` + ExpiresIn int `json:"expires_in"` RefreshToken string `json:"refresh_token"` - Scope string `json:"scope"` + Scope string `json:"scope"` } ) @@ -52,17 +52,19 @@ func CallbackHandler(ctx *gin.Context) { return } - res, err := discord.AccessToken(code); if err != nil { + res, err := discord.AccessToken(code) + if err != nil { ctx.String(500, err.Error()) } store.Set("access_token", res.AccessToken) store.Set("refresh_token", res.RefreshToken) - store.Set("expiry", (time.Now().UnixNano() / int64(time.Second)) + int64(res.ExpiresIn)) + store.Set("expiry", (time.Now().UnixNano()/int64(time.Second))+int64(res.ExpiresIn)) // Get ID + name var currentUser objects.User - err = user.CurrentUser.Request(store, nil, nil, ¤tUser); if err != nil { + err = user.CurrentUser.Request(store, nil, nil, ¤tUser) + if err != nil { ctx.String(500, err.Error()) return } @@ -73,17 +75,19 @@ func CallbackHandler(ctx *gin.Context) { log.Error(err.Error()) } - ctx.Redirect(302,config.Conf.Server.BaseUrl) + ctx.Redirect(302, config.Conf.Server.BaseUrl) // Cache guilds because Discord takes like 2 whole seconds to return then go func() { var guilds []objects.Guild - err = user.CurrentUserGuilds.Request(store, nil, nil, &guilds); if err != nil { + err = user.CurrentUserGuilds.Request(store, nil, nil, &guilds) + if err != nil { log.Error(err.Error()) return } - marshalled, err := json.Marshal(guilds); if err != nil { + marshalled, err := json.Marshal(guilds) + if err != nil { log.Error(err.Error()) return } diff --git a/app/http/endpoints/root/index.go b/app/http/endpoints/root/index.go index 8f07b6b..5ef8808 100644 --- a/app/http/endpoints/root/index.go +++ b/app/http/endpoints/root/index.go @@ -20,7 +20,8 @@ func IndexHandler(ctx *gin.Context) { if utils.IsLoggedIn(store) { userIdStr := store.Get("userid").(string) - userId, err := utils.GetUserId(store); if err != nil { + userId, err := utils.GetUserId(store) + if err != nil { ctx.String(500, err.Error()) return } @@ -28,7 +29,8 @@ func IndexHandler(ctx *gin.Context) { adminGuilds := make([]objects.Guild, 0) adminGuildIds := table.GetAdminGuilds(userId) for _, guild := range table.GetGuilds(userIdStr) { - guildId, err := strconv.ParseInt(guild.Id, 10, 64); if err != nil { + guildId, err := strconv.ParseInt(guild.Id, 10, 64) + if err != nil { ctx.String(500, err.Error()) return } @@ -41,7 +43,7 @@ func IndexHandler(ctx *gin.Context) { var servers []map[string]string for _, server := range adminGuilds { element := map[string]string{ - "serverid": server.Id, + "serverid": server.Id, "servername": server.Name, } @@ -49,13 +51,12 @@ func IndexHandler(ctx *gin.Context) { } utils.Respond(ctx, template.TemplateIndex.Render(map[string]interface{}{ - "name": store.Get("name").(string), + "name": store.Get("name").(string), "baseurl": config.Conf.Server.BaseUrl, "servers": servers, - "empty": len(servers) == 0, + "empty": len(servers) == 0, })) } else { ctx.Redirect(302, "/login") } } - diff --git a/app/http/server.go b/app/http/server.go index c3564f0..cdcf49b 100644 --- a/app/http/server.go +++ b/app/http/server.go @@ -53,6 +53,9 @@ func StartServer() { // /manage/:id/logs/page/:page router.GET("/manage/:id/logs/page/:page", manage.LogsHandler) + // /manage/:id/logs/view/:uuid + router.GET("/manage/:id/logs/view/:uuid", manage.LogViewHandler) + if err := router.Run(config.Conf.Server.Host); err != nil { panic(err) } diff --git a/app/http/template/template.go b/app/http/template/template.go index 41364db..74eb450 100644 --- a/app/http/template/template.go +++ b/app/http/template/template.go @@ -11,10 +11,10 @@ type Layout struct { type Template struct { compiled *mustache.Template - Layout Layout + Layout Layout } -var( +var ( LayoutMain Layout TemplateIndex Template @@ -35,20 +35,21 @@ func LoadLayouts() { func LoadTemplates() { TemplateIndex = Template{ compiled: loadTemplate("index"), - Layout: LayoutMain, + Layout: LayoutMain, } TemplateLogs = Template{ compiled: loadTemplate("logs"), - Layout: LayoutMain, + Layout: LayoutMain, } TemplateSettings = Template{ compiled: loadTemplate("settings"), - Layout: LayoutMain, + Layout: LayoutMain, } } func loadLayout(name string) *mustache.Template { - tmpl, err := mustache.ParseFile(fmt.Sprintf("./public/templates/layouts/%s.mustache", name)); if err != nil { + tmpl, err := mustache.ParseFile(fmt.Sprintf("./public/templates/layouts/%s.mustache", name)) + if err != nil { panic(err) } @@ -56,7 +57,8 @@ func loadLayout(name string) *mustache.Template { } func loadTemplate(name string) *mustache.Template { - tmpl, err := mustache.ParseFile(fmt.Sprintf("./public/templates/views/%s.mustache", name)); if err != nil { + tmpl, err := mustache.ParseFile(fmt.Sprintf("./public/templates/views/%s.mustache", name)) + if err != nil { panic(err) } diff --git a/config/config.go b/config/config.go index 159474b..deb60fa 100644 --- a/config/config.go +++ b/config/config.go @@ -5,46 +5,46 @@ import ( "io/ioutil" ) -type( +type ( Config struct { - Server Server - Oauth Oauth + Server Server + Oauth Oauth MariaDB MariaDB - Bot Bot - Redis Redis + Bot Bot + Redis Redis } Server struct { - Host string - BaseUrl string - MainSite string - CsrfKey string + Host string + BaseUrl string + MainSite string + CsrfKey string Ratelimit Ratelimit - Session Session + Session Session } Ratelimit struct { Window int - Max int + Max int } Session struct { Threads int - Secret string + Secret string } Oauth struct { - Id int64 - Secret string + Id int64 + Secret string RedirectUri string } MariaDB struct { - Host string + Host string Username string Password string Database string - Threads int + Threads int } Bot struct { @@ -52,22 +52,24 @@ type( } Redis struct { - Host string - Port int + Host string + Port int Password string } ) -var( +var ( Conf Config ) func LoadConfig() { - raw, err := ioutil.ReadFile("config.toml"); if err != nil { + raw, err := ioutil.ReadFile("config.toml") + if err != nil { panic(err) } - _, err = toml.Decode(string(raw), &Conf); if err != nil { + _, err = toml.Decode(string(raw), &Conf) + if err != nil { panic(err) } } diff --git a/database/database.go b/database/database.go index 82de6d4..e3902e6 100644 --- a/database/database.go +++ b/database/database.go @@ -7,7 +7,7 @@ import ( "github.com/jinzhu/gorm" ) -var( +var ( Database gorm.DB ) @@ -18,9 +18,10 @@ func ConnectToDatabase() { config.Conf.MariaDB.Password, config.Conf.MariaDB.Host, config.Conf.MariaDB.Database, - ) + ) - db, err := gorm.Open("mysql", uri); if err != nil { + db, err := gorm.Open("mysql", uri) + if err != nil { panic(err) } diff --git a/database/table/archivechannel.go b/database/table/archivechannel.go new file mode 100644 index 0000000..b5a818a --- /dev/null +++ b/database/table/archivechannel.go @@ -0,0 +1,29 @@ +package table + +import ( + "fmt" + "github.com/TicketsBot/GoPanel/database" +) + +type ArchiveChannel struct { + Guild int64 `gorm:"column:GUILDID"` + Channel int64 `gorm:"column:CHANNELID"` +} + +func (ArchiveChannel) TableName() string { + return "archivechannel" +} + +func UpdateArchiveChannel(guildId int64, channelId int64) { + fmt.Println(channelId) + var channel ArchiveChannel + database.Database.Where(ArchiveChannel{Guild: guildId}).Assign(ArchiveChannel{Channel: channelId}).FirstOrCreate(&channel) +} + +func GetArchiveChannel(guildId int64) int64 { + var channel ArchiveChannel + database.Database.Where(&ArchiveChannel{Guild: guildId}).First(&channel) + + return channel.Channel +} + diff --git a/database/table/channelcategory.go b/database/table/channelcategory.go index 8152757..e3d13a2 100644 --- a/database/table/channelcategory.go +++ b/database/table/channelcategory.go @@ -5,7 +5,7 @@ import ( ) type ChannelCategory struct { - GuildId int64 `gorm:"column:GUILDID"` + GuildId int64 `gorm:"column:GUILDID"` Category int64 `gorm:"column:CATEGORYID"` } diff --git a/database/table/guilds.go b/database/table/guilds.go index f92692b..65e62e2 100644 --- a/database/table/guilds.go +++ b/database/table/guilds.go @@ -24,7 +24,8 @@ func UpdateGuilds(userId string, guilds string) { func GetGuilds(userId string) []objects.Guild { var cache GuildCache database.Database.Where(&GuildCache{UserId: userId}).First(&cache) - decoded, err := base64.StdEncoding.DecodeString(cache.Guilds); if err != nil { + decoded, err := base64.StdEncoding.DecodeString(cache.Guilds) + if err != nil { return make([]objects.Guild, 0) } diff --git a/database/table/permissions.go b/database/table/permissions.go index f93db90..f14ffab 100644 --- a/database/table/permissions.go +++ b/database/table/permissions.go @@ -3,10 +3,10 @@ package table import "github.com/TicketsBot/GoPanel/database" type PermissionNode struct { - GuildId int64 `gorm:"column:GUILDID"` - UserId int64 `gorm:"column:USERID"` - IsSupport bool `gorm:"column:ISSUPPORT"` - IsAdmin bool `gorm:"column:ISADMIN"` + GuildId int64 `gorm:"column:GUILDID"` + UserId int64 `gorm:"column:USERID"` + IsSupport bool `gorm:"column:ISSUPPORT"` + IsAdmin bool `gorm:"column:ISADMIN"` } func (PermissionNode) TableName() string { diff --git a/database/table/prefix.go b/database/table/prefix.go index e603b61..c7b9e81 100644 --- a/database/table/prefix.go +++ b/database/table/prefix.go @@ -5,8 +5,8 @@ import ( ) type Prefix struct { - GuildId int64 `gorm:"column:GUILDID"` - Prefix string `gorm:"column:PREFIX;type:varchar(8)"` + GuildId int64 `gorm:"column:GUILDID"` + Prefix string `gorm:"column:PREFIX;type:varchar(8)"` } func (Prefix) TableName() string { @@ -18,7 +18,7 @@ func UpdatePrefix(guildId int64, prefix string) { } func GetPrefix(guildId int64) string { - prefix := Prefix{Prefix:"t!"} + prefix := Prefix{Prefix: "t!"} database.Database.Where(&Prefix{GuildId: guildId}).First(&prefix) return prefix.Prefix diff --git a/database/table/ticketarchive.go b/database/table/ticketarchive.go index 5d7cd6b..785968b 100644 --- a/database/table/ticketarchive.go +++ b/database/table/ticketarchive.go @@ -5,12 +5,12 @@ import ( ) type TicketArchive struct { - Uuid string `gorm:"column:UUID;type:varchar(36)"` - Guild int64 `gorm:"column:GUILDID"` - User int64 `gorm:"column:USERID"` + Uuid string `gorm:"column:UUID;type:varchar(36)"` + Guild int64 `gorm:"column:GUILDID"` + User int64 `gorm:"column:USERID"` Username string `gorm:"column:USERNAME;type:varchar(32)"` - TicketId int `gorm:"column:TICKETID"` - CdnUrl string `gorm:"column:CDNURL;type:varchar(100)"` + TicketId int `gorm:"column:TICKETID"` + CdnUrl string `gorm:"column:CDNURL;type:varchar(100)"` } func (TicketArchive) TableName() string { @@ -19,7 +19,7 @@ func (TicketArchive) TableName() string { func GetTicketArchives(guildId int64) []TicketArchive { var archives []TicketArchive - database.Database.Where(&TicketArchive{Guild: guildId}).Find(&archives) + database.Database.Where(&TicketArchive{Guild: guildId}).Order("TICKETID desc").Find(&archives) return archives } @@ -38,7 +38,13 @@ func GetFilteredTicketArchives(guildId int64, userId int64, username string, tic query = query.Where(&TicketArchive{TicketId: ticketId}) } - query.Find(&archives) + query.Order("TICKETID desc").Find(&archives) return archives } + +func GetCdnUrl(guildId int64, uuid string) string { + var archive TicketArchive + database.Database.Where(&TicketArchive{Guild: guildId, Uuid: uuid}).First(&archive) + return archive.CdnUrl +} diff --git a/database/table/ticketlimit.go b/database/table/ticketlimit.go index 86cc5fe..f1af77e 100644 --- a/database/table/ticketlimit.go +++ b/database/table/ticketlimit.go @@ -6,7 +6,7 @@ import ( type TicketLimit struct { GuildId int64 `gorm:"column:GUILDID"` - Limit int `gorm:"column:TICKETLIMIT"` + Limit int `gorm:"column:TICKETLIMIT"` } func (TicketLimit) TableName() string { diff --git a/database/table/welcomemessage.go b/database/table/welcomemessage.go index f0ce57a..0cc771f 100644 --- a/database/table/welcomemessage.go +++ b/database/table/welcomemessage.go @@ -5,7 +5,7 @@ import ( ) type WelcomeMessage struct { - GuildId int64 `gorm:"column:GUILDID"` + GuildId int64 `gorm:"column:GUILDID"` Message string `gorm:"column:MESSAGE;type:text"` } @@ -18,7 +18,7 @@ func UpdateWelcomeMessage(guildId int64, message string) { } func GetWelcomeMessage(guildId int64) string { - message := WelcomeMessage{Message:"No message specified"} + message := WelcomeMessage{Message: "No message specified"} database.Database.Where(&WelcomeMessage{GuildId: guildId}).First(&message) return message.Message diff --git a/public/templates/views/logs.mustache b/public/templates/views/logs.mustache index 018c1c3..03d1776 100644 --- a/public/templates/views/logs.mustache +++ b/public/templates/views/logs.mustache @@ -60,12 +60,11 @@ {{#logs}} - {{{baseUrl}}} - {{TICKETID}} - {{USERNAME}} - {{USERID}} - {{UUID}} + {{ticketid}} + {{username}} + {{userid}} + {{uuid}} {{/logs}} diff --git a/public/templates/views/settings.mustache b/public/templates/views/settings.mustache index 65f1b09..d9be40c 100644 --- a/public/templates/views/settings.mustache +++ b/public/templates/views/settings.mustache @@ -64,6 +64,22 @@ +
+
+

Archive Channel

+ +
+
+