+50
-1
src/did.rs
+50
-1
src/did.rs
···
61
61
};
62
62
return Ok(String::from(did));
63
63
}
64
+
65
+
fn parse_doc(did: String, text: String) -> Result<DidDoc, ()> {
66
+
return Ok(DidDoc { did: String::new() });
67
+
}
68
+
69
+
fn get_plc_doc(plc: &str) -> Result<DidDoc, ()> {
70
+
let res = match reqwest::blocking::get("https://plc.directory/did:plc".to_owned() + plc) {
71
+
Ok(val) => val,
72
+
Err(_) => return Err(()),
73
+
};
74
+
75
+
if !res.status().is_success() {
76
+
return Err(());
77
+
}
78
+
79
+
return parse_doc(
80
+
"did:plc:".to_owned() + plc,
81
+
match res.text() {
82
+
Ok(val) => val,
83
+
Err(_) => return Err(()),
84
+
},
85
+
);
86
+
}
87
+
88
+
fn get_web_doc(web: &str) -> Result<DidDoc, ()> {
89
+
let res = match reqwest::blocking::get("https://".to_owned() + web + "/.well-known/did.json") {
90
+
Ok(val) => val,
91
+
Err(_) => return Err(()),
92
+
};
93
+
94
+
if !res.status().is_success() {
95
+
return Err(());
96
+
}
97
+
98
+
return parse_doc(
99
+
"did:web:".to_owned() + web,
100
+
match res.text() {
101
+
Ok(val) => val,
102
+
Err(_) => return Err(()),
103
+
},
104
+
);
64
105
}
65
106
66
107
pub fn get_did(handle: String) -> Result<DidDoc, ()> {
···
74
115
}
75
116
};
76
117
77
-
return Ok(DidDoc { did });
118
+
let did_doc = if did.starts_with("did:plc:") {
119
+
get_plc_doc(&did[8..])
120
+
} else if did.starts_with("did:web:") {
121
+
get_web_doc(&did[8..])
122
+
} else {
123
+
Err(())
124
+
};
125
+
126
+
return did_doc;
78
127
}