Initial commit
This commit is contained in:
113
app/api/v2/management/service_accounts.rb
Normal file
113
app/api/v2/management/service_accounts.rb
Normal file
@@ -0,0 +1,113 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module API::V2
|
||||
module Management
|
||||
# ServiceAccounts server-to-server API
|
||||
class ServiceAccounts < Grape::API
|
||||
helpers ::API::V2::NamedParams
|
||||
|
||||
desc 'ServiceAccounts related routes'
|
||||
resource :service_accounts do
|
||||
|
||||
desc 'Get specific service_account information' do
|
||||
@settings[:scope] = :read_service_accounts
|
||||
success API::V2::Entities::ServiceAccounts
|
||||
end
|
||||
params do
|
||||
optional :uid, type: String, allow_blank: false, desc: 'service_account uid'
|
||||
optional :email, type: String, allow_blank: false, desc: 'service_account email'
|
||||
exactly_one_of :uid, :email
|
||||
end
|
||||
post '/get' do
|
||||
declared_params = declared(params, include_missing: false)
|
||||
|
||||
service_acc = ServiceAccount.find_by!(declared_params)
|
||||
error!('Service account doesnt exist', 422) unless service_acc
|
||||
|
||||
present service_acc, with: API::V2::Entities::ServiceAccounts
|
||||
status 200
|
||||
end
|
||||
|
||||
desc 'Get service_accounts as a paginated collection' do
|
||||
@settings[:scope] = :read_service_accounts
|
||||
success API::V2::Entities::ServiceAccounts
|
||||
end
|
||||
params do
|
||||
use :pagination_filters
|
||||
optional :owner_uid, type: String, allow_blank: false, desc: 'owner uid'
|
||||
optional :owner_email, type: String, allow_blank: false, desc: 'owner email'
|
||||
end
|
||||
post '/list' do
|
||||
owner = User.find_by(uid: params[:owner_uid]) || User.find_by(email: params[:owner_email]) if params[:owner_uid] || params[:owner_email]
|
||||
service_accs = owner ? owner.service_accounts : ServiceAccount.all
|
||||
|
||||
service_accs.tap { |q| present paginate(q), with: API::V2::Entities::ServiceAccounts }
|
||||
status 200
|
||||
end
|
||||
|
||||
desc 'Create service_account' do
|
||||
@settings[:scope] = :write_service_accounts
|
||||
success API::V2::Entities::ServiceAccounts
|
||||
end
|
||||
params do
|
||||
requires :service_account_role, type: String, allow_blank: false, desc: 'service_account role'
|
||||
optional :owner_uid, type: String, allow_blank: false, desc: 'owner uid'
|
||||
optional :service_account_uid, type: String, allow_blank: false, desc: 'service_account uid'
|
||||
optional :service_account_email, type: String, allow_blank: false, desc: 'service_account email'
|
||||
end
|
||||
|
||||
post '/create' do
|
||||
owner = User.find_by(uid: params[:owner_uid])
|
||||
error!('User doesnt exist', 422) unless owner
|
||||
|
||||
s_params = { email: params[:service_account_email], uid: params[:service_account_uid], role: params[:service_account_role] }.compact
|
||||
service_acc = ServiceAccount.new(s_params.merge(user: owner))
|
||||
error!(service_acc.errors.full_messages, 422) unless service_acc.save
|
||||
|
||||
present service_acc, with: API::V2::Entities::ServiceAccounts
|
||||
status 201
|
||||
end
|
||||
|
||||
desc 'Update service_account' do
|
||||
@settings[:scope] = :write_service_accounts
|
||||
success API::V2::Entities::ServiceAccounts
|
||||
end
|
||||
params do
|
||||
requires :uid, type: String, allow_blank: false, desc: 'service_account uid'
|
||||
optional :owner_uid, type: String, allow_blank: false, desc: 'service_account owner uid'
|
||||
end
|
||||
post '/update' do
|
||||
service_acc = ServiceAccount.find_by(uid: params[:uid])
|
||||
error!('Service account doesnt exist', 422) unless service_acc
|
||||
|
||||
owner = User.find_by(uid: params[:owner_uid])
|
||||
s_params = { owner_id: owner&.id }.compact
|
||||
code_error!(service_acc.errors.details, 422) unless service_acc.update(s_params)
|
||||
|
||||
present service_acc, with: API::V2::Entities::ServiceAccounts
|
||||
end
|
||||
|
||||
desc 'Delete specific service_account' do
|
||||
@settings[:scope] = :write_service_accounts
|
||||
success API::V2::Entities::ServiceAccounts
|
||||
end
|
||||
params do
|
||||
requires :uid, type: String, allow_blank: false, desc: 'service_account uid'
|
||||
end
|
||||
post '/delete' do
|
||||
declared_params = declared(params, include_missing: false)
|
||||
|
||||
service_acc = ServiceAccount.find_by!(declared_params)
|
||||
error!('Service account doesnt exist', 422) unless service_acc
|
||||
|
||||
unless service_acc.update(state: 'disabled')
|
||||
code_error!(service_acc.errors.details, 422)
|
||||
end
|
||||
|
||||
present service_acc, with: API::V2::Entities::ServiceAccounts
|
||||
status 200
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user