106 lines
3.0 KiB
Ruby
106 lines
3.0 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module APIHelpers
|
|
extend Memoist
|
|
|
|
def json_body
|
|
JSON.parse(response.body, symbolize_names: true)
|
|
end
|
|
|
|
def expect_status_to_eq(status)
|
|
expect_status.to eq status
|
|
end
|
|
|
|
def expect_status
|
|
expect(response.status)
|
|
end
|
|
|
|
def expect_body
|
|
expect(json_body)
|
|
end
|
|
|
|
def post_json(destination, body, headers = {})
|
|
post destination,
|
|
params: build_body(body),
|
|
headers: headers.reverse_merge('Content-Type' => 'application/json')
|
|
end
|
|
|
|
def delete_json(destination, body, headers = {})
|
|
delete destination,
|
|
params: build_body(body),
|
|
headers: headers.reverse_merge('Content-Type' => 'application/json')
|
|
end
|
|
|
|
def put_json(destination, body, headers = {})
|
|
put destination,
|
|
params: build_body(body),
|
|
headers: headers.reverse_merge('Content-Type' => 'application/json')
|
|
end
|
|
|
|
def build_body(body)
|
|
body.is_a?(String) ? body : body.to_json
|
|
end
|
|
|
|
def create_label_with_level(user, level, scope: 'private')
|
|
create(:label, user: user,
|
|
key: level.key,
|
|
value: level.value,
|
|
scope: scope)
|
|
end
|
|
|
|
def set_level(user, level)
|
|
raise "level doesn't exist" if Level.last.id < level
|
|
levels = Level.where(id: 1..level)
|
|
levels.each do |lvl|
|
|
Label.find_or_create_by(user: user, key: lvl.key, value: lvl.value, scope: 'private')
|
|
end
|
|
end
|
|
|
|
def applogic_signed_jwt(payload)
|
|
multisig_jwt(payload, management_api_v2_keychain, :james, management_api_v2_algorithms)
|
|
end
|
|
|
|
def multisig_jwt(payload, keychain, signers, algorithms)
|
|
JWT::Multisig.generate_jwt(payload, keychain.slice(*signers), algorithms)
|
|
end
|
|
|
|
def multisig_jwt_management_api_v2(payload, *signers)
|
|
multisig_jwt(payload, management_api_v2_keychain, signers, management_api_v2_algorithms)
|
|
end
|
|
|
|
def management_api_v2_keychain
|
|
require 'openssl'
|
|
{ james: OpenSSL::PKey::RSA.generate(2048),
|
|
john: OpenSSL::PKey::RSA.generate(2048),
|
|
david: OpenSSL::PKey::RSA.generate(2048),
|
|
robert: OpenSSL::PKey::RSA.generate(2048),
|
|
alex: OpenSSL::PKey::RSA.generate(2048),
|
|
jeff: OpenSSL::PKey::RSA.generate(2048) }
|
|
end
|
|
memoize :management_api_v2_keychain
|
|
|
|
def management_api_v2_algorithms
|
|
management_api_v2_keychain.each_with_object({}) { |(k, _v), memo| memo[k] = 'RS256' }
|
|
end
|
|
memoize :management_api_v2_algorithms
|
|
|
|
def management_api_v2_security_configuration
|
|
API::V2::Management::JWTAuthenticationMiddleware.security_configuration
|
|
end
|
|
|
|
def defaults_for_management_api_v2_security_configuration!
|
|
config = { jwt: {} }
|
|
config[:keychain] = management_api_v2_keychain.each_with_object({}) do |(signer, key), memo|
|
|
memo[signer] = { algorithm: management_api_v2_algorithms.fetch(signer), value: key.public_key }
|
|
end
|
|
API::V2::Management::JWTAuthenticationMiddleware.security_configuration = config
|
|
end
|
|
|
|
def codec
|
|
@_codec ||= Barong::JWT.new(key: Barong::App.config.keystore.private_key)
|
|
end
|
|
|
|
end
|
|
|
|
RSpec.configure { |config| config.include APIHelpers }
|