Sha256: 61338bf686df2d94ff0410781ae2c71be24c43ce1528fae05a9fdadb7d63c7aa
Contents?: true
Size: 1.45 KB
Versions: 1
Compression:
Stored size: 1.45 KB
Contents
require "ostruct" require "json" require "faraday" require "redis" require_relative "authz_jurnal_client/version" module AuthzJurnalClient class Error < StandardError; end class UserRoles class << self attr_accessor :redis, :domain, :authorization, :expiry def config(opts = {}) @headers = {"Authorization" => "#{opts[:authorization]}"} @domain = opts[:domain] || 'http://localhost:3000' redis_path = opts[:redis] || 'redis://localhost:6379' @redis = Redis.new(url: redis_path) @expiry = opts[:expiry] || 3600 * 5 end def call(id, cid) if @redis cached = @redis.get(make_key(id, cid)) return get_roles(cached) if cached end response = backend_request(id, cid) return unless response.success? @redis&.setex(make_key(id, cid), @expiry, response.body) get_roles(response.body) rescue Redis::CannotConnectError response = backend_request(id, cid) get_roles(response.body) end def backend_request(id, cid) conn = Faraday.new("#{@domain}/api/v1/users/#{id}") do |f| f.adapter :net_http end conn.get('roles', { company_id: cid }, @headers) end def make_key(id, cid) "manage_roles:#{id}-#{cid}" end def get_roles(j) res = JSON.parse(j) res['data']['roles'] if res['data'] && res['data']['roles'] end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
authz_jurnal_client-0.0.4 | lib/authz_jurnal_client.rb |