# frozen_string_literal: true require 'json' require 'request_store' require 'active_support/core_ext/numeric/time' require 'wso2_toolbox/token_manager/adapters/lock_file' module Wso2Toolbox module TokenManager module Adapters module LocalFileAdapter class << self include LockFile TOKEN_DELAY = 5.minutes def generate_token new_token unless active_token? store_token(read(:token_for_job)) end def read(key) with_free_localstorage do |file| local_storage(file.read) do |store| return store.try(:[], key.to_s) end end end def write(key, value) with_free_localstorage do |file| local_storage(file.read) { |store| store.merge!(key => value) } end end private def new_token token_params = Wso2Toolbox::TokenManager::ApiManagerService.create_token write(:token_time_for_job, Time.now + token_params[:expires_in].to_i.seconds) write(:token_for_job, "#{token_params[:token_type]} #{token_params[:access_token]}") end def store_token(token) RequestStore.store[:token] = token end def active_token? return false unless read(:token_time_for_job) Time.parse(read(:token_time_for_job)) - TOKEN_DELAY > Time.now end def local_storage(file) parsed_stored = file == '' ? {} : JSON.parse(file) yield(parsed_stored) File.open(FILE_PATH, 'w+') do |f| f.write(parsed_stored.to_json) f.rewind end end end end end end end