Commit 7a56075efac308a3bd08e022e56e96d41c4c05b5
1 parent
e86e8818
Exists in
master
and in
4 other branches
Some of the requested updates, rebase on master
Change-Id: I305266fe9acbbb5136adeeb52e7e4e1d6629a30a
Showing
4 changed files
with
38 additions
and
27 deletions
Show diff stats
app/models/user.rb
... | ... | @@ -190,6 +190,14 @@ class User < ActiveRecord::Base |
190 | 190 | def search query |
191 | 191 | where("name LIKE :query OR email LIKE :query OR username LIKE :query", query: "%#{query}%") |
192 | 192 | end |
193 | + | |
194 | + def by_username_or_id(name_or_id) | |
195 | + if (name_or_id.is_a?(Integer)) | |
196 | + User.find_by_id(name_or_id) | |
197 | + else | |
198 | + User.find_by_username(name_or_id) | |
199 | + end | |
200 | + end | |
193 | 201 | end |
194 | 202 | |
195 | 203 | # | ... | ... |
lib/api/helpers.rb
... | ... | @@ -12,25 +12,18 @@ module API |
12 | 12 | if (identifier && !(@current_user.id == identifier || @current_user.username == identifier)) |
13 | 13 | render_api_error!('403 Forbidden: Must be admin to use sudo', 403) unless @current_user.is_admin? |
14 | 14 | begin |
15 | - | |
16 | - if (identifier.is_a?(Integer)) | |
17 | - user = User.find_by_id(identifier) | |
18 | - else | |
19 | - user = User.find_by_username(identifier) | |
20 | - end | |
21 | - if user.nil? | |
22 | - not_found!("No user id or username for: #{identifier}") | |
23 | - end | |
24 | - @current_user = user | |
15 | + @current_user = User.by_username_or_id(identifier) | |
25 | 16 | rescue => ex |
26 | 17 | not_found!("No user id or username for: #{identifier}") |
27 | 18 | end |
19 | + not_found!("No user id or username for: #{identifier}") if current_user.nil? | |
28 | 20 | end |
29 | 21 | @current_user |
30 | 22 | end |
31 | 23 | |
32 | 24 | def sudo_identifier() |
33 | - identifier = params[SUDO_PARAM] == nil ? env[SUDO_HEADER] : params[SUDO_PARAM] | |
25 | + identifier ||= params[SUDO_PARAM] ||= env[SUDO_HEADER] | |
26 | + # Regex for integers | |
34 | 27 | if (!!(identifier =~ /^[0-9]+$/)) |
35 | 28 | identifier.to_i |
36 | 29 | else |
... | ... | @@ -129,10 +122,10 @@ module API |
129 | 122 | |
130 | 123 | def abilities |
131 | 124 | @abilities ||= begin |
132 | - abilities = Six.new | |
133 | - abilities << Ability | |
134 | - abilities | |
135 | - end | |
125 | + abilities = Six.new | |
126 | + abilities << Ability | |
127 | + abilities | |
128 | + end | |
136 | 129 | end |
137 | 130 | end |
138 | 131 | end | ... | ... |
spec/models/user_spec.rb
... | ... | @@ -208,4 +208,14 @@ describe User do |
208 | 208 | user.can_create_group.should == false |
209 | 209 | end |
210 | 210 | end |
211 | + | |
212 | + describe 'by_username_or_id' do | |
213 | + let(:user1){create(:user, username: 'foo')} | |
214 | + it "should get the correct user" do | |
215 | + User.by_username_or_id(user1.id).should == user1 | |
216 | + User.by_username_or_id('foo').should == user1 | |
217 | + User.by_username_or_id(-1).should be_nil | |
218 | + User.by_username_or_id('bar').should be_nil | |
219 | + end | |
220 | + end | |
211 | 221 | end | ... | ... |
spec/requests/api/api_helpers_spec.rb
1 | 1 | require 'spec_helper' |
2 | 2 | |
3 | -describe Gitlab::API do | |
4 | - include Gitlab::APIHelpers | |
3 | +describe API do | |
4 | + include API::APIHelpers | |
5 | 5 | include ApiHelpers |
6 | 6 | let(:user) { create(:user) } |
7 | 7 | let(:admin) { create(:admin) } |
... | ... | @@ -13,27 +13,27 @@ describe Gitlab::API do |
13 | 13 | def set_env(token_usr, identifier) |
14 | 14 | clear_env |
15 | 15 | clear_param |
16 | - env[Gitlab::APIHelpers::PRIVATE_TOKEN_HEADER] = token_usr.private_token | |
17 | - env[Gitlab::APIHelpers::SUDO_HEADER] = identifier | |
16 | + env[API::APIHelpers::PRIVATE_TOKEN_HEADER] = token_usr.private_token | |
17 | + env[API::APIHelpers::SUDO_HEADER] = identifier | |
18 | 18 | end |
19 | 19 | |
20 | 20 | |
21 | 21 | def set_param(token_usr, identifier) |
22 | 22 | clear_env |
23 | 23 | clear_param |
24 | - params[Gitlab::APIHelpers::PRIVATE_TOKEN_PARAM] = token_usr.private_token | |
25 | - params[Gitlab::APIHelpers::SUDO_PARAM] = identifier | |
24 | + params[API::APIHelpers::PRIVATE_TOKEN_PARAM] = token_usr.private_token | |
25 | + params[API::APIHelpers::SUDO_PARAM] = identifier | |
26 | 26 | end |
27 | 27 | |
28 | 28 | |
29 | 29 | def clear_env |
30 | - env.delete(Gitlab::APIHelpers::PRIVATE_TOKEN_HEADER) | |
31 | - env.delete(Gitlab::APIHelpers::SUDO_HEADER) | |
30 | + env.delete(API::APIHelpers::PRIVATE_TOKEN_HEADER) | |
31 | + env.delete(API::APIHelpers::SUDO_HEADER) | |
32 | 32 | end |
33 | 33 | |
34 | 34 | def clear_param |
35 | - params.delete(Gitlab::APIHelpers::PRIVATE_TOKEN_PARAM) | |
36 | - params.delete(Gitlab::APIHelpers::SUDO_PARAM) | |
35 | + params.delete(API::APIHelpers::PRIVATE_TOKEN_PARAM) | |
36 | + params.delete(API::APIHelpers::SUDO_PARAM) | |
37 | 37 | end |
38 | 38 | |
39 | 39 | def error!(message, status) |
... | ... | @@ -42,10 +42,10 @@ describe Gitlab::API do |
42 | 42 | |
43 | 43 | describe ".current_user" do |
44 | 44 | it "should leave user as is when sudo not specified" do |
45 | - env[Gitlab::APIHelpers::PRIVATE_TOKEN_HEADER] = user.private_token | |
45 | + env[API::APIHelpers::PRIVATE_TOKEN_HEADER] = user.private_token | |
46 | 46 | current_user.should == user |
47 | 47 | clear_env |
48 | - params[Gitlab::APIHelpers::PRIVATE_TOKEN_PARAM] = user.private_token | |
48 | + params[API::APIHelpers::PRIVATE_TOKEN_PARAM] = user.private_token | |
49 | 49 | current_user.should == user |
50 | 50 | end |
51 | 51 | ... | ... |