class Devise::Strategies::SticapiAuthenticatable
Public Instance Methods
authenticate!()
click to toggle source
# File lib/sticapi_client/sticapi_devise_strategy.rb, line 8 def authenticate! if params[:user] if params[:user].has_key?(:username) || params[:user].has_key?(:login) || params[:user].has_key?(:email) field = params[:user][:username] field ||= params[:user][:email] field ||= params[:user][:login] if field.include?('@') || /^[0-9]*$/.match(field) resource = password.present? && mapping.to.find_for_database_authentication(authentication_hash) hashed = false if validate(resource){ hashed = true; resource.valid_password?(password) } remember_me(resource) resource.after_database_authentication success!(resource) return end mapping.to.new.password = password if !hashed && Devise.paranoid unless resource Devise.paranoid ? fail(:invalid) : fail(:not_found_in_database) end else Sticapi::SticapiClient.instance.get_token secret = Sticapi::SticapiClient.instance.access_token payload = { user: field, password: params[:user][:password] } token = JWT.encode payload, secret, 'HS256' uri = URI.parse("#{Sticapi::SticapiClient.instance.uri}/users/log_in") http = Net::HTTP.new(uri.host, uri.port) request = Net::HTTP::Post.new(uri.request_uri) request['Content-Type'] = 'application/json' request['access-token'] = Sticapi::SticapiClient.instance.access_token request['client'] = Sticapi::SticapiClient.instance.client request['uid'] = Sticapi::SticapiClient.instance.uid request.body = { data: token }.to_json response = http.request(request) Sticapi::SticapiClient.instance.update_token(response) case response when Net::HTTPSuccess data = JSON.parse(response.body) if data['user'] unless user = User.find_by(username: data['user']['username']) user = User.new user.name = data['user']['name'] if user.respond_to? :name user.username = data['user']['username'] if user.respond_to? :username user.email = data['user']['email'] user.cpf = data['user']['cpf'] if user.respond_to? :cpf end user.password = params[:user][:password] if user.respond_to? :password user.password_confirmation = params[:user][:password] if user.respond_to? :password_confirmation user.unities = data['user']['unities'] if user.respond_to? :unities user.skip_confirmation! if user.respond_to? 'skip_confirmation!' user.save success!(user) return else return fail(:invalid) end when Net::HTTPUnauthorized return fail(:invalid) when Net::HTTPServerError return fail(:invalid) else return fail(:invalid) end end else return fail(:invalid) end end return fail(:invalid) end