api_controller.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. // Copyright (c) [2022] [巴拉迪维 BaratSemet]
  2. // [ohUrlShortener] is licensed under Mulan PSL v2.
  3. // You can use this software according to the terms and conditions of the Mulan PSL v2.
  4. // You may obtain a copy of Mulan PSL v2 at:
  5. // http://license.coscl.org.cn/MulanPSL2
  6. // THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
  7. // See the Mulan PSL v2 for more details.
  8. package controller
  9. import (
  10. "fmt"
  11. "net/http"
  12. "ohurlshortener/core"
  13. "ohurlshortener/service"
  14. "ohurlshortener/utils"
  15. "strconv"
  16. "strings"
  17. "github.com/gin-gonic/gin"
  18. )
  19. // APINewAdmin
  20. //
  21. //Add new admin user
  22. func APINewAdmin(ctx *gin.Context) {
  23. account := ctx.PostForm("account")
  24. password := ctx.PostForm("password")
  25. if utils.EmptyString(account) || utils.EmptyString(password) {
  26. ctx.JSON(http.StatusBadRequest, core.ResultJsonBadRequest("用户名或密码不能为空"))
  27. return
  28. }
  29. if len(password) < 8 {
  30. ctx.JSON(http.StatusBadRequest, core.ResultJsonBadRequest("密码长度最少8位"))
  31. return
  32. }
  33. err := service.NewUser(account, password)
  34. if err != nil {
  35. ctx.JSON(http.StatusBadRequest, core.ResultJsonBadRequest(err.Error()))
  36. return
  37. }
  38. ctx.JSON(http.StatusOK, core.ResultJsonSuccess())
  39. }
  40. // APIAdminUpdate
  41. //
  42. //Update password of given admin user
  43. func APIAdminUpdate(ctx *gin.Context) {
  44. account := ctx.Param("account")
  45. password := ctx.PostForm("password")
  46. if utils.EmptyString(account) || utils.EmptyString(password) {
  47. ctx.JSON(http.StatusBadRequest, core.ResultJsonBadRequest("用户名或密码不能为空"))
  48. return
  49. }
  50. if len(password) < 8 {
  51. ctx.JSON(http.StatusBadRequest, core.ResultJsonBadRequest("密码长度最少8位"))
  52. return
  53. }
  54. err := service.UpdatePassword(strings.TrimSpace(account), password)
  55. if err != nil {
  56. ctx.JSON(http.StatusBadRequest, core.ResultJsonBadRequest("修改失败"))
  57. return
  58. }
  59. ctx.JSON(http.StatusOK, core.ResultJsonSuccess())
  60. }
  61. // APIGenShortUrl Generate new short url
  62. func APIGenShortUrl(ctx *gin.Context) {
  63. url := ctx.PostForm("dest_url")
  64. memo := ctx.PostForm("memo")
  65. if utils.EmptyString(strings.TrimSpace(url)) {
  66. ctx.JSON(http.StatusBadRequest, core.ResultJsonBadRequest("dest_url 不能为空"))
  67. return
  68. }
  69. res, err := service.GenerateShortUrl(strings.TrimSpace(url), strings.TrimSpace(memo))
  70. if err != nil {
  71. ctx.JSON(http.StatusBadRequest, core.ResultJsonBadRequest(err.Error()))
  72. return
  73. }
  74. json := map[string]string{
  75. "short_url": fmt.Sprintf("%s%s", utils.AppConfig.UrlPrefix, res),
  76. }
  77. ctx.JSON(http.StatusOK, core.ResultJsonSuccessWithData(json))
  78. }
  79. // APIUrlInfo Get Short Url Stat Info.
  80. func APIUrlInfo(ctx *gin.Context) {
  81. url := ctx.Param("url")
  82. if utils.EmptyString(strings.TrimSpace(url)) {
  83. ctx.JSON(http.StatusBadRequest, core.ResultJsonBadRequest("url 不能为空"))
  84. return
  85. }
  86. stat, err := service.GetShortUrlStats(strings.TrimSpace(url))
  87. if utils.EmptyString(strings.TrimSpace(url)) {
  88. ctx.JSON(http.StatusInternalServerError, core.ResultJsonError(err.Error()))
  89. return
  90. }
  91. ctx.JSON(http.StatusOK, core.ResultJsonSuccessWithData(stat))
  92. }
  93. // APIUpdateUrl Enable or Disable Short Url
  94. func APIUpdateUrl(ctx *gin.Context) {
  95. url := ctx.Param("url")
  96. enableStr := ctx.PostForm("enable")
  97. if utils.EmptyString(strings.TrimSpace(url)) {
  98. ctx.JSON(http.StatusBadRequest, core.ResultJsonBadRequest("url 不能为空"))
  99. return
  100. }
  101. enable, err := strconv.ParseBool(enableStr)
  102. if err != nil {
  103. ctx.JSON(http.StatusBadRequest, core.ResultJsonBadRequest("enable 参数值非法"))
  104. return
  105. }
  106. res, err := service.ChangeState(url, enable)
  107. if err != nil {
  108. ctx.JSON(http.StatusBadRequest, core.ResultJsonBadRequest(err.Error()))
  109. return
  110. }
  111. ctx.JSON(http.StatusOK, core.ResultJsonSuccessWithData(res))
  112. }
  113. func APIDeleteUrl(ctx *gin.Context) {
  114. url := ctx.Param("url")
  115. if utils.EmptyString(strings.TrimSpace(url)) {
  116. ctx.JSON(http.StatusBadRequest, core.ResultJsonBadRequest("url 不能为空"))
  117. return
  118. }
  119. err := service.DeleteUrlAndAccessLogs(url)
  120. if err != nil {
  121. ctx.JSON(http.StatusBadRequest, core.ResultJsonBadRequest(err.Error()))
  122. return
  123. }
  124. ctx.JSON(http.StatusOK, core.ResultJsonSuccess)
  125. }