|
|
@@ -10,6 +10,7 @@ import (
|
|
10
|
10
|
"github.com/gin-gonic/gin"
|
|
11
|
11
|
"net/http"
|
|
12
|
12
|
"strconv"
|
|
|
13
|
+ "strings"
|
|
13
|
14
|
)
|
|
14
|
15
|
|
|
15
|
16
|
type Oauth struct {
|
|
|
@@ -161,9 +162,8 @@ func (o *Oauth) OauthCallback(c *gin.Context) {
|
|
161
|
162
|
}
|
|
162
|
163
|
c.String(http.StatusOK, "绑定成功")
|
|
163
|
164
|
return
|
|
164
|
|
- }
|
|
165
|
|
- //登录
|
|
166
|
|
- if ac == service.OauthActionTypeLogin {
|
|
|
165
|
+ } else if ac == service.OauthActionTypeLogin {
|
|
|
166
|
+ //登录
|
|
167
|
167
|
if v.UserId != 0 {
|
|
168
|
168
|
c.String(http.StatusInternalServerError, "授权已经成功")
|
|
169
|
169
|
return
|
|
|
@@ -181,7 +181,7 @@ func (o *Oauth) OauthCallback(c *gin.Context) {
|
|
181
|
181
|
}
|
|
182
|
182
|
|
|
183
|
183
|
//自动注册
|
|
184
|
|
- u = service.AllService.UserService.RegisterByGithub(userData.Login, int64(userData.Id))
|
|
|
184
|
+ u = service.AllService.UserService.RegisterByGithub(userData.Login, strconv.Itoa(userData.Id))
|
|
185
|
185
|
if u.Id == 0 {
|
|
186
|
186
|
c.String(http.StatusInternalServerError, "注册失败")
|
|
187
|
187
|
return
|
|
|
@@ -193,19 +193,76 @@ func (o *Oauth) OauthCallback(c *gin.Context) {
|
|
193
|
193
|
c.String(http.StatusOK, "授权成功")
|
|
194
|
194
|
return
|
|
195
|
195
|
}
|
|
196
|
|
-
|
|
197
|
196
|
//返回js
|
|
198
|
197
|
c.Header("Content-Type", "text/html; charset=utf-8")
|
|
199
|
198
|
c.String(http.StatusOK, "授权错误")
|
|
200
|
|
- //up := &apiResp.UserPayload{}
|
|
201
|
|
- //c.JSON(http.StatusOK, apiResp.LoginRes{
|
|
202
|
|
- // AccessToken: ut.Token,
|
|
203
|
|
- // Type: "access_token",
|
|
204
|
|
- // User: *up.FromUser(u),
|
|
205
|
|
- //})
|
|
206
|
199
|
|
|
207
|
200
|
}
|
|
208
|
201
|
|
|
|
202
|
+ if ty == model.OauthTypeGoogle {
|
|
|
203
|
+ code := c.Query("code")
|
|
|
204
|
+ err, userData := service.AllService.OauthService.GoogleCallback(code)
|
|
|
205
|
+ if err != nil {
|
|
|
206
|
+ c.String(http.StatusInternalServerError, "授权失败:"+err.Error())
|
|
|
207
|
+ return
|
|
|
208
|
+ }
|
|
|
209
|
+ //将空格替换成_
|
|
|
210
|
+ googleName := strings.Replace(userData.Name, " ", "_", -1)
|
|
|
211
|
+ if ac == service.OauthActionTypeBind {
|
|
|
212
|
+ //fmt.Println("bind", ty, userData)
|
|
|
213
|
+ utr := service.AllService.OauthService.UserThirdInfo(ty, userData.Email)
|
|
|
214
|
+ if utr.UserId > 0 {
|
|
|
215
|
+ c.String(http.StatusInternalServerError, "已经绑定其他账号")
|
|
|
216
|
+ return
|
|
|
217
|
+ }
|
|
|
218
|
+ //绑定
|
|
|
219
|
+ u := service.AllService.UserService.InfoById(v.UserId)
|
|
|
220
|
+ if u == nil {
|
|
|
221
|
+ c.String(http.StatusInternalServerError, "用户不存在")
|
|
|
222
|
+ return
|
|
|
223
|
+ }
|
|
|
224
|
+ //绑定
|
|
|
225
|
+ err = service.AllService.OauthService.BindGoogleUser(userData.Email, googleName, v.UserId)
|
|
|
226
|
+ if err != nil {
|
|
|
227
|
+ c.String(http.StatusInternalServerError, "绑定失败")
|
|
|
228
|
+ return
|
|
|
229
|
+ }
|
|
|
230
|
+ c.String(http.StatusOK, "绑定成功")
|
|
|
231
|
+ return
|
|
|
232
|
+ } else if ac == service.OauthActionTypeLogin {
|
|
|
233
|
+ if v.UserId != 0 {
|
|
|
234
|
+ c.String(http.StatusInternalServerError, "授权已经成功")
|
|
|
235
|
+ return
|
|
|
236
|
+ }
|
|
|
237
|
+ u := service.AllService.UserService.InfoByGoogleEmail(userData.Email)
|
|
|
238
|
+ if u == nil {
|
|
|
239
|
+ oa := service.AllService.OauthService.InfoByOp(ty)
|
|
|
240
|
+ if !*oa.AutoRegister {
|
|
|
241
|
+ //c.String(http.StatusInternalServerError, "还未绑定用户,请先绑定")
|
|
|
242
|
+
|
|
|
243
|
+ v.ThirdName = googleName
|
|
|
244
|
+ v.ThirdOpenId = userData.Email
|
|
|
245
|
+ url := global.Config.Rustdesk.ApiServer + "/_admin/#/oauth/bind/" + cacheKey
|
|
|
246
|
+ c.Redirect(http.StatusFound, url)
|
|
|
247
|
+ return
|
|
|
248
|
+ }
|
|
|
249
|
+
|
|
|
250
|
+ //自动注册
|
|
|
251
|
+ u = service.AllService.UserService.RegisterByGoogle(googleName, userData.Email)
|
|
|
252
|
+ if u.Id == 0 {
|
|
|
253
|
+ c.String(http.StatusInternalServerError, "注册失败")
|
|
|
254
|
+ return
|
|
|
255
|
+ }
|
|
|
256
|
+ }
|
|
|
257
|
+
|
|
|
258
|
+ v.UserId = u.Id
|
|
|
259
|
+ service.AllService.OauthService.SetOauthCache(cacheKey, v, 0)
|
|
|
260
|
+ c.String(http.StatusOK, "授权成功")
|
|
|
261
|
+ return
|
|
|
262
|
+ }
|
|
|
263
|
+ }
|
|
|
264
|
+ c.String(http.StatusInternalServerError, "授权配置错误,请联系管理员")
|
|
|
265
|
+
|
|
209
|
266
|
}
|
|
210
|
267
|
|
|
211
|
268
|
// WebOauthLogin
|