mumsnet_jwt 2.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/mumsnet_jwt.rb +80 -0
- metadata +57 -0
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA1:
         | 
| 3 | 
            +
              metadata.gz: 7bed91ac812b9e5990c5043d5bf29e54a4a0e027
         | 
| 4 | 
            +
              data.tar.gz: f8e683320979e9b972ff40167de215d5e18c58fd
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: 777525ba93a335af4a13c29bc07975c31b4c68ad2843d5a0eb25e6becbd75eb1bc8767918750b3da5ccd940f8e857b666d733d13038a05978fdb0cfb97a863bb
         | 
| 7 | 
            +
              data.tar.gz: cb4a175115256e9c8c23c80b9cbc405f00788064e1b769650bea79601e1f91099f5517df1306ee0ac12066123239f6257393e2c9d96706df3f41823c136286c4
         | 
    
        data/lib/mumsnet_jwt.rb
    ADDED
    
    | @@ -0,0 +1,80 @@ | |
| 1 | 
            +
            module MumsnetJWT
         | 
| 2 | 
            +
              class << self
         | 
| 3 | 
            +
                require 'jwt'
         | 
| 4 | 
            +
                require 'json'
         | 
| 5 | 
            +
                require 'base64'
         | 
| 6 | 
            +
                require 'logger'
         | 
| 7 | 
            +
                @logger = Logger.new(STDOUT)
         | 
| 8 | 
            +
                DEFAULT_EXP = Time.now.utc.to_i + 60 * 60 * 24
         | 
| 9 | 
            +
                def tokenify(extra_payload: {})
         | 
| 10 | 
            +
                  return false if env_defined?
         | 
| 11 | 
            +
                  payload = { client_id: ENV['JWT_CLIENT_ID'], iss: ENV['JWT_ISSUER'], exp: DEFAULT_EXP }.merge(extra_payload)
         | 
| 12 | 
            +
                  JWT.encode payload, jwt_secret, 'HS256' unless jwt_secret.nil?
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                def check_authorization_header(header)
         | 
| 16 | 
            +
                  return false if env_defined?
         | 
| 17 | 
            +
                  return false unless header.split(' ').first == 'Bearer'
         | 
| 18 | 
            +
                  token = header.split(' ').last
         | 
| 19 | 
            +
                  check_token(token)
         | 
| 20 | 
            +
                rescue StandardError => e
         | 
| 21 | 
            +
                  puts 'JWT ERROR: check_authorization_header'
         | 
| 22 | 
            +
                  puts "Header: #{header}"
         | 
| 23 | 
            +
                  puts e
         | 
| 24 | 
            +
                  puts 'END JWT ERROR'
         | 
| 25 | 
            +
                  false
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                def check_token(token)
         | 
| 29 | 
            +
                  return false if env_defined?
         | 
| 30 | 
            +
                  client_id = client_id_from_token(token)
         | 
| 31 | 
            +
                  if !client_id.nil?
         | 
| 32 | 
            +
                    decode_token(token: token, key: 'client_id') == client_id
         | 
| 33 | 
            +
                  else
         | 
| 34 | 
            +
                    false
         | 
| 35 | 
            +
                  end
         | 
| 36 | 
            +
                rescue StandardError => e
         | 
| 37 | 
            +
                  puts 'JWT ERROR: check_token'
         | 
| 38 | 
            +
                  puts "Token: #{token}"
         | 
| 39 | 
            +
                  puts e
         | 
| 40 | 
            +
                  puts 'END JWT ERROR'
         | 
| 41 | 
            +
                  false
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                def decode_token(token:, key: nil)
         | 
| 45 | 
            +
                  return nil if env_defined?
         | 
| 46 | 
            +
                  client_id = client_id_from_token(token)
         | 
| 47 | 
            +
                  decoded_token = JWT.decode(token, jwt_secret(client_id), true, algorithm: 'HS256') unless jwt_secret(client_id).nil?
         | 
| 48 | 
            +
                  if key
         | 
| 49 | 
            +
                    decoded_token[0][key]
         | 
| 50 | 
            +
                  else
         | 
| 51 | 
            +
                    decoded_token
         | 
| 52 | 
            +
                  end
         | 
| 53 | 
            +
                rescue StandardError· => e
         | 
| 54 | 
            +
                  puts 'JWT ERROR: decode_token'
         | 
| 55 | 
            +
                  puts "token: #{token}"
         | 
| 56 | 
            +
                  puts "key: #{key}"
         | 
| 57 | 
            +
                  puts e
         | 
| 58 | 
            +
                  puts 'END JWT ERROR'
         | 
| 59 | 
            +
                  nil
         | 
| 60 | 
            +
                end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                private
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                def env_defined?
         | 
| 65 | 
            +
                  ENV['JWT_CLIENT_ID'].nil? || ENV['JWT_SECRETS'].nil? || ENV['JWT_ISSUER'].nil?
         | 
| 66 | 
            +
                end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                def client_id_from_token(token)
         | 
| 69 | 
            +
                  JSON.parse(Base64.decode64(token.split('.')[1]))['client_id']
         | 
| 70 | 
            +
                end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                def jwt_secret(client_id = ENV['JWT_CLIENT_ID'])
         | 
| 73 | 
            +
                  jwt_secret = nil
         | 
| 74 | 
            +
                  JSON.parse(ENV['JWT_SECRETS']).each do |item|
         | 
| 75 | 
            +
                    jwt_secret = item['secret'] if item['client_id'] == client_id
         | 
| 76 | 
            +
                  end
         | 
| 77 | 
            +
                  jwt_secret
         | 
| 78 | 
            +
                end
         | 
| 79 | 
            +
              end
         | 
| 80 | 
            +
            end
         | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,57 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: mumsnet_jwt
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 2.1.2
         | 
| 5 | 
            +
            platform: ruby
         | 
| 6 | 
            +
            authors:
         | 
| 7 | 
            +
            - Murray Catto
         | 
| 8 | 
            +
            autorequire: 
         | 
| 9 | 
            +
            bindir: bin
         | 
| 10 | 
            +
            cert_chain: []
         | 
| 11 | 
            +
            date: 2018-07-11 00:00:00.000000000 Z
         | 
| 12 | 
            +
            dependencies:
         | 
| 13 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            +
              name: jwt
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - ">="
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: '0'
         | 
| 20 | 
            +
              type: :runtime
         | 
| 21 | 
            +
              prerelease: false
         | 
| 22 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            +
                requirements:
         | 
| 24 | 
            +
                - - ">="
         | 
| 25 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            +
                    version: '0'
         | 
| 27 | 
            +
            description: 
         | 
| 28 | 
            +
            email: 
         | 
| 29 | 
            +
            executables: []
         | 
| 30 | 
            +
            extensions: []
         | 
| 31 | 
            +
            extra_rdoc_files: []
         | 
| 32 | 
            +
            files:
         | 
| 33 | 
            +
            - lib/mumsnet_jwt.rb
         | 
| 34 | 
            +
            homepage: 
         | 
| 35 | 
            +
            licenses: []
         | 
| 36 | 
            +
            metadata: {}
         | 
| 37 | 
            +
            post_install_message: 
         | 
| 38 | 
            +
            rdoc_options: []
         | 
| 39 | 
            +
            require_paths:
         | 
| 40 | 
            +
            - lib
         | 
| 41 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 42 | 
            +
              requirements:
         | 
| 43 | 
            +
              - - ">="
         | 
| 44 | 
            +
                - !ruby/object:Gem::Version
         | 
| 45 | 
            +
                  version: '0'
         | 
| 46 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 47 | 
            +
              requirements:
         | 
| 48 | 
            +
              - - ">="
         | 
| 49 | 
            +
                - !ruby/object:Gem::Version
         | 
| 50 | 
            +
                  version: '0'
         | 
| 51 | 
            +
            requirements: []
         | 
| 52 | 
            +
            rubyforge_project: 
         | 
| 53 | 
            +
            rubygems_version: 2.5.2.3
         | 
| 54 | 
            +
            signing_key: 
         | 
| 55 | 
            +
            specification_version: 4
         | 
| 56 | 
            +
            summary: JSON web token lib
         | 
| 57 | 
            +
            test_files: []
         |