/api/v1/server/server.go

https://github.com/vx3r/wg-gen-web · Go · 94 lines · 79 code · 12 blank · 3 comment · 10 complexity · f83bbe5f3666f48be7039c9e64db9711 MD5 · raw file

  1. package server
  2. import (
  3. "github.com/gin-gonic/gin"
  4. log "github.com/sirupsen/logrus"
  5. "gitlab.127-0-0-1.fr/vx3r/wg-gen-web/auth"
  6. "gitlab.127-0-0-1.fr/vx3r/wg-gen-web/core"
  7. "gitlab.127-0-0-1.fr/vx3r/wg-gen-web/model"
  8. "gitlab.127-0-0-1.fr/vx3r/wg-gen-web/version"
  9. "golang.org/x/oauth2"
  10. "net/http"
  11. )
  12. // ApplyRoutes applies router to gin Router
  13. func ApplyRoutes(r *gin.RouterGroup) {
  14. g := r.Group("/server")
  15. {
  16. g.GET("", readServer)
  17. g.PATCH("", updateServer)
  18. g.GET("/config", configServer)
  19. g.GET("/version", versionStr)
  20. }
  21. }
  22. func readServer(c *gin.Context) {
  23. client, err := core.ReadServer()
  24. if err != nil {
  25. log.WithFields(log.Fields{
  26. "err": err,
  27. }).Error("failed to read client")
  28. c.AbortWithStatus(http.StatusInternalServerError)
  29. return
  30. }
  31. c.JSON(http.StatusOK, client)
  32. }
  33. func updateServer(c *gin.Context) {
  34. var data model.Server
  35. if err := c.ShouldBindJSON(&data); err != nil {
  36. log.WithFields(log.Fields{
  37. "err": err,
  38. }).Error("failed to bind")
  39. c.AbortWithStatus(http.StatusUnprocessableEntity)
  40. return
  41. }
  42. // get update user from token and add to server infos
  43. oauth2Token := c.MustGet("oauth2Token").(*oauth2.Token)
  44. oauth2Client := c.MustGet("oauth2Client").(auth.Auth)
  45. user, err := oauth2Client.UserInfo(oauth2Token)
  46. if err != nil {
  47. log.WithFields(log.Fields{
  48. "oauth2Token": oauth2Token,
  49. "err": err,
  50. }).Error("failed to get user with oauth token")
  51. c.AbortWithStatus(http.StatusInternalServerError)
  52. return
  53. }
  54. data.UpdatedBy = user.Name
  55. server, err := core.UpdateServer(&data)
  56. if err != nil {
  57. log.WithFields(log.Fields{
  58. "err": err,
  59. }).Error("failed to update client")
  60. c.AbortWithStatus(http.StatusInternalServerError)
  61. return
  62. }
  63. c.JSON(http.StatusOK, server)
  64. }
  65. func configServer(c *gin.Context) {
  66. configData, err := core.ReadWgConfigFile()
  67. if err != nil {
  68. log.WithFields(log.Fields{
  69. "err": err,
  70. }).Error("failed to read wg config file")
  71. c.AbortWithStatus(http.StatusInternalServerError)
  72. return
  73. }
  74. // return config as txt file
  75. c.Header("Content-Disposition", "attachment; filename=wg0.conf")
  76. c.Data(http.StatusOK, "application/config", configData)
  77. }
  78. func versionStr(c *gin.Context) {
  79. c.JSON(http.StatusOK, gin.H{
  80. "version": version.Version,
  81. })
  82. }