2022-07-21 22:52:58 +01:00

80 lines
2.0 KiB
Go

package api
import (
dbclient "github.com/TicketsBot/GoPanel/database"
"github.com/TicketsBot/GoPanel/utils"
"github.com/gin-gonic/gin"
"strconv"
"strings"
)
const pageLimit = 20
const builtInCount = 1
type integrationWithMetadata struct {
integrationResponse
GuildCount int `json:"guild_count"`
Added bool `json:"added"`
}
func ListIntegrationsHandler(ctx *gin.Context) {
userId := ctx.Keys["userid"].(uint64)
guildId := ctx.Keys["guildid"].(uint64)
page, err := strconv.Atoi(ctx.Query("page"))
if err != nil || page <= 1 {
page = 1
}
page -= 1
limit := pageLimit
if page == 0 {
limit -= builtInCount
}
availableIntegrations, err := dbclient.Client.CustomIntegrationGuilds.GetAvailableIntegrationsWithActive(guildId, userId, limit, page*pageLimit)
if err != nil {
ctx.JSON(500, utils.ErrorJson(err))
return
}
integrations := make([]integrationWithMetadata, len(availableIntegrations))
for i, integration := range availableIntegrations {
var proxyToken *string
if integration.ImageUrl != nil {
tmp, err := utils.GenerateImageProxyToken(*integration.ImageUrl)
if err != nil {
ctx.JSON(500, utils.ErrorJson(err))
return
}
proxyToken = &tmp
}
integrations[i] = integrationWithMetadata{
integrationResponse: integrationResponse{
Id: integration.Id,
OwnerId: integration.OwnerId,
WebhookHost: utils.SecondLevelDomain(utils.GetUrlHost(strings.ReplaceAll(integration.WebhookUrl, "%", ""))),
Name: integration.Name,
Description: integration.Description,
ImageUrl: integration.ImageUrl,
ProxyToken: proxyToken,
PrivacyPolicyUrl: integration.PrivacyPolicyUrl,
Public: integration.Public,
Approved: integration.Approved,
},
GuildCount: integration.GuildCount,
Added: integration.Active,
}
}
// Don't serve null
if integrations == nil {
integrations = make([]integrationWithMetadata, 0)
}
ctx.JSON(200, integrations)
}