Skip to content

Commit 2fe7e2a

Browse files
Merge pull request #15 from TeTiRoss/fix_password_recovery_validation
Fix password recovery validation
2 parents c9384e0 + 32cbab1 commit 2fe7e2a

File tree

10 files changed

+87
-75
lines changed

10 files changed

+87
-75
lines changed

app/controllers/api_session_recovering/session_recovering/reset_passwords/validates_controller.rb

Lines changed: 0 additions & 20 deletions
This file was deleted.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class ApiSessionRecovering::SessionRecovering::RestorePassword::ValidationsController < ApiSessionRecovering::BaseController
2+
attr_reader :resource
3+
4+
def create
5+
super
6+
7+
ApiSessionRecovering::RestorePassword.find_by_token! resource_params[:token]
8+
9+
head :no_content
10+
end
11+
12+
private
13+
14+
def build_resource
15+
@resource = ApiSessionRecovering::ResetPasswordValidation.new \
16+
email: resource_params[:email],
17+
token: resource_params[:token],
18+
remote_ip: request.geocoder_spoofable_ip.to_s
19+
end
20+
21+
def resource_params
22+
params.require(:restore_password).permit :token, :email
23+
end
24+
end

config/routes.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
ApiSessionRecovering::Engine.routes.draw do
22
namespace :session_recovering do
3-
resource :restore_password, only: :create
4-
5-
namespace :reset_passwords do
6-
resource :validate, only: :create
3+
namespace :restore_password do
4+
resource :validation, only: :create
75
end
86

9-
resource :reset_password, only: :create
7+
resource :restore_password, only: :create
8+
9+
resource :reset_password, only: :create
1010
end
1111
end

lib/apidocs/reset_password_docs.rb

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@ class ApiSessionRecovering::ResetPasswordDocs
44

55
swagger_path '/session_recovering/reset_password' do
66
operation :post do
7-
key :description, 'reset_password'
87
key :summary, '2nd step of password recovering.'
9-
key :tags, ['Reset password']
8+
key :tags, ['restore password']
109
key :consumes, ['multipart/form-data']
1110
security do
1211
key :api_key, []
@@ -37,22 +36,18 @@ class ApiSessionRecovering::ResetPasswordDocs
3736
key :type, :string
3837
key :format, :password
3938
end
40-
41-
response '204' do
39+
response 204 do
4240
key :description, 'Success without body'
4341
end
44-
45-
response '404' do
46-
key :description, 'NotFound'
42+
response 404 do
43+
key :description, 'Not Found'
4744
end
48-
49-
response '422' do
50-
key :description, 'UnprocessableEntity'
45+
response 422 do
46+
key :description, 'Unprocessable Entity'
5147
schema do
5248
key :'$ref', :UnprocessableEntity
5349
end
5450
end
5551
end
5652
end
5753
end
58-

lib/apidocs/restore_password_docs.rb

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@ class ApiSessionRecovering::RestorePasswordDocs
44

55
swagger_path '/session_recovering/restore_password' do
66
operation :post do
7-
key :description, 'restore_password'
87
key :summary, '1st step of password recovering. Generates the code and sends it to user.'
9-
key :tags, ['Restore password']
8+
key :tags, ['restore password']
109
key :consumes, ['multipart/form-data']
1110
security do
1211
key :api_key, []
@@ -23,46 +22,51 @@ class ApiSessionRecovering::RestorePasswordDocs
2322
key :required, false
2423
key :type, :string
2524
end
26-
27-
response '204' do
25+
response 204 do
2826
key :description, 'Success without body'
2927
end
30-
31-
response '404' do
32-
key :description, 'NotFound'
28+
response 404 do
29+
key :description, 'Not Found'
3330
end
34-
35-
response '422' do
36-
key :description, 'UnprocessableEntity'
31+
response 422 do
32+
key :description, 'Unprocessable Entity'
3733
schema do
3834
key :'$ref', :UnprocessableEntity
3935
end
4036
end
4137
end
4238
end
4339

44-
swagger_path '/session_recovering/restore_passwords/{token}' do
45-
operation :get do
46-
key :description, 'Validate restore token'
40+
swagger_path '/session_recovering/restore_password/validation' do
41+
operation :post do
4742
key :summary, 'validate restore token'
48-
key :tags, ['Restore password']
49-
key :consumes, ['multipart/form-data']
43+
key :tags, ['restore password']
5044
security do
5145
key :api_key, []
5246
end
5347
parameter do
54-
key :name, :token
55-
key :in, :frontend_path
48+
key :name, 'restore_password[token]'
49+
key :in, :formData
5650
key :required, true
5751
key :type, :string
5852
end
59-
60-
response '204' do
53+
parameter do
54+
key :name, 'restore_password[email]'
55+
key :in, :formData
56+
key :required, true
57+
key :type, :string
58+
end
59+
response 204 do
6160
key :description, 'Success without body'
6261
end
63-
64-
response '404' do
65-
key :description, 'NotFound'
62+
response 404 do
63+
key :description, 'Not Found'
64+
end
65+
response 422 do
66+
key :description, 'Unprocessable Entity'
67+
schema do
68+
key :'$ref', :UnprocessableEntity
69+
end
6670
end
6771
end
6872
end

lib/apidocs/unprocessable_entity.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ class ApiSessionRecovering::UnprocessableEntity
55

66
swagger_schema :UnprocessableEntity do
77
property :errors do
8+
key :'$ref', :Errors
9+
end
10+
end
11+
12+
swagger_schema :Errors do
13+
property :error_field do
814
key :type, :array
915
items do
1016
key :type, :string

spec/dummy/spec/requests/reset_password_validation_request_spec.rb

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,15 @@
1414

1515
let!(:restore_password) { create :restore_password, user: user }
1616

17-
let(:path) { '/api/session_recovering/reset_passwords/validate' }
17+
let(:path) { '/api/session_recovering/restore_password/validation' }
1818

1919
context 'valid restore token' do
2020
let(:params) do
2121
{
22-
"token": restore_password.token,
23-
"email": restore_password.email
22+
restore_password: {
23+
token: restore_password.token,
24+
email: restore_password.email
25+
}
2426
}
2527
end
2628

@@ -34,7 +36,9 @@
3436
context 'not valid restore token' do
3537
let(:params) do
3638
{
37-
"token": '12345678'
39+
restore_password: {
40+
token: '12345678'
41+
}
3842
}
3943
end
4044

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
FactoryBot.define do
22
factory :reset_password, class: ApiSessionRecovering::ResetPassword do
3-
frontend_path Faker::Internet.url
4-
remote_ip Faker::Internet.ip_v4_address
5-
email Faker::Internet.email
6-
token SecureRandom.urlsafe_base64
7-
expire_at 1.day.from_now.utc
3+
frontend_path { Faker::Internet.url }
4+
remote_ip { Faker::Internet.ip_v4_address }
5+
email { Faker::Internet.email }
6+
token { SecureRandom.urlsafe_base64 }
7+
expire_at { 1.day.from_now.utc }
88
end
99
end

spec/factories/restore_password_factory.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
factory :restore_password, class: ApiSessionRecovering::RestorePassword do
33
user
44

5-
frontend_path Faker::Internet.url
6-
remote_ip Faker::Internet.ip_v4_address
7-
email Faker::Internet.email
8-
token SecureRandom.urlsafe_base64
9-
expire_at 1.day.from_now.utc
5+
frontend_path { Faker::Internet.url }
6+
remote_ip { Faker::Internet.ip_v4_address }
7+
email { Faker::Internet.email }
8+
token { SecureRandom.urlsafe_base64 }
9+
expire_at { 1.day.from_now.utc }
1010
end
1111
end

spec/factories/user_factory.rb

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
FactoryBot.define do
22
factory :user, class: ApiSessionRecovering::User do
3-
password Faker::Internet.password
4-
5-
email Faker::Internet.email
3+
password { Faker::Internet.password }
4+
email { Faker::Internet.email }
65
end
76
end

0 commit comments

Comments
 (0)