114 lines
4.5 KiB
Ruby
114 lines
4.5 KiB
Ruby
# 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
|