77 lines
2.6 KiB
Ruby
77 lines
2.6 KiB
Ruby
module Admin
|
|
class ApiKeysController < BaseController
|
|
def index
|
|
@api_keys = ApiKey.order(created_at: :desc)
|
|
end
|
|
|
|
def new
|
|
@api_key = ApiKey.new
|
|
end
|
|
|
|
def create
|
|
# Build permissions hash
|
|
permissions = {}
|
|
permissions["send_sms"] = params.dig(:api_key, :send_sms) == "1"
|
|
permissions["receive_sms"] = params.dig(:api_key, :receive_sms) == "1"
|
|
permissions["manage_gateways"] = params.dig(:api_key, :manage_gateways) == "1"
|
|
permissions["manage_otp"] = params.dig(:api_key, :manage_otp) == "1"
|
|
|
|
# Parse expiration date if provided
|
|
expires_at = if params.dig(:api_key, :expires_at).present?
|
|
Time.parse(params[:api_key][:expires_at])
|
|
else
|
|
nil
|
|
end
|
|
|
|
# Generate API key
|
|
result = ApiKey.generate!(
|
|
name: params[:api_key][:name],
|
|
permissions: permissions,
|
|
expires_at: expires_at
|
|
)
|
|
|
|
# Store in session to pass to show action
|
|
session[:new_api_key_id] = result[:api_key].id
|
|
session[:new_api_raw_key] = result[:raw_key]
|
|
|
|
redirect_to admin_api_key_path(result[:api_key])
|
|
rescue StandardError => e
|
|
Rails.logger.error "API Key creation failed: #{e.message}\n#{e.backtrace.join("\n")}"
|
|
flash.now[:alert] = "Error creating API key: #{e.message}"
|
|
@api_key = ApiKey.new(name: params.dig(:api_key, :name))
|
|
render :new, status: :unprocessable_entity
|
|
end
|
|
|
|
def show
|
|
@api_key = ApiKey.find(params[:id])
|
|
|
|
# Check if this is a newly created key (from session)
|
|
if session[:new_api_key_id] == @api_key.id && session[:new_api_raw_key].present?
|
|
@raw_key = session[:new_api_raw_key]
|
|
# Clear session data after retrieving
|
|
session.delete(:new_api_key_id)
|
|
session.delete(:new_api_raw_key)
|
|
else
|
|
# This is an existing key being viewed (shouldn't normally happen)
|
|
redirect_to admin_api_keys_path, alert: "Cannot view API key details after creation"
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
@api_key = ApiKey.find(params[:id])
|
|
@api_key.revoke!
|
|
redirect_to admin_api_keys_path, notice: "API key revoked successfully"
|
|
rescue => e
|
|
redirect_to admin_api_keys_path, alert: "Error revoking API key: #{e.message}"
|
|
end
|
|
|
|
def toggle
|
|
@api_key = ApiKey.find(params[:id])
|
|
@api_key.update!(active: !@api_key.active)
|
|
redirect_to admin_api_keys_path, notice: "API key #{@api_key.active? ? 'activated' : 'deactivated'}"
|
|
rescue => e
|
|
redirect_to admin_api_keys_path, alert: "Error updating API key: #{e.message}"
|
|
end
|
|
end
|
|
end
|