Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
require 'devise/models'
require 'devise_unikey_api_authenticatable/strategy'
require 'devise_unikey_api_authenticatable/session_serializer'
require 'unikey/api/core'


module Devise
  module Models
    module UnikeyApiAuthenticatable

      def self.included(base)
        base.class_eval do
          extend ClassMethods
        end
      end

      module ClassMethods
        def authenticate_with_api(attributes={})
          user = Devise.unikey_user_model_klass.authenticate!(attributes[:email], attributes[:password])
          success = !user.errors? && !user.authentication.errors?  && check_additional_auth_rules(user)
          if success
            return new(user)
          else
            return nil
          end
        end

        def serialize_into_session(record)
          DeviseUnikeyApiAuthenticatable::SessionSerializer.serialize_into_session api_sdk, record
        end

        def serialize_from_session(id, api_auth)
          config = DeviseUnikeyApiAuthenticatable::SessionSerializer.serialize_from_session api_sdk, id, api_auth
          new config
        end

        private

        def api_sdk
          Devise.unikey_api_sdk
        end

        def check_additional_auth_rules(user)
          return true if Devise.unikey_authentication_rules.empty?

          Devise.unikey_authentication_rules.all? {|rule| rule.call(user) }
        end

      end

    end
  end
end