all repos

onasty @ 3b5e67f9c8eb6a915c65d5a30d0fffe901227f2e

a one-time notes service

onasty/internal/service/authsrv/jwt.go(view raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package authsrv

import (
	"context"
	"time"

	"github.com/gofrs/uuid/v5"
	"github.com/olexsmir/onasty/internal/dtos"
	"github.com/olexsmir/onasty/internal/jwtutil"
)

func (a *AuthSrv) ParseJWTToken(token string) (jwtutil.Payload, error) {
	return a.jwtTokenizer.Parse(token)
}

func (a AuthSrv) issueTokens(ctx context.Context, userID uuid.UUID) (dtos.Tokens, error) {
	toks, err := a.createTokens(userID)
	if err != nil {
		return dtos.Tokens{}, err
	}

	if err := a.sessionstore.Set(ctx, userID, toks.Refresh, time.Now().Add(a.refreshTokenTTL)); err != nil {
		return dtos.Tokens{}, err
	}

	return toks, nil
}

func (a AuthSrv) createTokens(userID uuid.UUID) (dtos.Tokens, error) {
	accessToken, err := a.jwtTokenizer.AccessToken(jwtutil.Payload{UserID: userID.String()})
	if err != nil {
		return dtos.Tokens{}, err
	}

	refreshToken, err := a.jwtTokenizer.RefreshToken()
	if err != nil {
		return dtos.Tokens{}, err
	}

	return dtos.Tokens{
		Access:  accessToken,
		Refresh: refreshToken,
	}, err
}