clerk-rails 0.1.8 → 0.1.9
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/app/models/clerk/application_record.rb +1 -1
- data/config/initializers/patch_persistence.rb +33 -1
- data/lib/clerk-rails.rb +1 -1
- data/lib/clerk/engine.rb +8 -6
- data/lib/clerk/tunnel.rb +12 -77
- data/lib/clerk/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e595682c8db22e0199602650c5172b9e038576a93a00a86263a68b2bc3663d30
|
4
|
+
data.tar.gz: e61a165746679c0e148cd267e8a30acfc3f2de59c86e17829a0101e44eaf4874
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2eeadea3edb895b7cc7e5ef12c4d1b82f605ee35429f860a968a73598d214b40349b971044bde01f7b38b44059147986cc2523987d4e97470bbe1c0b6f22a5e4
|
7
|
+
data.tar.gz: 5be6344c1ae185beeca74194a4d207fe35a58cec638fbfeab07cec18efd2660c08d01c0b81c3b84636864169fc545458b380e53ddb442d359d65d6e6436e7678
|
@@ -4,7 +4,7 @@ module Clerk
|
|
4
4
|
establish_connection Clerk.database_connection_url
|
5
5
|
def self.clerk_table_name(table_name)
|
6
6
|
version = Clerk::VERSION.split(".").map.with_index{|x, i| (i==2 ? "00" : x.rjust(2, '0')) }.join
|
7
|
-
"
|
7
|
+
"instance.#{table_name}_#{version}_#{Clerk.key_secret}"
|
8
8
|
end
|
9
9
|
|
10
10
|
def self.clerk_table_name_nc(table_name)
|
@@ -37,5 +37,37 @@
|
|
37
37
|
else
|
38
38
|
_original_create_record(*args, &block)
|
39
39
|
end
|
40
|
-
end
|
40
|
+
end
|
41
|
+
|
42
|
+
alias_method :_original_update_row, :_update_row
|
43
|
+
|
44
|
+
def _clerk_update_row(attribute_names, attempted_action = "update")
|
45
|
+
response = self.class.clerk_persistence_api.patch(
|
46
|
+
"#{self.class.clerk_persistence_path}/#{id_in_database}",
|
47
|
+
attributes_with_values(attribute_names).except("updated_at")
|
48
|
+
)
|
49
|
+
|
50
|
+
if response.status == 200
|
51
|
+
1 # Affected rows
|
52
|
+
elsif response.status == 422
|
53
|
+
response.data.each do |k, vs|
|
54
|
+
vs.each do |v|
|
55
|
+
self.errors.add(k, v)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
raise ActiveRecord::RecordInvalid.new(self)
|
59
|
+
else
|
60
|
+
Rails.logger.fatal "Server Failed: #{response.data[:message]}"
|
61
|
+
raise ActiveRecord::RecordNotSaved.new("Failed to save the server record", self)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def _update_row(*args, &block)
|
66
|
+
if defined?(self.class.clerk_persistence_path)
|
67
|
+
_clerk_update_row(*args, &block)
|
68
|
+
else
|
69
|
+
_original_update_row(*args, &block)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
41
73
|
end
|
data/lib/clerk-rails.rb
CHANGED
@@ -51,6 +51,6 @@ module Clerk
|
|
51
51
|
end
|
52
52
|
|
53
53
|
class Configuration
|
54
|
-
attr_accessor :app_host, :accounts_host, :database_url, :
|
54
|
+
attr_accessor :app_host, :accounts_host, :database_url, :ngrok_authtoken, :environment, :session_mode, :last_account, :cookie_host, :tunnel_cert, :tunnel_key
|
55
55
|
end
|
56
56
|
end
|
data/lib/clerk/engine.rb
CHANGED
@@ -13,13 +13,15 @@ module Clerk
|
|
13
13
|
begin
|
14
14
|
config_data = Clerk.api.get('/api/environment').data
|
15
15
|
Clerk.configure do |config|
|
16
|
-
config.app_host
|
17
|
-
config.accounts_host
|
18
|
-
config.database_url
|
19
|
-
config.
|
20
|
-
|
16
|
+
config.app_host = config_data[:APP_HOST]
|
17
|
+
config.accounts_host = config_data[:ACCOUNTS_HOST]
|
18
|
+
config.database_url = config_data[:DATABASE_URL]
|
19
|
+
config.ngrok_authtoken = config_data[:NGROK_AUTHTOKEN]
|
20
|
+
config.tunnel_cert = config_data[:TUNNEL_CERT]
|
21
|
+
config.tunnel_key = config_data[:TUNNEL_KEY]
|
22
|
+
end
|
21
23
|
rescue => e
|
22
|
-
raise "Clerk could not be loaded. #{config_data}"
|
24
|
+
raise "Clerk could not be loaded. #{e} #{config_data}"
|
23
25
|
end
|
24
26
|
|
25
27
|
if defined?(Rails::Server) and Rails.env.development?
|
data/lib/clerk/tunnel.rb
CHANGED
@@ -15,6 +15,7 @@ module Clerk
|
|
15
15
|
def self.ngrok_path
|
16
16
|
data_dir.join("clerk_#{executable_type}")
|
17
17
|
end
|
18
|
+
|
18
19
|
def self.ngrok_zip_path
|
19
20
|
data_dir.join("clerk_#{executable_type}.zip")
|
20
21
|
end
|
@@ -23,10 +24,6 @@ module Clerk
|
|
23
24
|
data_dir.join("account.key")
|
24
25
|
end
|
25
26
|
|
26
|
-
def self.ready?
|
27
|
-
crt_ready? and ngrok_ready?
|
28
|
-
end
|
29
|
-
|
30
27
|
def self.crt_ready?
|
31
28
|
File.exist? key_path and File.exist? crt_path
|
32
29
|
end
|
@@ -35,12 +32,6 @@ module Clerk
|
|
35
32
|
File.exist? ngrok_path
|
36
33
|
end
|
37
34
|
|
38
|
-
def self.setup!
|
39
|
-
setup_crt! unless crt_ready?
|
40
|
-
setup_ngrok! unless ngrok_ready?
|
41
|
-
puts "=> [Clerk] Setup done."
|
42
|
-
end
|
43
|
-
|
44
35
|
def self.setup_ngrok!
|
45
36
|
ngrok_paths = {
|
46
37
|
darwin_amd64: "/c/4VmDzA7iaHb/ngrok-stable-darwin-amd64.zip",
|
@@ -76,76 +67,20 @@ module Clerk
|
|
76
67
|
File.delete(ngrok_zip_path)
|
77
68
|
end
|
78
69
|
|
79
|
-
def self.
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
Dir.mkdir(data_dir) unless Dir.exist? data_dir
|
85
|
-
|
86
|
-
puts "=> [Clerk] Authenticating with Let's Encrypt."
|
87
|
-
if File.exist? acc_path
|
88
|
-
acc_private_key = OpenSSL::PKey::RSA.new(File.read(acc_path))
|
89
|
-
client = ::Acme::Client.new(private_key: acc_private_key, directory: 'https://acme-v02.api.letsencrypt.org/directory')
|
90
|
-
client.kid #Load existing account
|
91
|
-
else
|
92
|
-
acc_private_key = OpenSSL::PKey::RSA.new(4096)
|
93
|
-
|
94
|
-
client = ::Acme::Client.new(private_key: acc_private_key, directory: 'https://acme-v02.api.letsencrypt.org/directory')
|
95
|
-
|
96
|
-
account = client.new_account(contact: 'mailto:sidot3291@gmail.com', terms_of_service_agreed: true)
|
97
|
-
|
98
|
-
File.write(acc_path, acc_private_key.to_pem)
|
99
|
-
end
|
100
|
-
|
101
|
-
puts "=> [Clerk] Beginning new certificate order for #{Clerk.config.app_host}."
|
102
|
-
order = client.new_order(identifiers: [Clerk.config.app_host])
|
103
|
-
challenge = order.authorizations.first.dns
|
104
|
-
|
105
|
-
puts "=> [Clerk] Completing DNS challenge."
|
106
|
-
record_name = "#{challenge.record_name}.#{Clerk.config.app_host.gsub(".clerkdev.com", "")}"
|
107
|
-
config_data = Clerk.api.post('/api/acme_challenge', {
|
108
|
-
name: record_name,
|
109
|
-
type: challenge.record_type,
|
110
|
-
content: challenge.record_content
|
111
|
-
})
|
112
|
-
|
113
|
-
puts "=> [Clerk] Waiting for DNS to process. This may take a few minutes."
|
114
|
-
confirm_url = URI.parse("https://dns.google.com/resolve?name=#{challenge.record_name}.#{Clerk.config.app_host}&type=TXT")
|
115
|
-
while true
|
116
|
-
confirm_check = JSON.parse(Net::HTTP.get(confirm_url))
|
117
|
-
break if confirm_check.dig("Answer", 0, "data")=="\"#{challenge.record_content}\""
|
118
|
-
sleep(5)
|
119
|
-
puts "=> [Clerk] Checking processing status..."
|
120
|
-
end
|
121
|
-
|
122
|
-
sleep(5) # Sometimes google returns correctly before. Add an extra 10 seconds.
|
123
|
-
puts "=> [Clerk] Checking processing status..."
|
124
|
-
sleep(5)
|
125
|
-
|
126
|
-
puts "=> [Clerk] Validating DNS challenge."
|
127
|
-
challenge.request_validation
|
70
|
+
def self.save_tunnel_cert_locally!
|
71
|
+
File.write(crt_path, Clerk.config.tunnel_cert)
|
72
|
+
File.write(key_path, Clerk.config.tunnel_key)
|
73
|
+
end
|
128
74
|
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
challenge.reload
|
75
|
+
def self.start!
|
76
|
+
if Clerk.config.tunnel_cert == nil || Clerk.config.tunnel_key == nil
|
77
|
+
raise "=> Sorry, your dev certificate isn't ready yet. It may take up to 30 minutes to create."
|
133
78
|
end
|
134
79
|
|
135
|
-
|
136
|
-
crt_private_key = OpenSSL::PKey::RSA.new(4096)
|
137
|
-
File.write(key_path, crt_private_key.to_pem)
|
138
|
-
|
139
|
-
csr = Acme::Client::CertificateRequest.new(private_key: crt_private_key, subject: { common_name: Clerk.config.app_host })
|
140
|
-
order.finalize(csr: csr)
|
141
|
-
sleep(1) while order.status == 'processing'
|
80
|
+
save_tunnel_cert_locally!
|
142
81
|
|
143
|
-
|
144
|
-
puts "=> [Clerk]
|
145
|
-
end
|
146
|
-
|
147
|
-
def self.start!
|
148
|
-
setup! unless ready?
|
82
|
+
setup_ngrok! unless ngrok_ready?
|
83
|
+
puts "=> [Clerk] Setup done."
|
149
84
|
|
150
85
|
self.patch_rack_requests
|
151
86
|
|
@@ -167,7 +102,7 @@ module Clerk
|
|
167
102
|
puts "=> Booting https://#{Clerk.config.app_host} with Clerk"
|
168
103
|
options = {
|
169
104
|
addr: server_options[:Port],
|
170
|
-
authtoken: Clerk.config.
|
105
|
+
authtoken: Clerk.config.ngrok_authtoken,
|
171
106
|
hostname: Clerk.config.app_host,
|
172
107
|
region: "us",
|
173
108
|
crt: Rails.root.join(".clerk/dev.crt"),
|
data/lib/clerk/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: clerk-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Clerk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-02-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|