summaryrefslogtreecommitdiff
path: root/lib/api/users.rb
diff options
context:
space:
mode:
authorSimon Vocella <voxsim@gmail.com>2016-12-27 17:26:57 +0100
committerTiago Botelho <tiagonbotelho@hotmail.com>2017-02-28 22:15:39 +0000
commit81246e5649a8fb9e73369cbd117505a546d7e807 (patch)
treefa51d0a0d504f25bf1151db6f115e3c8a4ec8ad4 /lib/api/users.rb
parent4c4810b35b3b1729865640382b4c7e593f8b876d (diff)
downloadgitlab-ce-81246e5649a8fb9e73369cbd117505a546d7e807.tar.gz
manage personal_access_tokens through api
Diffstat (limited to 'lib/api/users.rb')
-rw-r--r--lib/api/users.rb64
1 files changed, 64 insertions, 0 deletions
diff --git a/lib/api/users.rb b/lib/api/users.rb
index 7bb4b76f830..450d678061e 100644
--- a/lib/api/users.rb
+++ b/lib/api/users.rb
@@ -362,6 +362,70 @@ module API
present paginate(events), with: Entities::Event
end
+
+ desc 'Retrieve personal access tokens. Available only for admins.'
+ params do
+ requires :user_id, type: Integer
+ optional :state, type: String, default: 'all', values: %w[all active inactive], desc: 'Filters (all|active|inactive) personal_access_tokens'
+ end
+ get ':user_id/personal_access_tokens' do
+ authenticated_as_admin!
+
+ user = User.find_by(id: params[:user_id])
+ not_found!('User') unless user
+
+ personal_access_tokens = user.personal_access_tokens
+
+ case params[:state]
+ when "active"
+ personal_access_tokens = personal_access_tokens.active
+ when "inactive"
+ personal_access_tokens = personal_access_tokens.inactive
+ end
+
+ present personal_access_tokens, with: Entities::PersonalAccessToken
+ end
+
+ desc 'Create a personal access token. Available only for admins.'
+ params do
+ requires :user_id, type: Integer, desc: 'The ID of the user'
+ requires :name, type: String, desc: 'The name of the personal access token'
+ optional :expires_at, type: Date, desc: 'The expiration date in the format YEAR-MONTH-DAY of the personal access token'
+ optional :scopes, type: Array, desc: 'The array of scopes of the personal access token'
+ end
+ post ':user_id/personal_access_tokens' do
+ authenticated_as_admin!
+
+ user = User.find_by(id: params[:user_id])
+ not_found!('User') unless user
+
+ personal_access_token = PersonalAccessToken.generate(declared_params(include_missing: false))
+
+ if personal_access_token.save
+ present personal_access_token, with: Entities::PersonalAccessToken
+ else
+ render_validation_error!(personal_access_token)
+ end
+ end
+
+ desc 'Revoke a personal access token. Available only for admins.'
+ params do
+ requires :user_id, type: Integer, desc: 'The ID of the user'
+ requires :personal_access_token_id, type: Integer, desc: 'The ID of the personal access token'
+ end
+ delete ':user_id/personal_access_tokens/:personal_access_token_id' do
+ authenticated_as_admin!
+
+ user = User.find_by(id: params[:user_id])
+ not_found!('User') unless user
+
+ personal_access_token = PersonalAccessToken.find_by(id: params[:personal_access_token_id])
+ not_found!('PersonalAccessToken') unless personal_access_token
+
+ personal_access_token.revoke!
+
+ present personal_access_token, with: Entities::PersonalAccessToken
+ end
end
resource :user do