tangled
alpha
login
or
join now
mackuba.eu
/
didkit
1
fork
atom
A library for handling DID identifiers used in Bluesky AT Protocol
1
fork
atom
overview
issues
pulls
pipelines
allow passing a DID to resolve_handle for convenience
mackuba.eu
2 months ago
557aa134
a4ec9a7c
+10
-4
3 changed files
expand all
collapse all
unified
split
bin
resolve
lib
didkit
did.rb
resolver.rb
+1
-1
bin/resolve
···
12
12
begin
13
13
query = ARGV[0].to_s
14
14
15
15
-
if query =~ /^did\:/
15
15
+
if query =~ DID::GENERIC_REGEXP
16
16
did = DID.new(query)
17
17
elsif query =~ /^@[\w\-]+(\.[\w\-]+)+$/
18
18
did = resolver.resolve_handle(query)
+4
-2
lib/didkit/did.rb
···
7
7
8
8
module DIDKit
9
9
class DID
10
10
+
GENERIC_REGEXP = /\Adid\:\w+\:.+\z/
11
11
+
10
12
include Requests
11
13
12
14
def self.resolve_handle(handle)
···
16
18
attr_reader :type, :did, :resolved_by
17
19
18
20
def initialize(did, resolved_by = nil)
19
19
-
if did =~ /^did\:(\w+)\:/
21
21
+
if did =~ GENERIC_REGEXP
20
22
@did = did
21
21
-
@type = $1.to_sym
23
23
+
@type = did.split(':')[1].to_sym
22
24
else
23
25
raise DIDError.new("Invalid DID format")
24
26
end
+5
-1
lib/didkit/resolver.rb
···
19
19
end
20
20
21
21
def resolve_handle(handle)
22
22
+
if handle =~ DID::GENERIC_REGEXP
23
23
+
return DID.new(handle)
24
24
+
end
25
25
+
22
26
domain = handle.gsub(/^@/, '')
23
27
24
28
return nil if RESERVED_DOMAINS.include?(domain.split('.').last)
···
71
75
72
76
def parse_did_from_well_known(text)
73
77
text = text.strip
74
74
-
text.lines.length == 1 && text =~ /\Adid\:\w+\:.*\z/ ? text : nil
78
78
+
text.lines.length == 1 && text =~ DID::GENERIC_REGEXP ? text : nil
75
79
end
76
80
77
81
def resolve_did(did)