|
- package cloudbrain
-
- import (
- "bytes"
- "code.gitea.io/gitea/modules/log"
- "code.gitea.io/gitea/modules/setting"
- "encoding/json"
- "errors"
- "io/ioutil"
- "net/http"
- "strings"
- )
-
- const (
- UrlToken = "/rest-server/api/v1/token/"
- UrlGetUserInfo = "/rest-server/api/v1/user/"
-
- TokenTypeBear = "Bearer "
-
- SuccessCode = "S000"
- )
-
- type RespAuth struct {
- AccessToken string `json:"access_token"`
- RefreshToken string `json:"refresh_token"`
- TokenType string `json:"token_type"`
- ExpiresIn int `json:"expires_in"`
- Error string `json:"error"`
- ErrorDescription string `json:"error_description"`
- }
-
- type RespToken struct {
- Code string `json:"code"`
- Message string `json:"msg"`
- 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:"msg"`
- Payload PayloadUserInfo `json:"payload"`
- }
-
- type PayloadUserInfo struct {
- UserInfo StUserInfo `json:"userInfo"`
- }
-
- type StUserInfo struct {
- Email string `json:"email"`
- }
-
- type CloudBrainUser struct {
- UserName string `json:"username"`
- Email string `json:"email"`
- }
-
- func UserValidate(username string, password string) (string, error) {
- 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 {
- log.Error("req user center failed:" + err.Error())
- return "", err
- }
-
- defer resp.Body.Close()
-
- body, err := ioutil.ReadAll(resp.Body)
- if err != nil {
- log.Error("read resp body failed:" + err.Error())
- return "", err
- }
-
- var res RespToken
- err = json.Unmarshal(body, &res)
- if err != nil {
- log.Error("unmarshal res failed:" + err.Error())
- return "", err
- }
-
- if res.Code != SuccessCode {
- log.Error("req rest-server for token failed:", res.Message)
- return "", errors.New(res.Message)
- }
-
- return res.Payload.Token, nil
- }
-
- func GetUserInfo(username string, token string) (*CloudBrainUser, error) {
- 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
- }
-
- defer resp.Body.Close()
-
- 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
- }
|