diff options
| author | mo khan <mo@mokhan.ca> | 2025-03-05 11:43:07 -0700 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2025-03-05 11:43:07 -0700 |
| commit | 20e152182f7137ae2c7f512d0cab1b3c846a4677 (patch) | |
| tree | 9c7a0ca1e52abc1d9fd2a77ec0c3b3b6166c4dd0 /bin/rest-api | |
| parent | 502228f90f6e3e7b03d2c3165a9b8b8f00e29dce (diff) | |
refactor: extract scheme and provide the appropriate nameid for saml transaction
Diffstat (limited to 'bin/rest-api')
| -rwxr-xr-x | bin/rest-api | 106 |
1 files changed, 0 insertions, 106 deletions
diff --git a/bin/rest-api b/bin/rest-api deleted file mode 100755 index ca0a891..0000000 --- a/bin/rest-api +++ /dev/null @@ -1,106 +0,0 @@ -#!/usr/bin/env ruby - -require 'bundler/inline' - -gemfile do - source 'https://rubygems.org' - - gem "erb", "~> 4.0" - gem "json", "~> 2.0" - gem "rack", "~> 3.0" - gem "rackup", "~> 2.0" - gem "securerandom", "~> 0.1" - gem "webrick", "~> 1.0" -end - -class Project - class << self - def all - @projects ||= [] - end - - def create!(attributes) - new({ id: SecureRandom.uuid }.merge(attributes)).tap do |item| - all << item - end - end - end - - def initialize(attributes = {}) - @attributes = attributes - end - - def to_h - @attributes - end -end - -class RESTAPI - def initialize - @storage = {} - end - - def call(env) - request = Rack::Request.new(env) - path = env['PATH_INFO'] - case env['REQUEST_METHOD'] - when 'GET' - case path - when '/projects.json' - return json_ok(Project.all.map(&:to_h)) - else - return json_not_found - end - when 'POST' - case path - when "/projects" - if authorized?(request, :create_project) - return json_created(Project.create!(JSON.parse(request.body.read, symbolize_names: true))) - else - return json_unauthorized(:create_project) - end - else - return json_not_found - end - end - json_not_found - end - - private - - def authorized?(request, permission) - # TODO:: Check the JWT for the appropriate claim - # Connect to the Authz RPC endpoint Ability.allowed?(subject, permission, resource) - true - end - - def json_not_found - [404, { 'X-Backend-Server' => 'REST', 'Content-Type' => 'application/json' }, []] - end - - def json_ok(body) - [200, { 'Content-Type' => 'application/json' }, [JSON.pretty_generate(body)]] - end - - def json_created(body) - [201, { 'Content-Type' => 'application/json' }, [JSON.pretty_generate(body.to_h)]] - end - - def json_unauthorized(permission) - [401, { 'Content-Type' => 'application/json' }, [JSON.pretty_generate({ - error: { - code: 401, - message: "`#{permission}` is required", - } - })]] - end -end - -if __FILE__ == $0 - app = Rack::Builder.new do - use Rack::Reloader - run RESTAPI.new - end.to_app - - Rackup::Server.start(app: app, Port: ENV.fetch('PORT', 8284).to_i) -end |
