Merge branch 'develop' of github.com:Pterodactyl/wings into develop

# Conflicts:
#	api/api.go
#	api/core_routes.go
#	api/handlers_server.go
#	api/routes_server.go
#	config.example.json
#	utils/logging.go
This commit is contained in:
Jakob Schrettenbrunner
2017-10-01 20:59:32 +02:00
16 changed files with 94 additions and 162 deletions

View File

@@ -1,5 +0,0 @@
{
"authKeys": [
"existingkey"
]
}

1
api/_testdata/config.yml Normal file
View File

@@ -0,0 +1 @@
authKey: 'existingkey'

View File

@@ -11,23 +11,25 @@ import (
"github.com/Pterodactyl/wings/config"
)
// API is a grouping struct for the api
type API struct {
type InternalAPI struct {
router *gin.Engine
}
// NewAPI creates a new Api object
func NewAPI() API {
return API{}
func NewAPI() InternalAPI {
return InternalAPI{}
}
// Listen starts the api http server
func (api *API) Listen() {
// Configure the API and begin listening on the configured IP and Port.
func (api *InternalAPI) Listen() {
listener := fmt.Sprintf("%s:%d", viper.GetString(config.APIHost), viper.GetInt(config.APIPort))
if !viper.GetBool(config.Debug) {
gin.SetMode(gin.ReleaseMode)
}
api.router = gin.Default()
api.router.RedirectTrailingSlash = false
api.RegisterRoutes()
api.router.Use(func(c *gin.Context) {
c.Header("Access-Control-Allow-Origin", "*")
@@ -47,7 +49,3 @@ func (api *API) Listen() {
log.Info("Now listening on %s", listenString)
log.Fatal(http.ListenAndServe(listenString, nil))
}
func getRoot(c *gin.Context) {
c.String(http.StatusOK, "hello!")
}

View File

@@ -12,7 +12,7 @@ import (
"github.com/Pterodactyl/wings/control"
)
const configFile = "_testdata/config.json"
const configFile = "_testdata/config.yml"
func TestAuthHandler(t *testing.T) {
gin.SetMode(gin.ReleaseMode)

View File

@@ -12,8 +12,7 @@ import (
log "github.com/sirupsen/logrus"
)
// handleGetIndex handles GET /
func handleGetIndex(c *gin.Context) {
func GetIndex(c *gin.Context) {
auth := GetContextAuthManager(c)
if auth != nil && auth.HasPermission("c:info") {

View File

@@ -1,51 +0,0 @@
package api
import "github.com/gin-gonic/gin"
func handlePostFilesFolder(c *gin.Context) {
}
func handleGetDirectory(c *gin.Context) {
}
func handlePostFileCopy(c *gin.Context) {
}
func handlePostFileMove(c *gin.Context) {
}
func handlePostFileDelete(c *gin.Context) {
}
func handlePostFileCompress(c *gin.Context) {
}
func handlePostFileDecompress(c *gin.Context) {
}
func handleGetFileStat(c *gin.Context) {
}
func handleGetFile(c *gin.Context) {
}
func handlePostFile(c *gin.Context) {
}
func handleDeleteFile(c *gin.Context) {
}
func handleGetDownloadFile(c *gin.Context) {
}

View File

@@ -1,9 +1,49 @@
package api
func (api *API) registerRoutes() {
api.router.GET("/", AuthHandler(""), handleGetIndex)
api.router.PATCH("/config", AuthHandler("c:config"), handlePatchConfig)
func (api *InternalAPI) RegisterRoutes() {
// Register routes for v1 of the API. This API should be fully backwards compatable with
// the existing Nodejs Daemon API.
v1 := api.router.Group("/v1")
{
v1.GET("/", AuthHandler(""), GetIndex)
v1.PATCH("/config", AuthHandler("c:config"), PatchConfiguration)
api.registerServerRoutes()
api.registerServerFileRoutes()
v1.GET("/servers", AuthHandler("c:list"), handleGetServers)
v1.POST("/servers", AuthHandler("c:create"), handlePostServers)
v1ServerRoutes := v1.Group("/servers/:server")
{
v1ServerRoutes.GET("/", AuthHandler("s:get"), handleGetServer)
v1ServerRoutes.PATCH("/", AuthHandler("s:config"), handlePatchServer)
v1ServerRoutes.DELETE("/", AuthHandler("g:server:delete"), handleDeleteServer)
v1ServerRoutes.POST("/reinstall", AuthHandler("s:install-server"), handlePostServerReinstall)
v1ServerRoutes.POST("/rebuild", AuthHandler("g:server:rebuild"), handlePostServerRebuild)
v1ServerRoutes.POST("/password", AuthHandler(""), handlePostServerPassword)
v1ServerRoutes.POST("/power", AuthHandler("s:power"), handlePostServerPower)
v1ServerRoutes.POST("/command", AuthHandler("s:command"), handlePostServerCommand)
v1ServerRoutes.GET("/log", AuthHandler("s:console"), handleGetServerLog)
v1ServerRoutes.POST("/suspend", AuthHandler(""), handlePostServerSuspend)
v1ServerRoutes.POST("/unsuspend", AuthHandler(""), handlePostServerUnsuspend)
}
v1ServerFileRoutes := v1.Group("/servers/:server/files")
{
v1ServerFileRoutes.GET("/file/:file", AuthHandler("s:files:read"), handleGetFile)
v1ServerFileRoutes.GET("/stat/:file", AuthHandler("s:files:"), handleGetFileStat)
v1ServerFileRoutes.GET("/dir/:directory", AuthHandler("s:files:get"), handleGetDirectory)
v1ServerFileRoutes.POST("/dir/:directory", AuthHandler("s:files:create"), handlePostFilesFolder)
v1ServerFileRoutes.POST("/file/:file", AuthHandler("s:files:post"), handlePostFile)
v1ServerFileRoutes.POST("/copy/:file", AuthHandler("s:files:copy"), handlePostFileCopy)
v1ServerFileRoutes.POST("/move/:file", AuthHandler("s:files:move"), handlePostFileMove)
v1ServerFileRoutes.POST("/rename/:file", AuthHandler("s:files:move"), handlePostFileMove)
v1ServerFileRoutes.POST("/compress/:file", AuthHandler("s:files:compress"), handlePostFileCompress)
v1ServerFileRoutes.POST("/decompress/:file", AuthHandler("s:files:decompress"), handlePostFileDecompress)
v1ServerFileRoutes.DELETE("/file/:file", AuthHandler("s:files:delete"), handleDeleteFile)
v1ServerFileRoutes.GET("/download/:token", handleGetDownloadFile)
}
}
}

View File

@@ -1,20 +0,0 @@
package api
func (api *API) registerServerRoutes() {
api.router.GET("/servers", AuthHandler("c:list"), handleGetServers)
api.router.POST("/servers", AuthHandler("c:create"), handlePostServers)
api.router.GET("/servers/:server", AuthHandler("s:get"), handleGetServer)
api.router.PATCH("/servers/:server", AuthHandler("s:config"), handlePatchServer)
api.router.DELETE("/servers/:server", AuthHandler("g:server:delete"), handleDeleteServer)
api.router.POST("/servers/:server/reinstall", AuthHandler("s:install-server"), handlePostServerReinstall)
api.router.POST("/servers/:server/rebuild", AuthHandler("g:server:rebuild"), handlePostServerRebuild)
api.router.POST("/servers/:server/password", AuthHandler(""), handlePostServerPassword)
api.router.POST("/servers/:server/power", AuthHandler("s:power"), handlePostServerPower)
api.router.POST("/servers/:server/command", AuthHandler("s:command"), handlePostServerCommand)
api.router.GET("/servers/:server/log", AuthHandler("s:console"), handleGetServerLog)
api.router.POST("/servers/:server/suspend", AuthHandler(""), handlePostServerSuspend)
api.router.POST("/servers/:server/unsuspend", AuthHandler(""), handlePostServerUnsuspend)
}

View File

@@ -1,20 +0,0 @@
package api
func (api *API) registerServerFileRoutes() {
api.router.GET("/servers/:server/files/file/:file", AuthHandler("s:files:read"), handleGetFile)
api.router.GET("/servers/:server/files/stat/:file", AuthHandler("s:files:"), handleGetFileStat)
api.router.GET("/servers/:server/files/dir/:directory", AuthHandler("s:files:get"), handleGetDirectory)
api.router.POST("/servers/:server/files/dir/:directory", AuthHandler("s:files:create"), handlePostFilesFolder)
api.router.POST("/servers/:server/files/file/:file", AuthHandler("s:files:post"), handlePostFile)
api.router.POST("/servers/:server/files/copy/:file", AuthHandler("s:files:copy"), handlePostFileCopy)
api.router.POST("/servers/:server/files/move/:file", AuthHandler("s:files:move"), handlePostFileMove)
api.router.POST("/servers/:server/files/rename/:file", AuthHandler("s:files:move"), handlePostFileMove)
api.router.POST("/servers/:server/files/compress/:file", AuthHandler("s:files:compress"), handlePostFileCompress)
api.router.POST("/servers/:server/files/decompress/:file", AuthHandler("s:files:decompress"), handlePostFileDecompress)
api.router.DELETE("/servers/:server/files/file/:file", AuthHandler("s:files:delete"), handleDeleteFile)
api.router.GET("/servers/:server/files/download/:token", handleGetDownloadFile)
}