package service import ( "bytes" "encoding/json" "fmt" "net/http" "time" "git.kundeng.us/phoenix/textsender-models/tx0/token" "git.kundeng.us/phoenix/catapult/internal/app" ) type Auth struct { Application *app.App } type service struct { Username string `json:"username"` Passphrase string `json:"passphrase"` } type tokenResponse struct { Message string `json:"message"` Data []*token.Login `json:"data"` } func (a *Auth) GetToken() (*token.Login, error) { serv := service{ Username: a.Application.ServiceUsername, Passphrase: a.Application.ServicePassphrase, } jsonData, err := json.Marshal(serv) if err != nil { return nil, err } resp, err := http.Post( fmt.Sprintf("%s/api/v1/service/login", a.Application.AuthUrl), "application/json", bytes.NewBuffer(jsonData), ) if err != nil { return nil, err } defer resp.Body.Close() var r tokenResponse err = json.NewDecoder(resp.Body).Decode(&r) if err != nil { return nil, err } return r.Data[0], nil } type refreshTokenRequest struct { AccessToken string `json:"access_token"` } func (a *Auth) GetRefreshToken(tok *token.Login) (*token.Login, error) { req := refreshTokenRequest{AccessToken: tok.AccessToken} jsonData, err := json.Marshal(req) if err != nil { return nil, err } resp, err := http.Post(fmt.Sprintf("%s/api/v1/token/refresh", a.Application.AuthUrl), "application/json", bytes.NewBuffer(jsonData)) if err != nil { return nil, err } defer resp.Body.Close() var r tokenResponse err = json.NewDecoder(resp.Body).Decode(&r) if err != nil { return nil, err } else { if len(r.Data) == 0 { return nil, nil } else { return r.Data[0], nil } } } func (s *Auth) TokenExpired(tok *token.Login) bool { now := time.Now() expiredTime := time.Unix(tok.ExpiresIn, 0) if now.After(expiredTime) { return true } else { return false } }