implement jwt claims

This commit is contained in:
2024-09-23 11:18:13 -05:00
parent 2b3abb8fb2
commit f6e9ee7b1a
10 changed files with 175 additions and 26 deletions

View File

@@ -126,27 +126,35 @@ func (n *NKodeAPI) GetLoginInterface(username Username, customerId CustomerId) (
return &resp, nil
}
func (n *NKodeAPI) Login(customerId CustomerId, username Username, keySelection KeySelection) (string, error) {
func (n *NKodeAPI) Login(customerId CustomerId, username Username, keySelection KeySelection) (*JwtTokens, error) {
customer, err := n.Db.GetCustomer(customerId)
if err != nil {
return "", err
return nil, err
}
user, err := n.Db.GetUser(username, customerId)
if err != nil {
return "", errors.New(fmt.Sprintf("user dne %s", username))
return nil, errors.New(fmt.Sprintf("user dne %s", username))
}
passcode, err := ValidKeyEntry(*user, *customer, keySelection)
if err != nil {
return "", err
return nil, err
}
if user.Renew {
err = n.Db.RefreshUser(*user, passcode, customer.Attributes)
err = n.Db.RefreshUserPasscode(*user, passcode, customer.Attributes)
if err != nil {
return "", err
return nil, err
}
}
return "", nil
jwtToken, err := NewJwtTokens(string(user.Username))
if err != nil {
return nil, err
}
err = n.Db.UpdateUserRefreshToken(user.Id, jwtToken.RefreshToken)
if err != nil {
return nil, err
}
return &jwtToken, nil
}
func (n *NKodeAPI) RenewAttributes(customerId CustomerId) error {
@@ -161,6 +169,21 @@ func (n *NKodeAPI) GetSvgStringInterface(svgId SvgIdInterface) ([]string, error)
return n.Db.GetSvgStringInterface(svgId)
}
func (n *NKodeAPI) RefreshToken(jwt string) (string, error) {
return "", nil
func (n *NKodeAPI) RefreshToken(username Username, customerId CustomerId, refreshToken string) (string, error) {
user, err := n.Db.GetUser(username, customerId)
if err != nil {
return "", err
}
if user.RefreshToken != refreshToken {
return "", errors.New("refresh token is invalid")
}
refreshClaims, err := ParseRefreshToken(refreshToken)
if err != nil {
return "", err
}
if err = ClaimExpired(*refreshClaims); err != nil {
return "", err
}
newAccessClaims := NewAccessClaim(string(username))
return EncodeAndSignClaims(newAccessClaims)
}