prefix_api_key 0.1.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 5d7a622c851112159e9f41b46f0c4e2cf8e4b321629b42e3f5046e39bb61417c
4
+ data.tar.gz: 81c9ffb61d01cb9e9387f590ceaac46824dd3b25be1b63e315a820334d05401e
5
+ SHA512:
6
+ metadata.gz: f0068c4373bd6fa0aa6b90c41bec6288c59e99205208fc5f4f287be91a87bf431520bc913c4cdd4c8040ba807612eab42ee75520a8d9401a040f8d2b88c12f28
7
+ data.tar.gz: 22eb62dd596bfa136f26beae8c7c8624c0da4a6041cbc46ce6927dfbf47ac578b6f70857b99263966a1e36b8452fc39130e1f8ef7674e258898d61714c504df8
data/bin/console ADDED
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "bundler/setup"
5
+ require "prefix_api_key"
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ require "irb"
11
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,37 @@
1
+ require 'base64'
2
+ require 'digest'
3
+
4
+ module PrefixApiKey
5
+ class Check
6
+ def self.call(token: nil, hash: nil)
7
+ new.call(token: token, hash: hash)
8
+ end
9
+
10
+ def call(token: nil, hash: nil)
11
+ token = token.split("_")
12
+ prefix = token[0]
13
+ short_token = token[1]
14
+ long_token = token[2]
15
+
16
+ short_token_valid = short_token_valid(prefix: prefix, short_token: short_token)
17
+
18
+ digest_hash = ::Digest::SHA2.hexdigest(long_token)
19
+
20
+ short_token_valid == short_token && hash == digest_hash
21
+ end
22
+
23
+ private
24
+
25
+ def short_token_valid(prefix: nil, short_token: nil)
26
+ Base64.strict_encode64(prefix + salt_short + password_short)[0..6]
27
+ end
28
+
29
+ def salt_short
30
+ PrefixApiKey.configuration.salt_short
31
+ end
32
+
33
+ def password_short
34
+ PrefixApiKey.configuration.password_short
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Configuration
4
+ attr_accessor :salt_short, :salt_long, :password_short, :password_long
5
+
6
+ def initialize
7
+ @salt_short = ENV.fetch('SALT_SHORT', nil)
8
+ @salt_long = ENV.fetch('SALT_LONG', nil)
9
+ @password_short = ENV.fetch('PASSWORD_SHORT', nil)
10
+ @password_long = ENV.fetch('PASSWORD_LONG', nil)
11
+ end
12
+
13
+ def valid?
14
+ raise StandardError, 'Missing configuration environment' if @salt_short.nil? || @salt_long.nil? || @password_short.nil? || @password_long.nil?
15
+
16
+ true
17
+ end
18
+ end
@@ -0,0 +1,43 @@
1
+ require 'base64'
2
+ require 'digest'
3
+
4
+ module PrefixApiKey
5
+ class Generate
6
+ def self.call(prefix: "prefix")
7
+ new.call(prefix: prefix)
8
+ end
9
+
10
+ def call(prefix: "prefix")
11
+ short_token = Base64.strict_encode64(prefix + salt_short + password_short)[0..6]
12
+ long_token = Base64.strict_encode64(salt_long + password_long + prefix)
13
+ long_token_hash = ::Digest::SHA2.hexdigest(long_token)
14
+ token = "#{prefix}_#{short_token}_#{long_token}"
15
+
16
+ {
17
+ short_token: short_token,
18
+ long_token: long_token,
19
+ long_token_hash: long_token_hash,
20
+ token: token,
21
+ prefix: prefix
22
+ }
23
+ end
24
+
25
+ private
26
+
27
+ def salt_short
28
+ PrefixApiKey.configuration.salt_short
29
+ end
30
+
31
+ def salt_long
32
+ PrefixApiKey.configuration.salt_long
33
+ end
34
+
35
+ def password_short
36
+ PrefixApiKey.configuration.password_short
37
+ end
38
+
39
+ def password_long
40
+ PrefixApiKey.configuration.password_short
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PrefixApiKey
4
+ VERSION = "0.1.0"
5
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "prefix_api_key/version"
4
+ require "prefix_api_key/configuration"
5
+ require "prefix_api_key/generate"
6
+ require 'prefix_api_key/check'
7
+
8
+ module PrefixApiKey
9
+ class Error < StandardError; end
10
+
11
+ class << self
12
+ attr_writer :configuration
13
+
14
+ def configuration
15
+ @configuration ||= Configuration.new
16
+ end
17
+
18
+ def configure
19
+ yield(configuration)
20
+ end
21
+ end
22
+ end
metadata ADDED
@@ -0,0 +1,177 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: prefix_api_key
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Frankyston Lins
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2024-05-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: builder
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
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activesupport
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry-byebug
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '3.9'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '3.9'
83
+ - !ruby/object:Gem::Dependency
84
+ name: uuid
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.3'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 2.3.9
93
+ type: :development
94
+ prerelease: false
95
+ version_requirements: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '2.3'
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 2.3.9
103
+ - !ruby/object:Gem::Dependency
104
+ name: rspec
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '3.10'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '3.10'
117
+ - !ruby/object:Gem::Dependency
118
+ name: dotenv
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '2.7'
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: 2.7.6
127
+ type: :development
128
+ prerelease: false
129
+ version_requirements: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - "~>"
132
+ - !ruby/object:Gem::Version
133
+ version: '2.7'
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: 2.7.6
137
+ description: Generate a prefix API key for your application
138
+ email:
139
+ - frankyston@gmail.com
140
+ executables: []
141
+ extensions: []
142
+ extra_rdoc_files: []
143
+ files:
144
+ - bin/console
145
+ - bin/setup
146
+ - lib/prefix_api_key.rb
147
+ - lib/prefix_api_key/check.rb
148
+ - lib/prefix_api_key/configuration.rb
149
+ - lib/prefix_api_key/generate.rb
150
+ - lib/prefix_api_key/version.rb
151
+ homepage: https://github.com/frankyston/prefix_api_key
152
+ licenses:
153
+ - MIT
154
+ metadata:
155
+ homepage_uri: https://github.com/frankyston/prefix_api_key
156
+ source_code_uri: https://github.com/frankyston/prefix_api_key
157
+ changelog_uri: https://github.com/frankyston/prefix_api_key/blob/main/CHANGELOG.md
158
+ post_install_message:
159
+ rdoc_options: []
160
+ require_paths:
161
+ - lib
162
+ required_ruby_version: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '2.7'
167
+ required_rubygems_version: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
172
+ requirements: []
173
+ rubygems_version: 3.5.7
174
+ signing_key:
175
+ specification_version: 4
176
+ summary: Generate a prefix API key for your application
177
+ test_files: []