all repos

onasty @ 8b28667

a one-time notes service

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

Olexandr Smirnov Olexandr Smirnov
olexsmir@gmail.com
refactor(api): split `usersrv` responsibilities (#195)..., 9 months ago
1
package authsrv
2
3
import (
4
	"context"
5
	"time"
6
7
	"github.com/gofrs/uuid/v5"
8
	"github.com/olexsmir/onasty/internal/dtos"
9
	"github.com/olexsmir/onasty/internal/jwtutil"
10
)
11
12
func (a *AuthSrv) ParseJWTToken(token string) (jwtutil.Payload, error) {
13
	return a.jwtTokenizer.Parse(token)
14
}
15
16
func (a AuthSrv) issueTokens(ctx context.Context, userID uuid.UUID) (dtos.Tokens, error) {
17
	toks, err := a.createTokens(userID)
18
	if err != nil {
19
		return dtos.Tokens{}, err
20
	}
21
22
	if err := a.sessionstore.Set(ctx, userID, toks.Refresh, time.Now().Add(a.refreshTokenTTL)); err != nil {
23
		return dtos.Tokens{}, err
24
	}
25
26
	return toks, nil
27
}
28
29
func (a AuthSrv) createTokens(userID uuid.UUID) (dtos.Tokens, error) {
30
	accessToken, err := a.jwtTokenizer.AccessToken(jwtutil.Payload{UserID: userID.String()})
31
	if err != nil {
32
		return dtos.Tokens{}, err
33
	}
34
35
	refreshToken, err := a.jwtTokenizer.RefreshToken()
36
	if err != nil {
37
		return dtos.Tokens{}, err
38
	}
39
40
	return dtos.Tokens{
41
		Access:  accessToken,
42
		Refresh: refreshToken,
43
	}, err
44
}