Skip to content

Commit a38d633

Browse files
committed
Add enpoint for getting user details by email
1 parent 9f486e5 commit a38d633

4 files changed

Lines changed: 67 additions & 9 deletions

File tree

app/controllers/api/v8/apidocs_controller.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,13 @@ class ApidocsController < ActionController::Base
6262
key :required, true
6363
key :type, :integer
6464
end
65+
parameter :path_user_email do
66+
key :name, :user_email
67+
key :in, :path
68+
key :description, "User's email"
69+
key :required, true
70+
key :type, :string
71+
end
6572
parameter :path_exercise_id do
6673
key :name, :exercise_id
6774
key :in, :path

app/controllers/api/v8/users_controller.rb

Lines changed: 57 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,32 @@ class UsersController < Api::V8::BaseController
7676
end
7777
end
7878

79+
swagger_path '/api/v8/users/get_user_with_email?email={email}' do
80+
operation :get do
81+
key :description, "Returns the user's id as upstream_id, user's courses.mooc.fi-id as id, email, first name and last name by user email"
82+
key :operationId, 'getUserInformationByEmail'
83+
key :produces, ['application/json']
84+
key :tags, ['user']
85+
parameter '$ref': '#/parameters/user_email'
86+
response 403, '$ref': '#/responses/error'
87+
response 404, '$ref': '#/responses/error'
88+
response 200 do
89+
key :description, "User's courses.mooc.fi-id as id, email, first name, last name and id as upstream_id as json"
90+
key :content, 'application/json'
91+
schema do
92+
key :title, :user
93+
key :required, [:user]
94+
key :type, :object
95+
property :id, type: :string, description: "User's courses.mooc.fi user id", example: 'ABCD1234-5678-EFGH-IJ90-ABC123DEF456'
96+
property :email, type: :string, description: 'User email', example: 'user@example.com'
97+
property :first_name, type: :string, description: 'User first name', example: 'John'
98+
property :last_name, type: :string, description: 'User last name', example: 'Doe'
99+
property :upstream_id, type: :integer, description: "User's user id in TMC database", example: 123
100+
end
101+
end
102+
end
103+
end
104+
79105
skip_authorization_check only: %i[set_password_managed_by_courses_mooc_fi]
80106

81107
def show
@@ -125,19 +151,13 @@ def create
125151
set_extra_data
126152

127153
if BannedEmail.banned?(@user.email)
128-
return render json: {
129-
success: true,
130-
message: 'User created.'
131-
}
154+
return render json: build_success_response(params[:include_id])
132155
end
133156

134157
if @user.errors.empty? && @user.save
135158
# TODO: Whitelist origins
136159
UserMailer.email_confirmation(@user, params[:origin], params[:language]).deliver_now
137-
render json: {
138-
success: true,
139-
message: 'User created.'
140-
}
160+
render json: build_success_response(params[:include_id])
141161
else
142162
errors = @user.errors
143163
errors[:username] = errors.delete(:login) if errors.key?(:login)
@@ -191,6 +211,24 @@ def set_password_managed_by_courses_mooc_fi
191211
}, status: :bad_request
192212
end
193213

214+
def get_user_with_email
215+
unauthorize_guest! if current_user.guest?
216+
217+
user = User.find_by!(email: params[:email])
218+
logger.info user
219+
authorize! :read, user
220+
221+
name = UserFieldValue.where(user_id: user.id, field_name: ['first_name', 'last_name']).pluck(:field_name, :value).to_h
222+
223+
render json: {
224+
id: user.courses_mooc_fi_user_id,
225+
email: user.email,
226+
first_name: name['first_name'],
227+
last_name: name['last_name'],
228+
upstream_id: user.id,
229+
}
230+
end
231+
194232
private
195233
def set_email
196234
user_params = params[:user]
@@ -275,6 +313,17 @@ def set_extra_data(eager_save = false)
275313
datum.save! if eager_save
276314
end
277315
end
316+
317+
def build_success_response(include_id = false)
318+
response = {
319+
success: true,
320+
message: 'User created.',
321+
}
322+
if include_id
323+
response[:id] = @user.id
324+
end
325+
response
326+
end
278327
end
279328
end
280329
end

app/models/user.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,8 @@ def authenticate_via_courses_mooc_fi(courses_mooc_fi_user_id, submitted_password
158158
auth_url,
159159
{
160160
user_id: courses_mooc_fi_user_id,
161-
password: submitted_password }.to_json,
161+
password: submitted_password,
162+
}.to_json,
162163
{
163164
content_type: :json,
164165
accept: :json,

config/routes.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
resources :assistantships, module: :users, only: :index
6161
resources :teacherships, module: :users, only: :index
6262
post :set_password_managed_by_courses_mooc_fi, on: :member
63+
get :get_user_with_email, on: :collection
6364
end
6465

6566
resources :user_app_datum, only: [:index]

0 commit comments

Comments
 (0)