terminalwire 0.1.13 → 0.1.15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/terminalwire/authority.rb +49 -0
- data/lib/terminalwire/client/entitlement.rb +7 -16
- data/lib/terminalwire/client.rb +0 -9
- data/lib/terminalwire/licensing.rb +9 -5
- data/lib/terminalwire/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7368802178d36d058c4502624e50e831358e6b4bc47bbb40a18a8837063443a7
|
4
|
+
data.tar.gz: eaeedd98707062d3a639250cb53e3dd619bcd3d63b1e2a6ee51d916edb5da9df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0fb8c62c74528e3de4701ebced6e3e794d973ca67eddfdc140a645e9ecc676ae994095a3d08b4da731f3c87bf258018818d55562325016b4f4eee6dd9f17a6f
|
7
|
+
data.tar.gz: d27e62fdcf8582293fb89395acd0e9e9282c616fbb8eb9b8592f95b1a931465011ab9d006b11afa23d1719e1c97e0a61b9ffcb74619aec03f3f1a2286b57e2b6
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require "uri"
|
2
|
+
require "base64"
|
3
|
+
|
4
|
+
# Resolves domains into authorities, which are is used for access
|
5
|
+
# identity control in Terminalwire.
|
6
|
+
class Terminalwire::Authority
|
7
|
+
# Used to seperate path keys in the URL.
|
8
|
+
PATH_SEPERATOR = "/".freeze
|
9
|
+
|
10
|
+
# Used to demark a URL string as authorative.
|
11
|
+
SCHEME = "terminalwire://".freeze
|
12
|
+
|
13
|
+
def initialize(url:)
|
14
|
+
@url = URI(url)
|
15
|
+
end
|
16
|
+
|
17
|
+
# Extracted from HTTP. This is so we can
|
18
|
+
def domain
|
19
|
+
if @url.port == @url.default_port
|
20
|
+
@url.host
|
21
|
+
else
|
22
|
+
"#{@url.host}:#{@url.port}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# Useful for identifying the authority in UI without the protocol.
|
27
|
+
def name
|
28
|
+
[domain, path].join
|
29
|
+
end
|
30
|
+
|
31
|
+
# Make sure there's always a / at the end of the path.
|
32
|
+
def path
|
33
|
+
path_keys.join(PATH_SEPERATOR).prepend(PATH_SEPERATOR)
|
34
|
+
end
|
35
|
+
|
36
|
+
def to_s
|
37
|
+
[SCHEME, domain, path].join
|
38
|
+
end
|
39
|
+
|
40
|
+
def key
|
41
|
+
Base64.urlsafe_encode64(to_s)
|
42
|
+
end
|
43
|
+
|
44
|
+
protected
|
45
|
+
|
46
|
+
def path_keys
|
47
|
+
@url.path.scan(/[^\/]+/)
|
48
|
+
end
|
49
|
+
end
|
@@ -145,7 +145,8 @@ module Terminalwire::Client
|
|
145
145
|
end
|
146
146
|
|
147
147
|
def authority_path
|
148
|
-
|
148
|
+
# TODO: Change this so it's per endpoint and not domain
|
149
|
+
root_path.join("authorities/#{authority.domain}")
|
149
150
|
end
|
150
151
|
|
151
152
|
def storage_path
|
@@ -158,7 +159,7 @@ module Terminalwire::Client
|
|
158
159
|
|
159
160
|
def serialize
|
160
161
|
{
|
161
|
-
authority: @authority,
|
162
|
+
authority: @authority.to_s,
|
162
163
|
schemes: @schemes.serialize,
|
163
164
|
paths: @paths.serialize,
|
164
165
|
storage_path: storage_path.to_s,
|
@@ -203,23 +204,13 @@ module Terminalwire::Client
|
|
203
204
|
end
|
204
205
|
|
205
206
|
def self.from_url(url)
|
206
|
-
|
207
|
+
authority = Terminalwire::Authority.new(url:)
|
207
208
|
|
208
|
-
case
|
209
|
+
case authority.domain
|
209
210
|
when RootPolicy::HOST
|
210
|
-
RootPolicy.new
|
211
|
+
RootPolicy.new authority:
|
211
212
|
else
|
212
|
-
Policy.new authority:
|
213
|
-
end
|
214
|
-
end
|
215
|
-
|
216
|
-
def self.url_authority(url)
|
217
|
-
# I had to lift this from URI::HTTP because `ws://` doesn't
|
218
|
-
# have an authority method.
|
219
|
-
if url.port == url.default_port
|
220
|
-
url.host
|
221
|
-
else
|
222
|
-
"#{url.host}:#{url.port}"
|
213
|
+
Policy.new authority:
|
223
214
|
end
|
224
215
|
end
|
225
216
|
end
|
data/lib/terminalwire/client.rb
CHANGED
@@ -53,15 +53,6 @@ module Terminalwire
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
# Extracted from HTTP. This is so we can
|
57
|
-
def self.authority(url)
|
58
|
-
if url.port == url.default_port
|
59
|
-
url.host
|
60
|
-
else
|
61
|
-
"#{url.host}:#{url.port}"
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
56
|
def self.websocket(url:, arguments: ARGV, entitlement: nil)
|
66
57
|
url = URI(url)
|
67
58
|
|
@@ -14,6 +14,10 @@ module Terminalwire::Licensing
|
|
14
14
|
generate_private_key.to_pem
|
15
15
|
end
|
16
16
|
|
17
|
+
def self.time
|
18
|
+
Time.now.utc
|
19
|
+
end
|
20
|
+
|
17
21
|
# Handles encoding data into a license key with prefixes that can be packed and unpacked.
|
18
22
|
module Key
|
19
23
|
# Mix into classes that need to generate or read keys
|
@@ -84,10 +88,10 @@ module Terminalwire::Licensing
|
|
84
88
|
|
85
89
|
VERSION = "1.0".freeze
|
86
90
|
|
87
|
-
def initialize(public_key:, license_url:)
|
91
|
+
def initialize(public_key:, license_url:, generated_at: Terminalwire::Licensing.time)
|
88
92
|
@public_key = public_key
|
89
93
|
@license_url = URI(license_url)
|
90
|
-
@generated_at =
|
94
|
+
@generated_at = generated_at
|
91
95
|
end
|
92
96
|
|
93
97
|
def to_h
|
@@ -111,7 +115,7 @@ module Terminalwire::Licensing
|
|
111
115
|
|
112
116
|
# This means the server will tolerate a 10 minute drift in the generated_at time.
|
113
117
|
def self.drift
|
114
|
-
now =
|
118
|
+
now = Terminalwire::Licensing.time
|
115
119
|
(now - DRIFT_SECONDS)...(now + DRIFT_SECONDS)
|
116
120
|
end
|
117
121
|
|
@@ -147,10 +151,10 @@ module Terminalwire::Licensing
|
|
147
151
|
include Key::Serialization
|
148
152
|
PREFIX = "client_key_".freeze
|
149
153
|
|
150
|
-
def initialize(server_key:)
|
154
|
+
def initialize(server_key:, generated_at: Terminalwire::Licensing.time)
|
151
155
|
@data = Issuer::ServerKeyGenerator.deserialize server_key
|
152
|
-
@generated_at = Time.now.utc
|
153
156
|
@license_url = URI(@data.fetch("license_url"))
|
157
|
+
@generated_at = generated_at
|
154
158
|
end
|
155
159
|
|
156
160
|
def to_h
|
data/lib/terminalwire/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: terminalwire
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brad Gessler
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-10-
|
11
|
+
date: 2024-10-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async-websocket
|
@@ -161,6 +161,7 @@ files:
|
|
161
161
|
- lib/generators/terminalwire/install/templates/main_terminal.rb
|
162
162
|
- lib/terminalwire.rb
|
163
163
|
- lib/terminalwire/adapter.rb
|
164
|
+
- lib/terminalwire/authority.rb
|
164
165
|
- lib/terminalwire/client.rb
|
165
166
|
- lib/terminalwire/client/entitlement.rb
|
166
167
|
- lib/terminalwire/client/exec.rb
|