Skip to content

Commit

Permalink
NEOS-470 Enable auth token refreshing in cli (#894)
Browse files Browse the repository at this point in the history
  • Loading branch information
nickzelei committed Dec 18, 2023
1 parent 2eca3f4 commit 26a7e6a
Show file tree
Hide file tree
Showing 14 changed files with 799 additions and 121 deletions.
263 changes: 205 additions & 58 deletions backend/gen/go/protos/mgmt/v1alpha1/auth.pb.go

Large diffs are not rendered by default.

235 changes: 235 additions & 0 deletions backend/gen/go/protos/mgmt/v1alpha1/auth.pb.validate.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

60 changes: 60 additions & 0 deletions backend/internal/auth/client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,3 +112,63 @@ func (c *Client) GetTokenResponse(
Error: nil,
}, nil
}

func (c *Client) GetRefreshedAccessToken(
ctx context.Context,
clientId string,
refreshToken string,
) (*AuthTokenResponse, error) {
if _, ok := c.clientIdSecretMap[clientId]; !ok {
return nil, errors.New("unknown client id, requested client was not in safelist")
}

clientSecret := c.clientIdSecretMap[clientId]
payload := strings.NewReader(
fmt.Sprintf(
"grant_type=refresh_token&client_id=%s&client_secret=%s&refresh_token=%s", clientId, clientSecret, refreshToken,
),
)
req, err := http.NewRequestWithContext(ctx, "POST", c.tokenurl, payload)

if err != nil {
return nil, fmt.Errorf("unable to initiate refresh token request: %w", err)
}

req.Header.Add("content-type", "application/x-www-form-urlencoded")

res, err := getHttpClient().Do(req)

if err != nil {
return nil, fmt.Errorf("unable to fulfill refresh token request: %w", err)
}

defer res.Body.Close()
body, err := io.ReadAll(res.Body)

if err != nil {
return nil, fmt.Errorf("unable to read body from refresh token request: %w", err)
}

var tokenResponse *AuthTokenResponseData
err = json.Unmarshal(body, &tokenResponse)

if err != nil {
return nil, fmt.Errorf("unable to unmarshal token response from refresh token request: %w", err)
}

if tokenResponse.AccessToken == "" {
var errorResponse AuthTokenErrorData
err = json.Unmarshal(body, &errorResponse)
if err != nil {
return nil, fmt.Errorf("unable to unmarshal error response from refresh token request: %w", err)
}
return &AuthTokenResponse{
Result: nil,
Error: &errorResponse,
}, nil
}
return &AuthTokenResponse{
Result: tokenResponse,
Error: nil,
}, nil
}
Loading

0 comments on commit 26a7e6a

Please sign in to comment.