diff --git a/cmd/api/server.go b/cmd/api/server.go index c67c74d..535c990 100644 --- a/cmd/api/server.go +++ b/cmd/api/server.go @@ -289,6 +289,7 @@ func initializeRoutes(engine *gin.Engine) { // Applications engine.GET("/v2/developers/applications", middleware.RequireAuth, handlers.CreateHandler(handlers.GetUserApplications)) engine.POST("/v2/developers/applications", middleware.RequireAuth, handlers.CreateHandler(handlers.CreateNewApplication)) + engine.GET("/v2/developers/applications/client/:client_id", middleware.RequireAuth, handlers.CreateHandler(handlers.GetApplicationByClientId)) engine.GET("/v2/developers/applications/:id", middleware.RequireAuth, handlers.CreateHandler(handlers.GetUserApplication)) engine.POST("/v2/developers/applications/:id", middleware.RequireAuth, handlers.CreateHandler(handlers.UpdateApplication)) engine.DELETE("/v2/developers/applications/:id", middleware.RequireAuth, handlers.CreateHandler(handlers.DeleteUserApplication)) diff --git a/db/applications.go b/db/applications.go index 974c70e..4b0154a 100644 --- a/db/applications.go +++ b/db/applications.go @@ -62,6 +62,21 @@ func GetApplicationById(id int) (*Application, error) { return application, nil } +// GetActiveApplicationByClientId retrieves an active application by client id. +func GetActiveApplicationByClientId(clientId string) (*Application, error) { + var application *Application + + result := SQL. + Where("client_id = ? AND active = 1", clientId). + First(&application) + + if result.Error != nil { + return nil, result.Error + } + + return application, nil +} + // GetActiveApplicationByClientSecret Retrieves an active application by client secret func GetActiveApplicationByClientSecret(secret string) (*Application, error) { var application *Application diff --git a/handlers/applications.go b/handlers/applications.go index 0ca570f..13cbe4a 100644 --- a/handlers/applications.go +++ b/handlers/applications.go @@ -2,6 +2,7 @@ package handlers import ( "github.com/Quaver/api2/db" + "github.com/Quaver/api2/enums" "github.com/Quaver/api2/stringutil" "github.com/gin-gonic/gin" "gorm.io/gorm" @@ -55,6 +56,33 @@ func GetUserApplication(c *gin.Context) *APIError { return nil } +// GetApplicationByClientId returns an active application, including its client secret. +// Endpoint: GET /v2/developers/applications/client/:client_id +func GetApplicationByClientId(c *gin.Context) *APIError { + user := getAuthedUser(c) + + if user == nil { + return nil + } + + if !enums.HasPrivilege(user.Privileges, enums.PrivilegeManageBuilds) { + return APIErrorForbidden("You do not have permission to access this route.") + } + + application, err := db.GetActiveApplicationByClientId(c.Param("client_id")) + + if err != nil && err != gorm.ErrRecordNotFound { + return APIErrorServerError("Error retrieving application from db", err) + } + + if application == nil { + return APIErrorNotFound("Application") + } + + c.JSON(http.StatusOK, gin.H{"application": application}) + return nil +} + // CreateNewApplication Creates a new application // Endpoint: POST /v2/developers/applications func CreateNewApplication(c *gin.Context) *APIError {