parent
e9288ee253
commit
b7f1f714ce
@ -0,0 +1,38 @@ |
|||||||
|
package util |
||||||
|
|
||||||
|
import ( |
||||||
|
"github.com/golang-jwt/jwt/v5" |
||||||
|
"github.com/rs/xid" |
||||||
|
"sorbet/pkg/env" |
||||||
|
"sorbet/pkg/ticket" |
||||||
|
"time" |
||||||
|
) |
||||||
|
|
||||||
|
func CreateTicket(claims *ticket.Claims) (string, error) { |
||||||
|
if claims.ID == "" { |
||||||
|
claims.ID = xid.New().String() |
||||||
|
} |
||||||
|
if claims.Issuer == "" { |
||||||
|
claims.Issuer = env.String("TICKET_ISSUER") |
||||||
|
} |
||||||
|
if claims.Subject == "" { |
||||||
|
claims.Issuer = env.String("TICKET_SUBJECT") |
||||||
|
} |
||||||
|
if claims.Audience == nil { |
||||||
|
claims.Audience = env.List("TICKET_AUDIENCE") |
||||||
|
} |
||||||
|
if claims.ExpiresAt == nil { |
||||||
|
ttl := env.Duration("TICKET_TTL", time.Hour) |
||||||
|
claims.ExpiresAt = jwt.NewNumericDate(time.Now().Add(ttl)) |
||||||
|
} |
||||||
|
source := []byte(env.String("TICKET_PRIVATE_KEY")) |
||||||
|
privateKey, err := jwt.ParseRSAPrivateKeyFromPEM(source) |
||||||
|
if err != nil { |
||||||
|
return "", err |
||||||
|
} |
||||||
|
signedString, err := ticket.Create(claims, privateKey) |
||||||
|
if err != nil { |
||||||
|
return "", err |
||||||
|
} |
||||||
|
return signedString, nil |
||||||
|
} |
Loading…
Reference in new issue