diff --git a/app/controllers/api/user_token_controller.rb b/app/controllers/api/user_token_controller.rb index c9ab895..cae81f9 100644 --- a/app/controllers/api/user_token_controller.rb +++ b/app/controllers/api/user_token_controller.rb @@ -1,5 +1,12 @@ +# frozen_string_literal: true + +require './lib/knock_monkeypatch' + class Api::UserTokenController < Knock::AuthTokenController + include Oath::ControllerHelpers + skip_before_action :verify_authenticity_token + before_action :sign_in_user rescue_from Exception, :with => :return_error @@ -10,7 +17,7 @@ class Api::UserTokenController < Knock::AuthTokenController logger.error "==Handled=======" logger.error exception.message logger.error exception.backtrace.join("\n") - logger.error "==Handled=======" + logger.error "==Handled=======" case exception when ActiveRecord::RecordNotFound @status = 404 @@ -27,12 +34,18 @@ class Api::UserTokenController < Knock::AuthTokenController end # for some reason render json_errors is not working - # simulating JSON API support - render json: { + # simulating JSON API support + render json: { errors: [{ status: @status.to_s, title: @message }] } end + + private + + def sign_in_user + sign_in(entity) + end end diff --git a/db/structure.sql b/db/structure.sql index 7246f09..5e3e9ce 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -9,20 +9,6 @@ SET xmloption = content; SET client_min_messages = warning; SET row_security = off; --- --- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: - --- - -CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; - - --- --- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: - --- - -COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; - - -- -- Name: fuzzystrmatch; Type: EXTENSION; Schema: -; Owner: - -- @@ -1475,6 +1461,7 @@ CREATE TABLE public.settings ( -- CREATE SEQUENCE public.settings_id_seq + AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE @@ -1510,6 +1497,7 @@ CREATE TABLE public.taggings ( -- CREATE SEQUENCE public.taggings_id_seq + AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE @@ -1540,6 +1528,7 @@ CREATE TABLE public.tags ( -- CREATE SEQUENCE public.tags_id_seq + AS integer START WITH 1 INCREMENT BY 1 NO MINVALUE diff --git a/lib/knock_monkeypatch.rb b/lib/knock_monkeypatch.rb new file mode 100644 index 0000000..ade5f2c --- /dev/null +++ b/lib/knock_monkeypatch.rb @@ -0,0 +1,7 @@ +module Knock + class AuthTokenController < ApplicationController + skip_before_action :authenticate + alias authenticate_with_token authenticate + before_action :authenticate_with_token + end +end \ No newline at end of file diff --git a/spec/controllers/api/user_token_controller_spec.rb b/spec/controllers/api/user_token_controller_spec.rb new file mode 100644 index 0000000..cb01e35 --- /dev/null +++ b/spec/controllers/api/user_token_controller_spec.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +require 'rails_helper' + +RSpec.describe Api::UserTokenController, type: :request do + let(:current_user) { create(:user) } + + describe '#create' do + it 'returns error if credentials are not corrent and does not set cookie' do + + post create_endpoint, params: wrong_auth_params + + expect(response).to be_successful + expect(response.body).to match record_not_found + expect(cookie_data).to eq nil + end + + it 'sends token and cookie if credentials are correct' do + post create_endpoint, params: correct_auth_params + + expect(response).to be_successful + expect(response.body).not_to match record_not_found + expect(response.body).to match token_response + expect(cookie_data).not_to eq nil + end + end + + private + + def wrong_auth_params + { + auth: { + email: 'wrong_email@api-test.com', + password: 'password' + } + } + end + + def correct_auth_params + { + auth: { + email: current_user.email, + password: 'password' + } + } + end + + def create_endpoint + '/api/v1/user_token' + end + + def record_not_found + /Record not found/ + end + + def token_response + /jwt/ + end + + def cookie_data + cookies[:_easy_release_session] + end +end