|
@@ -1,20 +1,23 @@ |
|
|
package cloudbrain |
|
|
package cloudbrain |
|
|
|
|
|
|
|
|
import ( |
|
|
import ( |
|
|
|
|
|
"bytes" |
|
|
|
|
|
"code.gitea.io/gitea/modules/log" |
|
|
|
|
|
"code.gitea.io/gitea/modules/setting" |
|
|
"encoding/json" |
|
|
"encoding/json" |
|
|
"errors" |
|
|
"errors" |
|
|
"io/ioutil" |
|
|
"io/ioutil" |
|
|
"net/http" |
|
|
"net/http" |
|
|
"strings" |
|
|
"strings" |
|
|
|
|
|
|
|
|
"code.gitea.io/gitea/modules/log" |
|
|
|
|
|
"code.gitea.io/gitea/modules/setting" |
|
|
|
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
const ( |
|
|
const ( |
|
|
GrantTypePassword = "password" |
|
|
|
|
|
ScopeRead = "read" |
|
|
|
|
|
TokenUrl = "/oauth/token" |
|
|
|
|
|
|
|
|
UrlToken = "/rest-server/api/v1/token/" |
|
|
|
|
|
UrlGetUserInfo = "/rest-server/api/v1/user/" |
|
|
|
|
|
|
|
|
|
|
|
TokenTypeBear = "Bearer " |
|
|
|
|
|
|
|
|
|
|
|
SuccessCode = "S000" |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
type RespAuth struct { |
|
|
type RespAuth struct { |
|
@@ -26,18 +29,43 @@ type RespAuth struct { |
|
|
ErrorDescription string `json:"error_description"` |
|
|
ErrorDescription string `json:"error_description"` |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
type RespToken struct { |
|
|
|
|
|
Code string `json:"code"` |
|
|
|
|
|
Message string `json:"message"` |
|
|
|
|
|
Payload PayloadToken `json:"payload"` |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
type PayloadToken struct { |
|
|
|
|
|
Username string `json:"username"` |
|
|
|
|
|
Token string `json:"token"` |
|
|
|
|
|
IsAdmin bool `json:"admin"` |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
type RespUserInfo struct { |
|
|
|
|
|
Code string `json:"code"` |
|
|
|
|
|
Message string `json:"message"` |
|
|
|
|
|
Payload PayloadUserInfo `json:"payload"` |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
type PayloadUserInfo struct { |
|
|
|
|
|
UserInfo StUserInfo `json:"userInfo"` |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
type StUserInfo struct { |
|
|
|
|
|
Email string `json:"email"` |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
type CloudBrainUser struct { |
|
|
type CloudBrainUser struct { |
|
|
UserName string `json:"username"` |
|
|
UserName string `json:"username"` |
|
|
Email string `json:"email"` |
|
|
Email string `json:"email"` |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
func UserValidate(username string, password string) (string, error) { |
|
|
func UserValidate(username string, password string) (string, error) { |
|
|
reqHttp := "client_id=" + setting.ClientID + "&client_secret=" + setting.ClientSecret + |
|
|
|
|
|
"&grant_type=" + GrantTypePassword + "&scope=" + ScopeRead + "&username=" + username + |
|
|
|
|
|
"&password=" + password |
|
|
|
|
|
resp, err := http.Post(setting.UserCeterHost + TokenUrl, |
|
|
|
|
|
"application/x-www-form-urlencoded", |
|
|
|
|
|
strings.NewReader(reqHttp)) |
|
|
|
|
|
|
|
|
values := map[string]string{"username": username, "password": password} |
|
|
|
|
|
jsonValue, _ := json.Marshal(values) |
|
|
|
|
|
resp, err := http.Post(setting.RestServerHost + UrlToken, |
|
|
|
|
|
"application/json", |
|
|
|
|
|
bytes.NewBuffer(jsonValue)) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
log.Error("req user center failed:" + err.Error()) |
|
|
log.Error("req user center failed:" + err.Error()) |
|
|
return "", err |
|
|
return "", err |
|
@@ -49,22 +77,56 @@ func UserValidate(username string, password string) (string, error) { |
|
|
return "", err |
|
|
return "", err |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
var respAuth RespAuth |
|
|
|
|
|
err = json.Unmarshal(body, &respAuth) |
|
|
|
|
|
|
|
|
var res RespToken |
|
|
|
|
|
err = json.Unmarshal(body, &res) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
log.Error("unmarshal resp failed:" + err.Error()) |
|
|
|
|
|
|
|
|
log.Error("unmarshal res failed:" + err.Error()) |
|
|
return "", err |
|
|
return "", err |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if respAuth.Error != "" { |
|
|
|
|
|
log.Error("req user_center for token failed:" + respAuth.Error + ":" + respAuth.ErrorDescription) |
|
|
|
|
|
return "", errors.New(respAuth.ErrorDescription) |
|
|
|
|
|
|
|
|
if res.Code != SuccessCode { |
|
|
|
|
|
log.Error("req rest-server for token failed:", res.Message) |
|
|
|
|
|
return "", errors.New(res.Message) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return respAuth.AccessToken, nil |
|
|
|
|
|
|
|
|
return res.Payload.Token, nil |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
func GetUserInfo(username string, token string) (*CloudBrainUser, error) { |
|
|
func GetUserInfo(username string, token string) (*CloudBrainUser, error) { |
|
|
user := &CloudBrainUser{} |
|
|
user := &CloudBrainUser{} |
|
|
|
|
|
|
|
|
|
|
|
client := &http.Client{} |
|
|
|
|
|
reqHttp,err := http.NewRequest("GET", setting.RestServerHost + UrlGetUserInfo + username, strings.NewReader("")) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
log.Error("new req failed:", err.Error()) |
|
|
|
|
|
return nil, err |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
reqHttp.Header.Set("Authorization", TokenTypeBear + token) |
|
|
|
|
|
resp,err := client.Do(reqHttp) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
log.Error("req rest-server failed:", err.Error()) |
|
|
|
|
|
return nil, err |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
body,err := ioutil.ReadAll(resp.Body) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
log.Error("read resp body failed:", err.Error()) |
|
|
|
|
|
return nil, err |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var res RespUserInfo |
|
|
|
|
|
err = json.Unmarshal(body, &res) |
|
|
|
|
|
if err != nil { |
|
|
|
|
|
log.Error("unmarshal resp failed:", err.Error()) |
|
|
|
|
|
return nil, err |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if res.Code != SuccessCode { |
|
|
|
|
|
log.Error("get userInfo failed:", err.Error()) |
|
|
|
|
|
return nil, err |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
user.Email = res.Payload.UserInfo.Email |
|
|
return user, nil |
|
|
return user, nil |
|
|
} |
|
|
} |