From 1c498eb49107faae853484ef1f33ad3861fc1a02 Mon Sep 17 00:00:00 2001 From: Sam Date: Mon, 24 Nov 2014 15:42:39 +1100 Subject: [PATCH] FEATURE: API endpoint for inviting an admin --- app/controllers/admin/users_controller.rb | 29 +++++++++++++++++++ config/routes.rb | 1 + .../admin/users_controller_spec.rb | 12 ++++++++ 3 files changed, 42 insertions(+) diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index bd191bbe488..c3208b369ec 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -288,6 +288,35 @@ class Admin::UsersController < Admin::AdminController render json: success_json end + def invite_admin + + email = params[:email] + unless user = User.find_by_email(email) + name = params[:name] if params[:name].present? + username = params[:username] if params[:username].present? + + user = User.new(email: email) + user.password = SecureRandom.hex + user.username = UserNameSuggester.suggest(username || name || email) + user.name = User.suggest_name(name || username || email) + end + + user.active = true + user.save! + user.grant_admin! + user.change_trust_level!(4) + user.email_tokens.update_all confirmed: true + + email_token = user.email_tokens.create(email: user.email) + Jobs.enqueue(:user_email, + type: :account_created, + user_id: user.id, + email_token: email_token.token) + + render json: success_json + + end + private def fetch_user diff --git a/config/routes.rb b/config/routes.rb index c417eeb8cdc..854b009101d 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -84,6 +84,7 @@ Discourse::Application.routes.draw do post "users/sync_sso" => "users#sync_sso", constraints: AdminConstraint.new + post "users/invite_admin" => "users#invite_admin", constraints: AdminConstraint.new resources :impersonate, constraints: AdminConstraint.new diff --git a/spec/controllers/admin/users_controller_spec.rb b/spec/controllers/admin/users_controller_spec.rb index d65359f22c0..1740be819fd 100644 --- a/spec/controllers/admin/users_controller_spec.rb +++ b/spec/controllers/admin/users_controller_spec.rb @@ -427,6 +427,18 @@ describe Admin::UsersController do end + context ".invite_admin" do + it 'should invite admin' do + xhr :post, :invite_admin, name: 'Bill', username: 'bill22', email: 'bill@bill.com' + response.should be_success + + u = User.find_by(email: 'bill@bill.com') + u.name.should == "Bill" + u.username.should == "bill22" + u.admin.should == true + end + end + end it 'can sync up sso' do