forked from baron/baron-sso
74 lines
2.9 KiB
Go
74 lines
2.9 KiB
Go
package domain
|
|
|
|
import "time"
|
|
|
|
type HydraClient struct {
|
|
ClientID string `json:"client_id"`
|
|
ClientName string `json:"client_name,omitempty"`
|
|
ClientSecret string `json:"client_secret,omitempty"` // Added
|
|
ClientURI string `json:"client_uri,omitempty"`
|
|
RedirectURIs []string `json:"redirect_uris,omitempty"`
|
|
GrantTypes []string `json:"grant_types,omitempty"`
|
|
ResponseTypes []string `json:"response_types,omitempty"`
|
|
Scope string `json:"scope,omitempty"`
|
|
TokenEndpointAuthMethod string `json:"token_endpoint_auth_method,omitempty"`
|
|
JWKSUri string `json:"jwks_uri,omitempty"`
|
|
JWKS interface{} `json:"jwks,omitempty"`
|
|
Metadata map[string]interface{} `json:"metadata,omitempty"`
|
|
}
|
|
|
|
func (c *HydraClient) IsTrustedRP() bool {
|
|
// A Trusted RP must have a public key registered (URI or Inline)
|
|
// and use private_key_jwt for token endpoint authentication.
|
|
hasPublicKey := c.JWKSUri != "" || c.JWKS != nil
|
|
isPrivateKeyJwt := c.TokenEndpointAuthMethod == "private_key_jwt"
|
|
return hasPublicKey && isPrivateKeyJwt
|
|
}
|
|
|
|
func (c *HydraClient) IsHeadlessLoginEnabled() bool {
|
|
if !c.IsTrustedRP() {
|
|
return false
|
|
}
|
|
if c.Metadata == nil {
|
|
return false
|
|
}
|
|
val, ok := c.Metadata["headless_login_enabled"]
|
|
if !ok {
|
|
return false
|
|
}
|
|
if b, ok := val.(bool); ok {
|
|
return b
|
|
}
|
|
return false
|
|
}
|
|
|
|
type HydraConsentRequest struct {
|
|
Challenge string `json:"challenge"`
|
|
RequestedScope []string `json:"requested_scope"`
|
|
RequestedAudience []string `json:"requested_access_token_audience"`
|
|
Skip bool `json:"skip"`
|
|
Subject string `json:"subject"`
|
|
Client HydraClient `json:"client"`
|
|
}
|
|
|
|
type HydraLoginRequest struct {
|
|
Challenge string `json:"challenge"`
|
|
Subject string `json:"subject"`
|
|
Skip bool `json:"skip"`
|
|
Client HydraClient `json:"client"`
|
|
}
|
|
|
|
type HydraConsentSession struct {
|
|
ConsentRequestID string `json:"consent_request_id,omitempty"`
|
|
Subject string `json:"subject,omitempty"`
|
|
GrantedScope []string `json:"grant_scope,omitempty"`
|
|
GrantedAudience []string `json:"grant_access_token_audience,omitempty"`
|
|
Remember bool `json:"remember"`
|
|
RememberFor int `json:"remember_for,omitempty"`
|
|
AuthenticatedAt *time.Time `json:"authenticated_at,omitempty"`
|
|
RequestedAt *time.Time `json:"requested_at,omitempty"`
|
|
HandledAt *time.Time `json:"handled_at,omitempty"`
|
|
Client HydraClient `json:"client,omitempty"`
|
|
ConsentRequest *HydraConsentRequest `json:"consent_request,omitempty"`
|
|
}
|