forked from baron/baron-sso
custom claim 타입보정 UI. 대표테넌트 노출 보정
This commit is contained in:
@@ -3588,7 +3588,7 @@ func normalizeIDTokenClaimsWithOptions(rawClaims any, allowTopLevel bool) ([]nor
|
||||
valueType = "text"
|
||||
}
|
||||
switch valueType {
|
||||
case "text", "number", "boolean", "array", "object", "date", "datetime":
|
||||
case "text", "number", "float", "boolean", "array", "object", "date", "datetime":
|
||||
default:
|
||||
return nil, fmt.Errorf("metadata.id_token_claims valueType is invalid: %s", valueType)
|
||||
}
|
||||
@@ -3641,9 +3641,24 @@ func parseConfiguredClaimValue(rawValue string, valueType string) (any, error) {
|
||||
if trimmed == "" {
|
||||
return nil, errors.New("number value is required")
|
||||
}
|
||||
if !isIntegerClaimLiteral(trimmed) {
|
||||
return nil, errors.New("number value must be an integer")
|
||||
}
|
||||
parsed, err := strconv.ParseFloat(trimmed, 64)
|
||||
if err != nil {
|
||||
return nil, errors.New("number value must be a finite number")
|
||||
return nil, errors.New("number value must be an integer")
|
||||
}
|
||||
return parsed, nil
|
||||
case "float":
|
||||
if trimmed == "" {
|
||||
return nil, errors.New("float value is required")
|
||||
}
|
||||
if !isFloatClaimLiteral(trimmed) {
|
||||
return nil, errors.New("float value must be a finite decimal number")
|
||||
}
|
||||
parsed, err := strconv.ParseFloat(trimmed, 64)
|
||||
if err != nil {
|
||||
return nil, errors.New("float value must be a finite decimal number")
|
||||
}
|
||||
return parsed, nil
|
||||
case "boolean":
|
||||
@@ -3708,6 +3723,54 @@ func parseConfiguredClaimValue(rawValue string, valueType string) (any, error) {
|
||||
}
|
||||
}
|
||||
|
||||
func isIntegerClaimLiteral(value string) bool {
|
||||
if value == "" {
|
||||
return false
|
||||
}
|
||||
start := 0
|
||||
if value[0] == '-' {
|
||||
if len(value) == 1 {
|
||||
return false
|
||||
}
|
||||
start = 1
|
||||
}
|
||||
for _, char := range value[start:] {
|
||||
if char < '0' || char > '9' {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func isFloatClaimLiteral(value string) bool {
|
||||
if value == "" {
|
||||
return false
|
||||
}
|
||||
start := 0
|
||||
if value[0] == '-' {
|
||||
if len(value) == 1 {
|
||||
return false
|
||||
}
|
||||
start = 1
|
||||
}
|
||||
hasDigit := false
|
||||
hasDot := false
|
||||
for _, char := range value[start:] {
|
||||
switch {
|
||||
case char >= '0' && char <= '9':
|
||||
hasDigit = true
|
||||
case char == '.':
|
||||
if hasDot {
|
||||
return false
|
||||
}
|
||||
hasDot = true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
return hasDigit
|
||||
}
|
||||
|
||||
func requestIncludesInlineHeadlessJWKS(req clientUpsertRequest) bool {
|
||||
if req.Jwks != nil {
|
||||
return true
|
||||
|
||||
Reference in New Issue
Block a user