From 0ee6f0f6e009dd3750a87ba8980984569a8e1686 Mon Sep 17 00:00:00 2001 From: Michel Felipe de Oliveira Ferreira Date: Thu, 16 Jul 2015 16:36:40 -0300 Subject: [PATCH] Add new url request to activate a user in session end-point --- lib/noosfero/api/session.rb | 36 ++++++++++++++++++++++++++++++++++++ test/unit/api/session_test.rb | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 0 deletions(-) diff --git a/lib/noosfero/api/session.rb b/lib/noosfero/api/session.rb index c121985..9c901f1 100644 --- a/lib/noosfero/api/session.rb +++ b/lib/noosfero/api/session.rb @@ -57,6 +57,42 @@ module Noosfero render_api_error!(message, 400) end end + + params do + requires :activation_code, type: String, desc: _("Activation token") + end + + # Activate a user. + # + # Parameter: + # activation_code (required) - Activation token + # Example Request: + # PATCH /activate?activation_code=28259abd12cc6a64ef9399cf3286cb998b96aeaf + patch "/activate" do + user = User.find_by_activation_code(params[:activation_code]) + if user + unless user.environment.enabled?('admin_must_approve_new_users') + if user.activate + user.generate_private_token! + present user, :with => Entities::UserLogin + end + else + if user.create_moderate_task + user.activation_code = nil + user.save! + + # Waiting for admin moderate user registration + status 202 + body({ + :message => 'Waiting for admin moderate user registration' + }) + end + end + else + # Token not found in database + render_api_error!(_('Token is invalid'), 412) + end + end end end end diff --git a/test/unit/api/session_test.rb b/test/unit/api/session_test.rb index b55fd7e..9a2c2a6 100644 --- a/test/unit/api/session_test.rb +++ b/test/unit/api/session_test.rb @@ -54,5 +54,54 @@ class SessionTest < ActiveSupport::TestCase assert_equal "Serpro captcha error: getaddrinfo: Name or service not known", JSON.parse(last_response.body)["message"] end + # TODO: Add another test cases to check register situations + should 'activate a user' do + params = { + :login => "newuserapi", + :password => "newuserapi", + :password_confirmation => "newuserapi", + :email => "newuserapi@email.com" + } + user = User.new(params) + user.save! + + params = { activation_code: user.activation_code} + patch "/api/v1/activate?#{params.to_query}" + assert_equal 200, last_response.status + end + + should 'do not activate a user if admin must approve him' do + params = { + :login => "newuserapi", + :password => "newuserapi", + :password_confirmation => "newuserapi", + :email => "newuserapi@email.com", + :environment => Environment.default + } + user = User.new(params) + user.environment.enable('admin_must_approve_new_users') + user.save! + + params = { activation_code: user.activation_code} + patch "/api/v1/activate?#{params.to_query}" + assert_equal 202, last_response.status + assert_equal 'Waiting for admin moderate user registration', JSON.parse(last_response.body)["message"] + end + + should 'do not activate a user if the token is invalid' do + params = { + :login => "newuserapi", + :password => "newuserapi", + :password_confirmation => "newuserapi", + :email => "newuserapi@email.com", + :environment => Environment.default + } + user = User.new(params) + user.save! + + params = { activation_code: '70250abe20cc6a67ef9399cf3286cb998b96aeaf'} + patch "/api/v1/activate?#{params.to_query}" + assert_equal 412, last_response.status + end end -- libgit2 0.21.2