flimper_poncho 0.1.0 → 0.1.1
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 +4 -4
- data/Gemfile.lock +3 -18
- data/README.md +14 -2
- data/flimper_poncho.gemspec +1 -1
- data/lib/flimper_poncho/jwts/issuers/for_api_clients.rb +20 -0
- data/lib/flimper_poncho/jwts/issuers/for_users.rb +20 -0
- data/lib/flimper_poncho/jwts/issuers/template.rb +30 -0
- data/lib/flimper_poncho/permissions/checkers/for_api_clients.rb +20 -0
- data/lib/flimper_poncho/permissions/checkers/for_users.rb +20 -0
- data/lib/flimper_poncho/permissions/checkers/template.rb +31 -0
- data/lib/flimper_poncho/version.rb +1 -1
- data/lib/flimper_poncho.rb +4 -1
- metadata +15 -11
- data/lib/flimper_poncho/entities/user_session.rb +0 -26
- data/lib/flimper_poncho/user_session/create.rb +0 -39
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 7fc01415394547ff040e49b1a262b2fc437dfb5176fc941e066b2a0a2328a050
         | 
| 4 | 
            +
              data.tar.gz: 8fb8ee3817ad0e76afb7b0b374da4ccfb37fe8cbbaba867d9d019e711ac2bd0f
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 88f9c8adae9140491fea28c79cd41d52e7ef48d361ca2e916b0469548c451898f3f2e78ae3fdea54715d6eedc5d1b464b5a37bd4f7cb155af47f0f3cbbd458ed
         | 
| 7 | 
            +
              data.tar.gz: 2757b8e1044c7ab2f752e101cd58f8cad1fff4167d9fe6d7afcc2f3b80e5f9311f4a65a667b81b708c641997b671c0203aa710491652c18d077063cfbf80ace1
         | 
    
        data/Gemfile.lock
    CHANGED
    
    | @@ -1,39 +1,25 @@ | |
| 1 1 | 
             
            PATH
         | 
| 2 2 | 
             
              remote: .
         | 
| 3 3 | 
             
              specs:
         | 
| 4 | 
            -
                flimper_poncho (0.1. | 
| 5 | 
            -
                  active_interaction (~> 3.7)
         | 
| 4 | 
            +
                flimper_poncho (0.1.1)
         | 
| 6 5 | 
             
                  faraday (~> 0.15.4)
         | 
| 7 6 | 
             
                  jwt (~> 2.1)
         | 
| 8 7 |  | 
| 9 8 | 
             
            GEM
         | 
| 10 9 | 
             
              remote: https://rubygems.org/
         | 
| 11 10 | 
             
              specs:
         | 
| 12 | 
            -
                active_interaction (3.7.1)
         | 
| 13 | 
            -
                  activemodel (>= 4, < 7)
         | 
| 14 | 
            -
                activemodel (5.2.3)
         | 
| 15 | 
            -
                  activesupport (= 5.2.3)
         | 
| 16 | 
            -
                activesupport (5.2.3)
         | 
| 17 | 
            -
                  concurrent-ruby (~> 1.0, >= 1.0.2)
         | 
| 18 | 
            -
                  i18n (>= 0.7, < 2)
         | 
| 19 | 
            -
                  minitest (~> 5.1)
         | 
| 20 | 
            -
                  tzinfo (~> 1.1)
         | 
| 21 11 | 
             
                addressable (2.6.0)
         | 
| 22 12 | 
             
                  public_suffix (>= 2.0.2, < 4.0)
         | 
| 23 13 | 
             
                ast (2.4.0)
         | 
| 24 14 | 
             
                byebug (11.0.1)
         | 
| 25 | 
            -
                concurrent-ruby (1.1.5)
         | 
| 26 15 | 
             
                crack (0.4.3)
         | 
| 27 16 | 
             
                  safe_yaml (~> 1.0.0)
         | 
| 28 17 | 
             
                diff-lcs (1.3)
         | 
| 29 18 | 
             
                faraday (0.15.4)
         | 
| 30 19 | 
             
                  multipart-post (>= 1.2, < 3)
         | 
| 31 20 | 
             
                hashdiff (0.3.8)
         | 
| 32 | 
            -
                i18n (1.6.0)
         | 
| 33 | 
            -
                  concurrent-ruby (~> 1.0)
         | 
| 34 21 | 
             
                jaro_winkler (1.5.2)
         | 
| 35 22 | 
             
                jwt (2.1.0)
         | 
| 36 | 
            -
                minitest (5.11.3)
         | 
| 37 23 | 
             
                multipart-post (2.0.0)
         | 
| 38 24 | 
             
                parallel (1.17.0)
         | 
| 39 25 | 
             
                parser (2.6.2.0)
         | 
| @@ -65,10 +51,8 @@ GEM | |
| 65 51 | 
             
                  unicode-display_width (>= 1.4.0, < 1.6)
         | 
| 66 52 | 
             
                ruby-progressbar (1.10.0)
         | 
| 67 53 | 
             
                safe_yaml (1.0.5)
         | 
| 68 | 
            -
                thread_safe (0.3.6)
         | 
| 69 | 
            -
                tzinfo (1.2.5)
         | 
| 70 | 
            -
                  thread_safe (~> 0.1)
         | 
| 71 54 | 
             
                unicode-display_width (1.5.0)
         | 
| 55 | 
            +
                vcr (4.0.0)
         | 
| 72 56 | 
             
                webmock (3.5.1)
         | 
| 73 57 | 
             
                  addressable (>= 2.3.6)
         | 
| 74 58 | 
             
                  crack (>= 0.3.2)
         | 
| @@ -84,6 +68,7 @@ DEPENDENCIES | |
| 84 68 | 
             
              rake (~> 12.3)
         | 
| 85 69 | 
             
              rspec (~> 3.8)
         | 
| 86 70 | 
             
              rubocop (~> 0.66.0)
         | 
| 71 | 
            +
              vcr (~> 4.0)
         | 
| 87 72 | 
             
              webmock (~> 3.5.1)
         | 
| 88 73 |  | 
| 89 74 | 
             
            BUNDLED WITH
         | 
    
        data/README.md
    CHANGED
    
    | @@ -28,9 +28,21 @@ Or install it yourself as: | |
| 28 28 |  | 
| 29 29 | 
             
            ## Usage
         | 
| 30 30 |  | 
| 31 | 
            -
            -  | 
| 31 | 
            +
            - Issue an ApiClient jwt:
         | 
| 32 32 |  | 
| 33 | 
            -
              ` | 
| 33 | 
            +
              `Jwts::Issuers::ForApiClients.new(name: 'FLIMPER-BACK', authorization_token: 'FLIMPER-BACK-AUTHORIZATION-TOKEN').issue!`
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            - Issue a User jwt:
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              `Jwts::Issuers::ForUsers.new(email: 'test@test.com', password: 'password').issue!`
         | 
| 38 | 
            +
             | 
| 39 | 
            +
            - Check ApiClient permission:
         | 
| 40 | 
            +
             | 
| 41 | 
            +
              `Permissions::Checkers::ForApiClients.new(jwt_token: 'valid_jwt', name: 'FLIMPER-BACK', resource_code: 'TWITTER_API_BACKEND', level: 'READ').can_perform_action?`
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            - Check User permission:
         | 
| 44 | 
            +
             | 
| 45 | 
            +
              `Permissions::Checkers::ForUsers.new(jwt_token: 'valid_jwt', email: 'email-1@gmail.com', resource_code: 'application-1', level: 'READ').can_perform_action?`
         | 
| 34 46 |  | 
| 35 47 | 
             
            ## Development
         | 
| 36 48 |  | 
    
        data/flimper_poncho.gemspec
    CHANGED
    
    | @@ -25,9 +25,9 @@ Gem::Specification.new do |spec| | |
| 25 25 | 
             
              spec.add_development_dependency 'rake', '~> 12.3'
         | 
| 26 26 | 
             
              spec.add_development_dependency 'rspec', '~> 3.8'
         | 
| 27 27 | 
             
              spec.add_development_dependency 'rubocop', '~> 0.66.0'
         | 
| 28 | 
            +
              spec.add_development_dependency 'vcr', '~> 4.0'
         | 
| 28 29 | 
             
              spec.add_development_dependency 'webmock', '~> 3.5.1'
         | 
| 29 30 |  | 
| 30 | 
            -
              spec.add_dependency 'active_interaction', '~> 3.7'
         | 
| 31 31 | 
             
              spec.add_dependency 'faraday', '~> 0.15.4'
         | 
| 32 32 | 
             
              spec.add_dependency 'jwt', '~> 2.1'
         | 
| 33 33 | 
             
            end
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            require 'flimper_poncho/jwts/issuers/template'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Jwts
         | 
| 4 | 
            +
              module Issuers
         | 
| 5 | 
            +
                class ForApiClients < Jwts::Issuers::Template
         | 
| 6 | 
            +
                  def initialize(name:, authorization_token:)
         | 
| 7 | 
            +
                    @name = name
         | 
| 8 | 
            +
                    @authorization_token = authorization_token
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  def poncho_api_endpoint
         | 
| 12 | 
            +
                    "#{ENV.fetch('PONCHO_API_URL')}/api_clients/jwt_tokens.json"
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  def security_data
         | 
| 16 | 
            +
                    { name: @name, authorization_token: @authorization_token }.to_json
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            require 'flimper_poncho/jwts/issuers/template'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Jwts
         | 
| 4 | 
            +
              module Issuers
         | 
| 5 | 
            +
                class ForUsers < Jwts::Issuers::Template
         | 
| 6 | 
            +
                  def initialize(email:, password:)
         | 
| 7 | 
            +
                    @email = email
         | 
| 8 | 
            +
                    @password = password
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  def poncho_api_endpoint
         | 
| 12 | 
            +
                    "#{ENV.fetch('PONCHO_API_URL')}/users/jwt_tokens.json"
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  def security_data
         | 
| 16 | 
            +
                    { email: @email, password: @password }.to_json
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
| @@ -0,0 +1,30 @@ | |
| 1 | 
            +
            require 'faraday'
         | 
| 2 | 
            +
            require 'json'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Jwts
         | 
| 5 | 
            +
              module Issuers
         | 
| 6 | 
            +
                class Template
         | 
| 7 | 
            +
                  def issue!
         | 
| 8 | 
            +
                    poncho_response = Faraday.new.post do |request|
         | 
| 9 | 
            +
                      request.url(poncho_api_endpoint)
         | 
| 10 | 
            +
                      request.headers['Content-Type'] = 'application/json'
         | 
| 11 | 
            +
                      request.body = security_data
         | 
| 12 | 
            +
                    end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                    return unless poncho_response.success?
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                    JSON.parse(poncho_response.body).dig('jwt_token')
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  private
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  def poncho_api_endpoint
         | 
| 22 | 
            +
                    raise NotImplementedError
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  def security_data
         | 
| 26 | 
            +
                    raise NotImplementedError
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
            end
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            require 'flimper_poncho/permissions/checkers/template'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Permissions
         | 
| 4 | 
            +
              module Checkers
         | 
| 5 | 
            +
                class ForApiClients < Permissions::Checkers::Template
         | 
| 6 | 
            +
                  attr_reader :jwt_token
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  def initialize(jwt_token:, resource_code:, level:, name:)
         | 
| 9 | 
            +
                    @jwt_token = jwt_token
         | 
| 10 | 
            +
                    @resource_code = resource_code
         | 
| 11 | 
            +
                    @level = level
         | 
| 12 | 
            +
                    @name = name
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  def permission_query
         | 
| 16 | 
            +
                    { 'name' => @name, 'resource_code' => @resource_code, 'level' => @level }
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            require 'flimper_poncho/permissions/checkers/template'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Permissions
         | 
| 4 | 
            +
              module Checkers
         | 
| 5 | 
            +
                class ForUsers < Permissions::Checkers::Template
         | 
| 6 | 
            +
                  attr_reader :jwt_token
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  def initialize(jwt_token:, resource_code:, level:, email:)
         | 
| 9 | 
            +
                    @jwt_token = jwt_token
         | 
| 10 | 
            +
                    @resource_code = resource_code
         | 
| 11 | 
            +
                    @level = level
         | 
| 12 | 
            +
                    @email = email
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  def permission_query
         | 
| 16 | 
            +
                    { 'email' => @email, 'resource_code' => @resource_code, 'level' => @level }
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
| @@ -0,0 +1,31 @@ | |
| 1 | 
            +
            require 'jwt'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Permissions
         | 
| 4 | 
            +
              module Checkers
         | 
| 5 | 
            +
                class Template
         | 
| 6 | 
            +
                  def can_perform_action?
         | 
| 7 | 
            +
                    permissions.include?(permission_query) || permissions.include?(permission_query.merge('level' => 'ADMIN'))
         | 
| 8 | 
            +
                  rescue JWT::DecodeError
         | 
| 9 | 
            +
                    false
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  private
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  def permissions
         | 
| 15 | 
            +
                    decoded_jwt.dig('permissions') || []
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  def decoded_jwt
         | 
| 19 | 
            +
                    JWT.decode(jwt_token, ENV.fetch('PONCHO_API_SIGNATURE_KEY'), true, algorithm: 'HS256')[0]
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  def permission_query
         | 
| 23 | 
            +
                    raise NotImplementedError
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                  def jwt_token
         | 
| 27 | 
            +
                    raise NotImplementedError
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
            end
         | 
    
        data/lib/flimper_poncho.rb
    CHANGED
    
    | @@ -1,5 +1,8 @@ | |
| 1 1 | 
             
            require 'flimper_poncho/version'
         | 
| 2 | 
            -
            require 'flimper_poncho/ | 
| 2 | 
            +
            require 'flimper_poncho/jwts/issuers/for_api_clients'
         | 
| 3 | 
            +
            require 'flimper_poncho/jwts/issuers/for_users'
         | 
| 4 | 
            +
            require 'flimper_poncho/permissions/checkers/for_api_clients'
         | 
| 5 | 
            +
            require 'flimper_poncho/permissions/checkers/for_users'
         | 
| 3 6 |  | 
| 4 7 | 
             
            module FlimperPoncho
         | 
| 5 8 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: flimper_poncho
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Pablo Gonzaga
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2019-04- | 
| 11 | 
            +
            date: 2019-04-02 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -81,33 +81,33 @@ dependencies: | |
| 81 81 | 
             
                  - !ruby/object:Gem::Version
         | 
| 82 82 | 
             
                    version: 0.66.0
         | 
| 83 83 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 84 | 
            -
              name:  | 
| 84 | 
            +
              name: vcr
         | 
| 85 85 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 86 86 | 
             
                requirements:
         | 
| 87 87 | 
             
                - - "~>"
         | 
| 88 88 | 
             
                  - !ruby/object:Gem::Version
         | 
| 89 | 
            -
                    version:  | 
| 89 | 
            +
                    version: '4.0'
         | 
| 90 90 | 
             
              type: :development
         | 
| 91 91 | 
             
              prerelease: false
         | 
| 92 92 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 93 93 | 
             
                requirements:
         | 
| 94 94 | 
             
                - - "~>"
         | 
| 95 95 | 
             
                  - !ruby/object:Gem::Version
         | 
| 96 | 
            -
                    version:  | 
| 96 | 
            +
                    version: '4.0'
         | 
| 97 97 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 98 | 
            -
              name:  | 
| 98 | 
            +
              name: webmock
         | 
| 99 99 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 100 100 | 
             
                requirements:
         | 
| 101 101 | 
             
                - - "~>"
         | 
| 102 102 | 
             
                  - !ruby/object:Gem::Version
         | 
| 103 | 
            -
                    version:  | 
| 104 | 
            -
              type: : | 
| 103 | 
            +
                    version: 3.5.1
         | 
| 104 | 
            +
              type: :development
         | 
| 105 105 | 
             
              prerelease: false
         | 
| 106 106 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 107 107 | 
             
                requirements:
         | 
| 108 108 | 
             
                - - "~>"
         | 
| 109 109 | 
             
                  - !ruby/object:Gem::Version
         | 
| 110 | 
            -
                    version:  | 
| 110 | 
            +
                    version: 3.5.1
         | 
| 111 111 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 112 112 | 
             
              name: faraday
         | 
| 113 113 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -157,8 +157,12 @@ files: | |
| 157 157 | 
             
            - bin/setup
         | 
| 158 158 | 
             
            - flimper_poncho.gemspec
         | 
| 159 159 | 
             
            - lib/flimper_poncho.rb
         | 
| 160 | 
            -
            - lib/flimper_poncho/ | 
| 161 | 
            -
            - lib/flimper_poncho/ | 
| 160 | 
            +
            - lib/flimper_poncho/jwts/issuers/for_api_clients.rb
         | 
| 161 | 
            +
            - lib/flimper_poncho/jwts/issuers/for_users.rb
         | 
| 162 | 
            +
            - lib/flimper_poncho/jwts/issuers/template.rb
         | 
| 163 | 
            +
            - lib/flimper_poncho/permissions/checkers/for_api_clients.rb
         | 
| 164 | 
            +
            - lib/flimper_poncho/permissions/checkers/for_users.rb
         | 
| 165 | 
            +
            - lib/flimper_poncho/permissions/checkers/template.rb
         | 
| 162 166 | 
             
            - lib/flimper_poncho/version.rb
         | 
| 163 167 | 
             
            homepage: https://github.com/flimperapp/poncho_gem
         | 
| 164 168 | 
             
            licenses:
         | 
| @@ -1,26 +0,0 @@ | |
| 1 | 
            -
            require 'jwt'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module FlimperPoncho
         | 
| 4 | 
            -
              module Entities
         | 
| 5 | 
            -
                class UserSession
         | 
| 6 | 
            -
                  attr_reader :email, :authorization_token, :permissions
         | 
| 7 | 
            -
             | 
| 8 | 
            -
                  def initialize(jwt:)
         | 
| 9 | 
            -
                    @jwt = jwt
         | 
| 10 | 
            -
                    @authorization_token = jwt_decode.dig('authorization_token')
         | 
| 11 | 
            -
                    @email = jwt_decode.dig('email')
         | 
| 12 | 
            -
             | 
| 13 | 
            -
                    @permissions = jwt_decode.dig('permissions').map do |permission|
         | 
| 14 | 
            -
                      { email: permission.dig('email'), resource_code: permission.dig('resource_code'),
         | 
| 15 | 
            -
                        level: permission.dig('level') }
         | 
| 16 | 
            -
                    end
         | 
| 17 | 
            -
                  end
         | 
| 18 | 
            -
             | 
| 19 | 
            -
                  private
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                  def jwt_decode
         | 
| 22 | 
            -
                    @jwt_decode ||= JWT.decode(@jwt, ENV.fetch('PONCHO_API_SIGNATURE_KEY'), true, algorithm: 'HS256')[0]
         | 
| 23 | 
            -
                  end
         | 
| 24 | 
            -
                end
         | 
| 25 | 
            -
              end
         | 
| 26 | 
            -
            end
         | 
| @@ -1,39 +0,0 @@ | |
| 1 | 
            -
            require 'active_interaction'
         | 
| 2 | 
            -
            require 'faraday'
         | 
| 3 | 
            -
            require 'json'
         | 
| 4 | 
            -
            require 'flimper_poncho/entities/user_session'
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            module FlimperPoncho
         | 
| 7 | 
            -
              module UserSession
         | 
| 8 | 
            -
                class Create < ActiveInteraction::Base
         | 
| 9 | 
            -
                  string :email
         | 
| 10 | 
            -
                  string :password
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                  validates :email, :password, presence: true
         | 
| 13 | 
            -
             | 
| 14 | 
            -
                  def execute
         | 
| 15 | 
            -
                    poncho_response = faraday_connection.post do |request|
         | 
| 16 | 
            -
                      request.url(poncho_api_url)
         | 
| 17 | 
            -
                      request.headers['Content-Type'] = 'application/json'
         | 
| 18 | 
            -
                      request.body = { email: email, password: password }.to_json
         | 
| 19 | 
            -
                    end
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                    return unless poncho_response.success?
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                    FlimperPoncho::Entities::UserSession.new(jwt: JSON.parse(poncho_response.body).dig('jwt_token'))
         | 
| 24 | 
            -
                  rescue KeyError => error
         | 
| 25 | 
            -
                    errors.add(:poncho_api_url, error.message)
         | 
| 26 | 
            -
                  end
         | 
| 27 | 
            -
             | 
| 28 | 
            -
                  private
         | 
| 29 | 
            -
             | 
| 30 | 
            -
                  def poncho_api_url
         | 
| 31 | 
            -
                    @poncho_api_url ||= "#{ENV.fetch('PONCHO_API_URL')}/user_sessions"
         | 
| 32 | 
            -
                  end
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                  def faraday_connection
         | 
| 35 | 
            -
                    @faraday_connection ||= Faraday.new
         | 
| 36 | 
            -
                  end
         | 
| 37 | 
            -
                end
         | 
| 38 | 
            -
              end
         | 
| 39 | 
            -
            end
         |