siwe_rails 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 +7 -0
- data/README.md +94 -0
- data/Rakefile +8 -0
- data/app/assets/config/siwe_rails_manifest.js +4 -0
- data/app/assets/images/siwe_rails/coinbase.svg +4 -0
- data/app/assets/images/siwe_rails/modal_icon.png +0 -0
- data/app/assets/images/siwe_rails/swe-landing.svg +29 -0
- data/app/assets/javascripts/siwe_rails/siwe.js.erb +141 -0
- data/app/assets/javascripts/siwe_rails/web3bundle.js +3 -0
- data/app/assets/stylesheets/siwe_rails/application.css +65 -0
- data/app/assets/stylesheets/siwe_rails/background.scss +3 -0
- data/app/controllers/siwe_rails/application_controller.rb +67 -0
- data/app/views/siwe_rails/application/index.html.erb +63 -0
- data/config/routes.rb +6 -0
- data/lib/siwe_rails/engine.rb +7 -0
- data/lib/siwe_rails/version.rb +3 -0
- data/lib/siwe_rails.rb +137 -0
- metadata +101 -0
@@ -0,0 +1,65 @@
|
|
1
|
+
html, body {
|
2
|
+
position: relative;
|
3
|
+
width: 100%;
|
4
|
+
height: 100%;
|
5
|
+
}
|
6
|
+
|
7
|
+
body {
|
8
|
+
color: #333;
|
9
|
+
margin: 0;
|
10
|
+
padding: 8px;
|
11
|
+
box-sizing: border-box;
|
12
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
|
13
|
+
}
|
14
|
+
|
15
|
+
a {
|
16
|
+
color: rgb(0,100,200);
|
17
|
+
text-decoration: none;
|
18
|
+
}
|
19
|
+
|
20
|
+
a:hover {
|
21
|
+
text-decoration: underline;
|
22
|
+
}
|
23
|
+
|
24
|
+
a:visited {
|
25
|
+
color: rgb(0,80,160);
|
26
|
+
}
|
27
|
+
|
28
|
+
label {
|
29
|
+
display: block;
|
30
|
+
}
|
31
|
+
|
32
|
+
input, button, select, textarea {
|
33
|
+
font-family: inherit;
|
34
|
+
font-size: inherit;
|
35
|
+
-webkit-padding: 0.4em 0;
|
36
|
+
padding: 0.4em;
|
37
|
+
margin: 0 0 0.5em 0;
|
38
|
+
box-sizing: border-box;
|
39
|
+
border: 1px solid #ccc;
|
40
|
+
border-radius: 2px;
|
41
|
+
}
|
42
|
+
|
43
|
+
input:disabled {
|
44
|
+
color: #ccc;
|
45
|
+
}
|
46
|
+
|
47
|
+
button {
|
48
|
+
color: #333;
|
49
|
+
background-color: #f4f4f4;
|
50
|
+
outline: none;
|
51
|
+
}
|
52
|
+
|
53
|
+
button:disabled {
|
54
|
+
color: #999;
|
55
|
+
}
|
56
|
+
|
57
|
+
button:not(:disabled):active {
|
58
|
+
background-color: #ddd;
|
59
|
+
}
|
60
|
+
|
61
|
+
button:focus {
|
62
|
+
border-color: #666;
|
63
|
+
}
|
64
|
+
|
65
|
+
*,:after,:before{border:0 solid;box-sizing:border-box}:after,:before{--tw-content:""}html{-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-size:100%;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-transform:translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-border-opacity:1;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;border-color:rgb(229 231 235/var(--tw-border-opacity))}.visible{visibility:visible}.invisible{visibility:hidden}.mb-8{margin-bottom:2rem}.mt-auto{margin-top:auto}.flex{display:flex}.h-screen{height:100vh}.h-96{height:24rem}.h-12{height:3rem}.h-8{height:2rem}.w-full{width:100%}.w-96{width:24rem}.w-6{width:1.5rem}.flex-grow{flex-grow:1}.transform{transform:var(--tw-transform)}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.justify-center{justify-content:center}.justify-evenly{justify-content:space-evenly}.self-center{align-self:center}.rounded-20{border-radius:20px}.border{border-width:1px}.border-white{--tw-border-opacity:1;border-color:rgb(255 255 255/var(--tw-border-opacity))}.bg-gray{--tw-bg-opacity:1;background-color:rgb(33 33 33/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-cover{background-size:cover}.bg-center{background-position:50%}.bg-no-repeat{background-repeat:no-repeat}.p-12{padding:3rem}.text-center{text-align:center}.font-satoshi{font-family:Satoshi}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-lg,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,.1),0 8px 10px -6px rgba(0,0,0,.1);--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 8px 10px -6px var(--tw-shadow-color)}.shadow-white{--tw-shadow-color:#fff;--tw-shadow:var(--tw-shadow-colored)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-100{transition-duration:.1s}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}.tooltip{position:absolute;visibility:hidden}.has-tooltip:hover .tooltip{visibility:visible;z-index:50}body,html{background:#ecf2fe;display:flex;flex-direction:column;font-family:Satoshi;font-size:18px;height:100vh;margin:0;overflow-x:hidden;padding:0;position:relative;width:100vw}h1,h2,h3,h4,h5,h6{font-family:Satoshi;font-weight:800}h1{font-size:76px;letter-spacing:-4.5%;line-height:129px}h2{font-size:66px;letter-spacing:-3%;line-height:101px}h3{font-size:52px;letter-spacing:-1.5%;line-height:80px}h4{font-size:48px;letter-spacing:-1%;line-height:63px}h5{font-size:32px;line-height:49px}h5,h6{letter-spacing:-.5%}h6{font-size:24px;line-height:37px}body{color:#222}a{color:#04d2ca;text-decoration:none}td,th{font-family:Satoshi;font-weight:400}pre{word-wrap:break-word;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap}.web3modal-modal-lightbox{z-index:30!important}.walletconnect-modal__base{background-color:#273137!important}.walletconnect-qrcode__text{color:#fff!important}.walletconnect-modal__mobile__toggle{background:hsla(0,0%,100%,.1)!important}.walletconnect-qrcode__image{border:24px solid #fff!important;border-radius:8px!important}.walletconnect-modal__base__row:hover{background:hsla(0,0%,100%,.1)!important}.walletconnect-modal__mobile__toggle_selector{background:hsla(0,0%,100%,.2)!important}::-webkit-scrollbar-track{background-color:#ccc;border-radius:8px}::-webkit-scrollbar-thumb{background-color:#888;border-radius:8px}::-webkit-scrollbar{background-color:#ccc;border-radius:8px;height:6px;width:6px}.grecaptcha-badge{visibility:hidden}.hover\:scale-105:hover{--tw-scale-x:1.05;--tw-scale-y:1.05;transform:var(--tw-transform)}
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'siwe'
|
4
|
+
|
5
|
+
module SiweRails
|
6
|
+
class ApplicationController < ActionController::Base
|
7
|
+
SESSION_SIWE_MESSAGE_KEY = 'siwe/message' # Session key
|
8
|
+
|
9
|
+
def index
|
10
|
+
render :index
|
11
|
+
end
|
12
|
+
|
13
|
+
# /#{prefix}/message
|
14
|
+
def message
|
15
|
+
message = Siwe::Message.new(
|
16
|
+
request.host_with_port,
|
17
|
+
request.params[:address],
|
18
|
+
"#{request.protocol}#{request.host_with_port}",
|
19
|
+
'1',
|
20
|
+
sign_params
|
21
|
+
)
|
22
|
+
session[SESSION_SIWE_MESSAGE_KEY] = message.to_json_string
|
23
|
+
render plain: message.prepare_message
|
24
|
+
end
|
25
|
+
|
26
|
+
# /#{prefix}/signature
|
27
|
+
def signature
|
28
|
+
message = Siwe::Message.from_json_string session[SESSION_SIWE_MESSAGE_KEY]
|
29
|
+
|
30
|
+
if message.validate(params.require(:signature))
|
31
|
+
session[SESSION_SIWE_MESSAGE_KEY] = nil
|
32
|
+
session[SiweRails.SIWE_ENS] = params[:ens]
|
33
|
+
session[SiweRails.SIWE_ADDRESS] = message.address
|
34
|
+
|
35
|
+
redirect_to SiweRails.redirect_uri, status: 308
|
36
|
+
else
|
37
|
+
head :bad_request
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
# Calculates expiration date
|
44
|
+
def expires_at
|
45
|
+
(Time.now.utc + SiweRails.expiration_time).iso8601
|
46
|
+
end
|
47
|
+
|
48
|
+
# Default required params
|
49
|
+
def default_sign_params
|
50
|
+
{
|
51
|
+
statement: SiweRails.statement,
|
52
|
+
nonce: Siwe::Util.generate_nonce,
|
53
|
+
chain_id: request.params[:chainId]
|
54
|
+
}
|
55
|
+
end
|
56
|
+
|
57
|
+
# Add optional params if present
|
58
|
+
def sign_params
|
59
|
+
params = default_sign_params
|
60
|
+
params[:expiration_time] = expires_at unless SiweRails.expiration_time.nil?
|
61
|
+
params[:not_before] = SiweRails.not_before unless SiweRails.not_before.nil?
|
62
|
+
params[:request_id] = SecureRandom.uuid if SiweRails.request_id
|
63
|
+
params[:resources] = SiweRails.resources unless SiweRails.resources.nil?
|
64
|
+
params
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>SIWE Rails</title>
|
5
|
+
<%= csrf_meta_tags %>
|
6
|
+
<%= csp_meta_tag %>
|
7
|
+
|
8
|
+
<%= stylesheet_link_tag "siwe_rails/application", media: "all" %>
|
9
|
+
<%= stylesheet_link_tag "siwe_rails/background", media: "all" %>
|
10
|
+
|
11
|
+
<link
|
12
|
+
href="https://api.fontshare.com/css?f[]=satoshi@300,301,400,401,500,501,700,701,900,901,1,2&display=swap"
|
13
|
+
rel="stylesheet"
|
14
|
+
/>
|
15
|
+
|
16
|
+
<script src="https://cdnjs.cloudflare.com/ajax/libs/ethers/5.5.2/ethers.umd.min.js"></script>
|
17
|
+
<script src="https://cdn.jsdelivr.net/npm/web3modal@1.9.5/dist/index.min.js"></script>
|
18
|
+
<%= javascript_include_tag "siwe_rails/web3bundle" %>
|
19
|
+
<%= javascript_include_tag "siwe_rails/siwe" %>
|
20
|
+
</head>
|
21
|
+
<body>
|
22
|
+
|
23
|
+
<div class="background bg-no-repeat bg-cover bg-center bg-swe-landing font-satoshi bg-gray flex-grow w-full h-screen items-center flex justify-center flex-wrap flex-col">
|
24
|
+
<div class="w-96 text-center bg-white rounded-20 text-grey flex h-96 flex-col p-12 shadow-lg shadow-white">
|
25
|
+
<%= image_tag("siwe_rails/modal_icon.png", :height => 72, :width => 72, :alt => "Ethereum logo", :class => "self-center mb-8") %>
|
26
|
+
<h5>Welcome</h5>
|
27
|
+
<span class="text-xs">Sign-In with Ethereum to continue to your application</span>
|
28
|
+
|
29
|
+
<button
|
30
|
+
class="h-12 border hover:scale-105 justify-evenly shadow-xl border-white mt-auto duration-100 ease-in-out transition-all transform flex items-center"
|
31
|
+
id="siwe"
|
32
|
+
>
|
33
|
+
<svg
|
34
|
+
xmlns="http://www.w3.org/2000/svg"
|
35
|
+
clip-rule="evenodd"
|
36
|
+
fill-rule="evenodd"
|
37
|
+
stroke-linejoin="round"
|
38
|
+
stroke-miterlimit="1.41421"
|
39
|
+
viewBox="170 30 220 350"
|
40
|
+
class="w-6 h-8"
|
41
|
+
>
|
42
|
+
<g fill-rule="nonzero" transform="matrix(.781253 0 0 .781253 180 37.1453)">
|
43
|
+
<path d="m127.961 0-2.795 9.5v275.668l2.795 2.79 127.962-75.638z" fill="#343434" /><path
|
44
|
+
d="m127.962 0-127.962 212.32 127.962 75.639v-133.801z"
|
45
|
+
fill="#8c8c8c"
|
46
|
+
/>
|
47
|
+
<path d="m127.961 312.187-1.575 1.92v98.199l1.575 4.601 128.038-180.32z" fill="#3c3c3b" /><path
|
48
|
+
d="m127.962 416.905v-104.72l-127.962-75.6z"
|
49
|
+
fill="#8c8c8c"
|
50
|
+
/>
|
51
|
+
<path d="m127.961 287.958 127.96-75.637-127.96-58.162z" fill="#141414" /><path
|
52
|
+
d="m.001 212.321 127.96 75.637v-133.799z"
|
53
|
+
fill="#393939"
|
54
|
+
/>
|
55
|
+
</g>
|
56
|
+
</svg>
|
57
|
+
<p class="font-bold">Sign-In with Ethereum</p>
|
58
|
+
</button>
|
59
|
+
</div>
|
60
|
+
</div>
|
61
|
+
|
62
|
+
</body>
|
63
|
+
</html>
|
data/config/routes.rb
ADDED
data/lib/siwe_rails.rb
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'siwe_rails/version'
|
4
|
+
require 'siwe_rails/engine'
|
5
|
+
|
6
|
+
module SiweRails
|
7
|
+
# Session address key
|
8
|
+
def self.SIWE_ADDRESS
|
9
|
+
'siwe/address'
|
10
|
+
end
|
11
|
+
|
12
|
+
# Session address key
|
13
|
+
def self.SIWE_ENS
|
14
|
+
'siwe/ens'
|
15
|
+
end
|
16
|
+
|
17
|
+
# Prefix to use when mounting the routes
|
18
|
+
def self.prefix
|
19
|
+
if Rails.configuration.x.siwe.prefix.nil?
|
20
|
+
'siwe'
|
21
|
+
else
|
22
|
+
Rails.configuration.x.siwe.prefix
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Message statement
|
27
|
+
def self.statement
|
28
|
+
if Rails.configuration.x.siwe.statement.nil?
|
29
|
+
'SIWE'
|
30
|
+
else
|
31
|
+
Rails.configuration.x.siwe.statement
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
# Message expiration time in milliseconds, 7 days by default
|
36
|
+
def self.expiration_time
|
37
|
+
if Rails.configuration.x.siwe.expiration_time.nil?
|
38
|
+
7 * 24 * 60 * 60 * 1000
|
39
|
+
else
|
40
|
+
Rails.configuration.x.siwe.expiration_time
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Message minimum datetime validity
|
45
|
+
def self.not_before
|
46
|
+
if Rails.configuration.x.siwe.not_before.nil?
|
47
|
+
Time.now.utc.iso8601
|
48
|
+
else
|
49
|
+
Rails.configuration.x.siwe.not_before
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# Whether to add a request id
|
54
|
+
def self.request_id
|
55
|
+
if Rails.configuration.x.siwe.request_id.nil?
|
56
|
+
false
|
57
|
+
else
|
58
|
+
Rails.configuration.x.siwe.request_id
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# Resources
|
63
|
+
def self.resources
|
64
|
+
if Rails.configuration.x.siwe.resources.nil?
|
65
|
+
nil
|
66
|
+
else
|
67
|
+
Rails.configuration.x.siwe.resources
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# Redirect URL to receive user information on success
|
72
|
+
def self.redirect_uri
|
73
|
+
if Rails.configuration.x.siwe.redirect_uri.nil?
|
74
|
+
'/'
|
75
|
+
else
|
76
|
+
Rails.configuration.x.siwe.redirect_uri
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# Network to use with sign in
|
81
|
+
def self.network
|
82
|
+
if Rails.configuration.x.siwe.network.nil?
|
83
|
+
'mainnet'
|
84
|
+
else
|
85
|
+
Rails.configuration.x.siwe.network
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
# Infura Key
|
90
|
+
def self.infura
|
91
|
+
if Rails.configuration.x.siwe.infura.nil?
|
92
|
+
''
|
93
|
+
else
|
94
|
+
Rails.configuration.x.siwe.infura
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
# Portis ID
|
99
|
+
def self.portis
|
100
|
+
if Rails.configuration.x.siwe.portis.nil?
|
101
|
+
''
|
102
|
+
else
|
103
|
+
Rails.configuration.x.siwe.portis
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
# Fortmatic Key
|
108
|
+
def self.fortmatic
|
109
|
+
if Rails.configuration.x.siwe.fortmatic.nil?
|
110
|
+
''
|
111
|
+
else
|
112
|
+
Rails.configuration.x.siwe.fortmatic
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
# Whether to enable Torus wallet
|
117
|
+
def self.torus
|
118
|
+
if Rails.configuration.x.siwe.torus.nil?
|
119
|
+
false
|
120
|
+
else
|
121
|
+
Rails.configuration.x.siwe.torus
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
# Whether to enable Coinbase wallet
|
126
|
+
def self.coinbase
|
127
|
+
if Rails.configuration.x.siwe.coinbase.nil?
|
128
|
+
false
|
129
|
+
else
|
130
|
+
Rails.configuration.x.siwe.coinbase
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def self.setup
|
135
|
+
yield self
|
136
|
+
end
|
137
|
+
end
|
metadata
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: siwe_rails
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Spruce Systems, Inc.
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-09-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 7.0.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 7.0.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: sass-rails
|
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: siwe
|
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
|
+
description: Custom Rails Engine to server local pages for SIWE
|
56
|
+
email:
|
57
|
+
executables: []
|
58
|
+
extensions: []
|
59
|
+
extra_rdoc_files: []
|
60
|
+
files:
|
61
|
+
- README.md
|
62
|
+
- Rakefile
|
63
|
+
- app/assets/config/siwe_rails_manifest.js
|
64
|
+
- app/assets/images/siwe_rails/coinbase.svg
|
65
|
+
- app/assets/images/siwe_rails/modal_icon.png
|
66
|
+
- app/assets/images/siwe_rails/swe-landing.svg
|
67
|
+
- app/assets/javascripts/siwe_rails/siwe.js.erb
|
68
|
+
- app/assets/javascripts/siwe_rails/web3bundle.js
|
69
|
+
- app/assets/stylesheets/siwe_rails/application.css
|
70
|
+
- app/assets/stylesheets/siwe_rails/background.scss
|
71
|
+
- app/controllers/siwe_rails/application_controller.rb
|
72
|
+
- app/views/siwe_rails/application/index.html.erb
|
73
|
+
- config/routes.rb
|
74
|
+
- lib/siwe_rails.rb
|
75
|
+
- lib/siwe_rails/engine.rb
|
76
|
+
- lib/siwe_rails/version.rb
|
77
|
+
homepage: https://github.com/spruceid/siwe-rails-engine
|
78
|
+
licenses:
|
79
|
+
- MIT
|
80
|
+
- Apache-2.0
|
81
|
+
metadata: {}
|
82
|
+
post_install_message:
|
83
|
+
rdoc_options: []
|
84
|
+
require_paths:
|
85
|
+
- lib
|
86
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
requirements: []
|
97
|
+
rubygems_version: 3.3.22
|
98
|
+
signing_key:
|
99
|
+
specification_version: 4
|
100
|
+
summary: Custom Rails Engine to server local pages for SIWE
|
101
|
+
test_files: []
|