Commit a087f14
Changed files (3)
app
controllers
app/controllers/clients_controller.rb
@@ -9,7 +9,7 @@ class ClientsController < ApplicationController
render status: :created, formats: :json
rescue ActiveRecord::RecordInvalid => error
json = {
- error: error.record.errors[:redirect_uris].present? ? :invalid_redirect_uri : :invalid_client_metadata,
+ error: error_type_for(error.record.errors),
error_description: error.record.errors.full_messages.join(' ')
}
render json: json, status: :bad_request
@@ -18,7 +18,13 @@ class ClientsController < ApplicationController
private
def secure_params
- params.permit(:client_name, :token_endpoint_auth_method, :logo_uri, :jwks_uri, redirect_uris: [])
+ params.permit(
+ :client_name,
+ :token_endpoint_auth_method,
+ :logo_uri,
+ :jwks_uri,
+ redirect_uris: []
+ )
end
def transform(params)
@@ -35,4 +41,8 @@ class ClientsController < ApplicationController
response.headers["Cache-Control"] = "no-cache, no-store"
response.headers["Pragma"] = "no-cache"
end
+
+ def error_type_for(errors)
+ errors[:redirect_uris] ? :invalid_redirect_uri : :invalid_client_metadata
+ end
end
app/models/scim/user.rb
@@ -6,7 +6,7 @@ module SCIM
attr_accessor :id, :schemas, :userName, :name, :locale, :timezone, :password
validate :must_be_user_schema
- validates :id, format: { with: ApplicationRecord::UUID }, if: proc { |x| x.id.present? }
+ validates :id, format: { with: ApplicationRecord::UUID }, allow_blank: true
validates :locale, presence: true, inclusion: ::User::VALID_LOCALES
validates :timezone, presence: true, inclusion: ::User::VALID_TIMEZONES
validates :userName, presence: true, email: true
app/models/client.rb
@@ -6,7 +6,11 @@ class Client < ApplicationRecord
has_secure_password
has_many :authorizations
attribute :redirect_uris, :string, array: true
- enum token_endpoint_auth_method: { client_secret_none: 0, client_secret_post: 1, client_secret_basic: 2 }
+ enum token_endpoint_auth_method: {
+ client_secret_none: 0,
+ client_secret_post: 1,
+ client_secret_basic: 2
+ }
validates :redirect_uris, presence: true
validates :jwks_uri, format: { with: URI_REGEX }, allow_blank: true
@@ -22,7 +26,13 @@ class Client < ApplicationRecord
end
def grant_types
- [:authorization_code, :refresh_token, :client_credentials, :password, 'urn:ietf:params:oauth:grant-type:saml2-bearer']
+ [
+ :authorization_code,
+ :refresh_token,
+ :client_credentials,
+ :password,
+ 'urn:ietf:params:oauth:grant-type:saml2-bearer'
+ ]
end
def access_token