tsk-51: Refresh token endpoint #54
@@ -41,14 +41,49 @@ pub fn create_service_token(provided: &String, id: &uuid::Uuid) -> Result<(Strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn verify_token(key: &String, token: &String) -> bool {
|
pub fn verify_token(key: &String, token: &String) -> bool {
|
||||||
let ver = Hs256.verifier_from_bytes(key.as_bytes()).unwrap();
|
match get_payload(key, token) {
|
||||||
let (payload, _header) = jwt::decode_with_verifier(token, &ver).unwrap();
|
Ok((payload, _header)) => {
|
||||||
match payload.subject() {
|
match payload.subject() {
|
||||||
Some(_sub) => true,
|
Some(_sub) => true,
|
||||||
None => false,
|
None => false,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(_err) => {
|
||||||
|
false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn extract_id_from_token(key: &String, token: &String) -> Result<uuid::Uuid, std::io::Error> {
|
||||||
|
match get_payload(key, token) {
|
||||||
|
Ok((payload, _header)) => {
|
||||||
|
match payload.claim("id") {
|
||||||
|
Some(id) => {
|
||||||
|
match uuid::Uuid::parse_str(id.as_str().unwrap()) {
|
||||||
|
Ok(extracted) => {
|
||||||
|
Ok(extracted)
|
||||||
|
}
|
||||||
|
Err(err) => {
|
||||||
|
Err(std::io::Error::other(err.to_string()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
None => {
|
||||||
|
Err(std::io::Error::other("No claim found"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(err) => {
|
||||||
|
Err(std::io::Error::other(err.to_string()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_payload(key: &String, token: &String) -> Result<(josekit::jwt::JwtPayload, josekit::jws::JwsHeader), josekit::JoseError> {
|
||||||
|
let ver = Hs256.verifier_from_bytes(key.as_bytes()).unwrap();
|
||||||
|
jwt::decode_with_verifier(token, &ver)
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
Reference in New Issue
Block a user