Sha256: 6cd98f2ac94f47c57239407a8db4aa5b341d9807dbc2c9034c115f7412c9d2e0

Contents?: true

Size: 1.29 KB

Versions: 11

Compression:

Stored size: 1.29 KB

Contents

module Shieldify
  module Strategies
    class Email < Warden::Strategies::Base
      def valid?
        json_body['email'].present? && json_body['password'].present?
      end

      def authenticate!
        user = User.authenticate_by_email(email: json_body['email'], password: json_body['password'])
        return fail!("Unauthorized: #{user.errors.full_messages.join(", ")}") unless user.errors.empty?

        handle_user_authentication(user)
      end

      private

      def json_body
        request.body.rewind
        JSON.parse(request.body.read) rescue {}
      end

      def handle_user_authentication(user)
        JwtService.encode(user.id) do |success, token, jti, error|
          if success
            process_jwt_token(user, token, jti)
          else
            fail!("JWT token generation failed: #{error}")
          end
        end
      end

      def process_jwt_token(user, token, jti)
        jwt_token = user.jwt_sessions.create(jti: jti)
        if jwt_token.persisted?
          set_jwt_to_header(token)
          success!(user)
        else
          fail!("Failed to save JWT token: #{jwt_token.errors.full_messages.join(", ")}")
        end
      end

      def set_jwt_to_header(token)
        env['auth.jwt'] ||= {}
        env['auth.jwt'] = token
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
shieldify-0.2.9.pre.alpha lib/shieldify/strategies/email.rb
shieldify-0.2.8.pre.alpha lib/shieldify/strategies/email.rb
shieldify-0.2.7.pre.alpha lib/shieldify/strategies/email.rb
shieldify-0.2.6.pre.alpha lib/shieldify/strategies/email.rb
shieldify-0.2.5.pre.alpha lib/shieldify/strategies/email.rb
shieldify-0.2.4.pre.alpha lib/shieldify/strategies/email.rb
shieldify-0.2.3.pre.alpha lib/shieldify/strategies/email.rb
shieldify-0.2.2.pre.alpha lib/shieldify/strategies/email.rb
shieldify-0.2.1.pre.alpha lib/shieldify/strategies/email.rb
shieldify-0.2.0.pre.alpha lib/shieldify/strategies/email.rb
shieldify-0.1.2.pre.alpha lib/shieldify/strategies/email.rb