oauth.go 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. package admin
  2. import (
  3. "Gwen/global"
  4. "Gwen/http/request/admin"
  5. adminReq "Gwen/http/request/admin"
  6. "Gwen/http/response"
  7. "Gwen/service"
  8. "github.com/gin-gonic/gin"
  9. "strconv"
  10. )
  11. type Oauth struct {
  12. }
  13. // Info
  14. func (o *Oauth) Info(c *gin.Context) {
  15. code := c.Query("code")
  16. if code == "" {
  17. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError"))
  18. return
  19. }
  20. v := service.AllService.OauthService.GetOauthCache(code)
  21. if v == nil {
  22. response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
  23. return
  24. }
  25. response.Success(c, v)
  26. }
  27. func (o *Oauth) ToBind(c *gin.Context) {
  28. f := &adminReq.BindOauthForm{}
  29. err := c.ShouldBindJSON(f)
  30. if err != nil {
  31. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
  32. return
  33. }
  34. u := service.AllService.UserService.CurUser(c)
  35. utr := service.AllService.UserService.UserThirdInfo(u.Id, f.Op)
  36. if utr.Id > 0 {
  37. response.Fail(c, 101, response.TranslateMsg(c, "OauthHasBindOtherUser"))
  38. return
  39. }
  40. err, code, url := service.AllService.OauthService.BeginAuth(f.Op)
  41. if err != nil {
  42. response.Error(c, response.TranslateMsg(c, err.Error()))
  43. return
  44. }
  45. service.AllService.OauthService.SetOauthCache(code, &service.OauthCacheItem{
  46. Action: service.OauthActionTypeBind,
  47. Op: f.Op,
  48. UserId: u.Id,
  49. }, 5*60)
  50. response.Success(c, gin.H{
  51. "code": code,
  52. "url": url,
  53. })
  54. }
  55. // Confirm 确认授权登录
  56. func (o *Oauth) Confirm(c *gin.Context) {
  57. j := &adminReq.OauthConfirmForm{}
  58. err := c.ShouldBindJSON(j)
  59. if err != nil {
  60. response.Fail(c, 101, "参数错误"+err.Error())
  61. return
  62. }
  63. if j.Code == "" {
  64. response.Fail(c, 101, "参数错误: code 不存在")
  65. return
  66. }
  67. v := service.AllService.OauthService.GetOauthCache(j.Code)
  68. if v == nil {
  69. response.Fail(c, 101, "授权已过期")
  70. return
  71. }
  72. u := service.AllService.UserService.CurUser(c)
  73. v.UserId = u.Id
  74. service.AllService.OauthService.SetOauthCache(j.Code, v, 0)
  75. response.Success(c, v)
  76. }
  77. func (o *Oauth) BindConfirm(c *gin.Context) {
  78. j := &adminReq.OauthConfirmForm{}
  79. err := c.ShouldBindJSON(j)
  80. if err != nil {
  81. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
  82. return
  83. }
  84. if j.Code == "" {
  85. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError"))
  86. return
  87. }
  88. oauthService := service.AllService.OauthService
  89. oauthCache := oauthService.GetOauthCache(j.Code)
  90. if oauthCache == nil {
  91. response.Fail(c, 101, response.TranslateMsg(c, "OauthExpired"))
  92. return
  93. }
  94. oauthUser := oauthCache.ToOauthUser()
  95. user := service.AllService.UserService.CurUser(c)
  96. err = oauthService.BindOauthUser(user.Id, oauthUser, oauthCache.Op)
  97. if err != nil {
  98. response.Fail(c, 101, response.TranslateMsg(c, "BindFail"))
  99. return
  100. }
  101. oauthCache.UserId = user.Id
  102. oauthService.SetOauthCache(j.Code, oauthCache, 0)
  103. response.Success(c, oauthCache)
  104. }
  105. func (o *Oauth) Unbind(c *gin.Context) {
  106. f := &adminReq.UnBindOauthForm{}
  107. err := c.ShouldBindJSON(f)
  108. if err != nil {
  109. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
  110. return
  111. }
  112. u := service.AllService.UserService.CurUser(c)
  113. utr := service.AllService.UserService.UserThirdInfo(u.Id, f.Op)
  114. if utr.Id == 0 {
  115. response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
  116. return
  117. }
  118. err = service.AllService.OauthService.UnBindOauthUser(u.Id, f.Op)
  119. if err != nil {
  120. response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
  121. return
  122. }
  123. response.Success(c, nil)
  124. }
  125. // Detail Oauth
  126. // @Tags Oauth
  127. // @Summary Oauth详情
  128. // @Description Oauth详情
  129. // @Accept json
  130. // @Produce json
  131. // @Param id path int true "ID"
  132. // @Success 200 {object} response.Response{data=model.Oauth}
  133. // @Failure 500 {object} response.Response
  134. // @Router /admin/oauth/detail/{id} [get]
  135. // @Security token
  136. func (o *Oauth) Detail(c *gin.Context) {
  137. id := c.Param("id")
  138. iid, _ := strconv.Atoi(id)
  139. u := service.AllService.OauthService.InfoById(uint(iid))
  140. if u.Id > 0 {
  141. response.Success(c, u)
  142. return
  143. }
  144. response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
  145. return
  146. }
  147. // Create 创建Oauth
  148. // @Tags Oauth
  149. // @Summary 创建Oauth
  150. // @Description 创建Oauth
  151. // @Accept json
  152. // @Produce json
  153. // @Param body body admin.OauthForm true "Oauth信息"
  154. // @Success 200 {object} response.Response{data=model.Oauth}
  155. // @Failure 500 {object} response.Response
  156. // @Router /admin/oauth/create [post]
  157. // @Security token
  158. func (o *Oauth) Create(c *gin.Context) {
  159. f := &admin.OauthForm{}
  160. if err := c.ShouldBindJSON(f); err != nil {
  161. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
  162. return
  163. }
  164. errList := global.Validator.ValidStruct(c, f)
  165. if len(errList) > 0 {
  166. response.Fail(c, 101, errList[0])
  167. return
  168. }
  169. u := f.ToOauth()
  170. err := u.FormatOauthInfo()
  171. if err != nil {
  172. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
  173. return
  174. }
  175. ex := service.AllService.OauthService.InfoByOp(u.Op)
  176. if ex.Id > 0 {
  177. response.Fail(c, 101, response.TranslateMsg(c, "ItemExists"))
  178. return
  179. }
  180. err = service.AllService.OauthService.Create(u)
  181. if err != nil {
  182. response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
  183. return
  184. }
  185. response.Success(c, nil)
  186. }
  187. // List 列表
  188. // @Tags Oauth
  189. // @Summary Oauth列表
  190. // @Description Oauth列表
  191. // @Accept json
  192. // @Produce json
  193. // @Param page query int false "页码"
  194. // @Param page_size query int false "页大小"
  195. // @Success 200 {object} response.Response{data=model.OauthList}
  196. // @Failure 500 {object} response.Response
  197. // @Router /admin/oauth/list [get]
  198. // @Security token
  199. func (o *Oauth) List(c *gin.Context) {
  200. query := &admin.PageQuery{}
  201. if err := c.ShouldBindQuery(query); err != nil {
  202. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
  203. return
  204. }
  205. res := service.AllService.OauthService.List(query.Page, query.PageSize, nil)
  206. response.Success(c, res)
  207. }
  208. // Update 编辑
  209. // @Tags Oauth
  210. // @Summary Oauth编辑
  211. // @Description Oauth编辑
  212. // @Accept json
  213. // @Produce json
  214. // @Param body body admin.OauthForm true "Oauth信息"
  215. // @Success 200 {object} response.Response{data=model.OauthList}
  216. // @Failure 500 {object} response.Response
  217. // @Router /admin/oauth/update [post]
  218. // @Security token
  219. func (o *Oauth) Update(c *gin.Context) {
  220. f := &admin.OauthForm{}
  221. if err := c.ShouldBindJSON(f); err != nil {
  222. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
  223. return
  224. }
  225. if f.Id == 0 {
  226. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError"))
  227. return
  228. }
  229. errList := global.Validator.ValidStruct(c, f)
  230. if len(errList) > 0 {
  231. response.Fail(c, 101, errList[0])
  232. return
  233. }
  234. u := f.ToOauth()
  235. err := service.AllService.OauthService.Update(u)
  236. if err != nil {
  237. response.Fail(c, 101, response.TranslateMsg(c, "OperationFailed")+err.Error())
  238. return
  239. }
  240. response.Success(c, nil)
  241. }
  242. // Delete 删除
  243. // @Tags Oauth
  244. // @Summary Oauth删除
  245. // @Description Oauth删除
  246. // @Accept json
  247. // @Produce json
  248. // @Param body body admin.OauthForm true "Oauth信息"
  249. // @Success 200 {object} response.Response
  250. // @Failure 500 {object} response.Response
  251. // @Router /admin/oauth/delete [post]
  252. // @Security token
  253. func (o *Oauth) Delete(c *gin.Context) {
  254. f := &admin.OauthForm{}
  255. if err := c.ShouldBindJSON(f); err != nil {
  256. response.Fail(c, 101, response.TranslateMsg(c, "ParamsError")+err.Error())
  257. return
  258. }
  259. id := f.Id
  260. errList := global.Validator.ValidVar(c, id, "required,gt=0")
  261. if len(errList) > 0 {
  262. response.Fail(c, 101, errList[0])
  263. return
  264. }
  265. u := service.AllService.OauthService.InfoById(f.Id)
  266. if u.Id > 0 {
  267. err := service.AllService.OauthService.Delete(u)
  268. if err == nil {
  269. response.Success(c, nil)
  270. return
  271. }
  272. response.Fail(c, 101, err.Error())
  273. return
  274. }
  275. response.Fail(c, 101, response.TranslateMsg(c, "ItemNotFound"))
  276. }