github.com/optim-corp/cios-golang-sdk@v0.5.1/sdk/service/authorization/authorization.go (about)

     1  package srvauth
     2  
     3  import (
     4  	"context"
     5  	"io/ioutil"
     6  	"log"
     7  	"net/http"
     8  	"net/url"
     9  	"strings"
    10  
    11  	cnv "github.com/fcfcqloow/go-advance/convert"
    12  
    13  	sdkmodel "github.com/optim-corp/cios-golang-sdk/model"
    14  )
    15  
    16  func (self *CiosAuth) GetAccessTokenByRefreshToken() (sdkmodel.AccessToken, sdkmodel.Scope, sdkmodel.TokenType, sdkmodel.ExpiresIn, error) {
    17  	if self.debug {
    18  		log.Printf("%s", "Refresh AccessToken.")
    19  	}
    20  	debug := self.ApiClient.GetConfig().Debug
    21  	self.ApiClient.GetConfig().Debug = false
    22  	response, _, err := self.ApiClient.AuthApi.
    23  		RefreshToken(self.withHost(context.Background())).
    24  		GrantType("refresh_token").
    25  		RefreshToken(self.ref).
    26  		ClientId(self.clientId).
    27  		ClientSecret(self.clientSecret).
    28  		Scope(self.scope).
    29  		Execute()
    30  	if err != nil {
    31  		return "", "", "", 0, err
    32  	}
    33  	self.ApiClient.GetConfig().Debug = debug
    34  	return response.AccessToken, response.Scope, response.TokenType, int(response.ExpiresIn), nil
    35  
    36  }
    37  
    38  func (self *CiosAuth) GetAccessTokenOnClient() (sdkmodel.AccessToken, sdkmodel.Scope, sdkmodel.TokenType, sdkmodel.ExpiresIn, error) {
    39  	if self.debug {
    40  		log.Printf("%s", "Refresh AccessToken.")
    41  	}
    42  	responseData := struct {
    43  		AccessToken string `json:"access_token"`
    44  		TokenType   string `json:"token_type"`
    45  		ExpiresIn   int    `json:"expires_in"`
    46  		Scope       string `json:"scope"`
    47  	}{}
    48  	values := url.Values{}
    49  	values.Add("grant_type", "client_credentials")
    50  	values.Add("client_id", self.clientId)
    51  	values.Add("client_secret", self.clientSecret)
    52  	values.Add("scope", self.scope)
    53  	resp, _ := http.Post(
    54  		self.Url+"/connect/token",
    55  		"application/x-www-form-urlencoded",
    56  		strings.NewReader(values.Encode()),
    57  	)
    58  	defer resp.Body.Close()
    59  
    60  	body, err := ioutil.ReadAll(resp.Body)
    61  	if err != nil {
    62  		return "", "", "", 0, err
    63  	}
    64  
    65  	err = cnv.UnMarshalJson(body, &responseData)
    66  	if err != nil {
    67  		return "", "", "", 0, err
    68  	}
    69  	return responseData.AccessToken, responseData.Scope, responseData.TokenType, responseData.ExpiresIn, nil
    70  }
    71  
    72  func (self *CiosAuth) GetAccessTokenOnDevice() (sdkmodel.AccessToken, sdkmodel.Scope, sdkmodel.TokenType, sdkmodel.ExpiresIn, error) {
    73  	if self.debug {
    74  		log.Printf("%s", "Refresh AccessToken.")
    75  	}
    76  	responseBody := struct {
    77  		AccessToken string `json:"access_token"`
    78  		TokenType   string `json:"token_type"`
    79  		ExpiresIn   int    `json:"expires_in"`
    80  		Scope       string `json:"scope"`
    81  	}{}
    82  	values := url.Values{
    83  		"grant_type":    []string{"urn:ietf:params:oauth:grant-type:jwt-bearer"},
    84  		"client_id":     []string{self.clientId},
    85  		"client_secret": []string{self.clientSecret},
    86  		"scope":         []string{self.scope},
    87  	}
    88  
    89  	response, err := http.Post(self.Url+"/connect/token", "application/x-www-form-urlencoded", strings.NewReader(values.Encode()))
    90  	if err != nil {
    91  		return "", "", "", 0, err
    92  	}
    93  	defer response.Body.Close()
    94  	if err := cnv.UnMarshalJson(response.Body, &responseBody); err != nil {
    95  		return "", "", "", 0, err
    96  	}
    97  	return responseBody.AccessToken, responseBody.Scope, responseBody.TokenType, responseBody.ExpiresIn, nil
    98  }