61 lines
1.6 KiB
Go
61 lines
1.6 KiB
Go
![]() |
package resolvers
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
|
||
|
"github.com/authorizerdev/authorizer/server/constants"
|
||
|
"github.com/authorizerdev/authorizer/server/crypto"
|
||
|
"github.com/authorizerdev/authorizer/server/envstore"
|
||
|
"github.com/authorizerdev/authorizer/server/graph/model"
|
||
|
"github.com/authorizerdev/authorizer/server/token"
|
||
|
"github.com/authorizerdev/authorizer/server/utils"
|
||
|
)
|
||
|
|
||
|
// GenerateJWTKeysResolver mutation to generate new jwt keys
|
||
|
func GenerateJWTKeysResolver(ctx context.Context, params model.GenerateJWTKeysInput) (*model.GenerateJWTKeysResponse, error) {
|
||
|
gc, err := utils.GinContextFromContext(ctx)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
if !token.IsSuperAdmin(gc) {
|
||
|
return nil, fmt.Errorf("unauthorized")
|
||
|
}
|
||
|
|
||
|
clientID := envstore.EnvStoreObj.GetStringStoreEnvVariable(constants.EnvKeyClientID)
|
||
|
if crypto.IsHMACA(params.Type) {
|
||
|
secret, _, err := crypto.NewHMACKey(params.Type, clientID)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return &model.GenerateJWTKeysResponse{
|
||
|
Secret: &secret,
|
||
|
}, nil
|
||
|
}
|
||
|
|
||
|
if crypto.IsRSA(params.Type) {
|
||
|
_, privateKey, publicKey, _, err := crypto.NewRSAKey(params.Type, clientID)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return &model.GenerateJWTKeysResponse{
|
||
|
PrivateKey: &privateKey,
|
||
|
PublicKey: &publicKey,
|
||
|
}, nil
|
||
|
}
|
||
|
|
||
|
if crypto.IsECDSA(params.Type) {
|
||
|
_, privateKey, publicKey, _, err := crypto.NewECDSAKey(params.Type, clientID)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return &model.GenerateJWTKeysResponse{
|
||
|
PrivateKey: &privateKey,
|
||
|
PublicKey: &publicKey,
|
||
|
}, nil
|
||
|
}
|
||
|
|
||
|
return nil, fmt.Errorf("invalid algorithm")
|
||
|
}
|