Sha256: ed73f055d93333f08c60e63005a685efff3afae0c887dbdeb6b0f84106db2757
Contents?: true
Size: 893 Bytes
Versions: 5
Compression:
Stored size: 893 Bytes
Contents
# frozen_string_literal: true require "openssl" require "base64" require "json" module AnyCable module Streams class << self def signed(stream_name) ::Base64.urlsafe_encode64(::JSON.dump(stream_name)).then do |encoded| "#{encoded}--#{signature(encoded)}" end end def verified(signed_stream_name) encoded, sig = signed_stream_name.split("--") raise ArgumentError, "stream name has incorrect format" unless encoded return unless sig == signature(encoded) ::Base64.urlsafe_decode64(encoded).then do |decoded| ::JSON.parse(decoded) end end private def signature(val) key = AnyCable.config.streams_secret raise ArgumentError, "streams signing secret is missing" unless key ::OpenSSL::HMAC.hexdigest("SHA256", key, val) end end end end
Version data entries
5 entries across 5 versions & 1 rubygems