2022-03-24 13:51:52 +00:00
|
|
|
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"
|
2022-05-24 07:12:29 +00:00
|
|
|
log "github.com/sirupsen/logrus"
|
2022-03-24 13:51:52 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
// 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 {
|
2022-05-24 07:12:29 +00:00
|
|
|
log.Debug("Failed to get GinContext", err)
|
2022-03-24 13:51:52 +00:00
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
if !token.IsSuperAdmin(gc) {
|
2022-05-24 07:12:29 +00:00
|
|
|
log.Debug("Not logged in as super admin.")
|
2022-03-24 13:51:52 +00:00
|
|
|
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 {
|
2022-05-24 07:12:29 +00:00
|
|
|
log.Debug("Failed to generate new HMAC key:", err)
|
2022-03-24 13:51:52 +00:00
|
|
|
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 {
|
2022-05-24 07:12:29 +00:00
|
|
|
log.Debug("Failed to generate new RSA key:", err)
|
2022-03-24 13:51:52 +00:00
|
|
|
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 {
|
2022-05-24 07:12:29 +00:00
|
|
|
log.Debug("Failed to generate new ECDSA key:", err)
|
2022-03-24 13:51:52 +00:00
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
return &model.GenerateJWTKeysResponse{
|
|
|
|
PrivateKey: &privateKey,
|
|
|
|
PublicKey: &publicKey,
|
|
|
|
}, nil
|
|
|
|
}
|
|
|
|
|
2022-05-24 07:12:29 +00:00
|
|
|
log.Debug("Invalid algorithm:", params.Type)
|
2022-03-24 13:51:52 +00:00
|
|
|
return nil, fmt.Errorf("invalid algorithm")
|
|
|
|
}
|