add: app sdk client auth flow example
This commit is contained in:
parent
0138bf4cd4
commit
9ccbc69405
9 changed files with 95 additions and 27 deletions
|
@ -112,7 +112,7 @@ macro_rules! get_user_from_token {
|
|||
Ok((grant, ua)) => {
|
||||
if grant.scopes.contains(&$grant_scope) {
|
||||
if ua.permissions.check_banned() {
|
||||
Some(tetratto_core::model::auth::User::banned())
|
||||
None
|
||||
} else {
|
||||
Some(ua)
|
||||
}
|
||||
|
|
|
@ -180,7 +180,8 @@
|
|||
(li (b (text "Redirect URL: ")) (text "{{ app.redirect }}"))
|
||||
(li (b (text "Quota status: ")) (text "{{ app.quota_status }}"))
|
||||
(li (b (text "User grants: ")) (text "{{ app.grants }}"))
|
||||
(li (b (text "Grant URL: ")) (text "{{ config.host }}/auth/connections_link/app/{{ app.id }}")))
|
||||
(li (b (text "Grant URL: ")) (text "{{ config.host }}/auth/connections_link/app/{{ app.id }}"))
|
||||
(li (b (text "App ID (for SDK): ")) (text "{{ app.id }}")))
|
||||
|
||||
(a
|
||||
("class" "button")
|
||||
|
|
|
@ -41,8 +41,7 @@
|
|||
("id" "homepage")
|
||||
("placeholder" "homepage")
|
||||
("required" "")
|
||||
("minlength" "2")
|
||||
("maxlength" "32")))
|
||||
("minlength" "2")))
|
||||
(div
|
||||
("class" "flex flex-col gap-1")
|
||||
(label
|
||||
|
@ -53,8 +52,7 @@
|
|||
("name" "redirect")
|
||||
("id" "redirect")
|
||||
("placeholder" "redirect URL")
|
||||
("minlength" "2")
|
||||
("maxlength" "32")))
|
||||
("minlength" "2")))
|
||||
(button
|
||||
(text "{{ text \"communities:action.create\" }}"))))
|
||||
|
||||
|
|
|
@ -176,11 +176,7 @@ export default function tetratto({
|
|||
window.localStorage.setItem("atto:grant.user_id", uid);
|
||||
}
|
||||
|
||||
async function refresh_token(verifier) {
|
||||
if (!user_token) {
|
||||
throw Error("No user token provided.");
|
||||
}
|
||||
|
||||
async function refresh_token() {
|
||||
return api_promise(
|
||||
json_parse(
|
||||
await (
|
||||
|
@ -190,10 +186,10 @@ export default function tetratto({
|
|||
method,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
"X-Cookie": `__Secure-atto-token=${user_token}`,
|
||||
"X-Cookie": `Atto-Grant=${user_token}`,
|
||||
},
|
||||
body: json_stringify({
|
||||
verifier,
|
||||
verifier: user_verifier,
|
||||
}),
|
||||
},
|
||||
)
|
||||
|
@ -203,10 +199,10 @@ export default function tetratto({
|
|||
}
|
||||
|
||||
async function request({
|
||||
api_path,
|
||||
route,
|
||||
method = "POST",
|
||||
content_type = "application/json",
|
||||
body = "{}",
|
||||
body = {},
|
||||
}) {
|
||||
if (!user_token) {
|
||||
throw Error("No user token provided.");
|
||||
|
@ -215,16 +211,19 @@ export default function tetratto({
|
|||
return api_promise(
|
||||
json_parse(
|
||||
await (
|
||||
await fetch(`${host}/api/v1/${api_path}`, {
|
||||
await fetch(`${host}/api/v1/${route}`, {
|
||||
method,
|
||||
headers: {
|
||||
"Content-Type": content_type,
|
||||
"X-Cookie": `__Secure-atto-token=${user_token}`,
|
||||
"Content-Type":
|
||||
method === "GET" ? null : content_type,
|
||||
"X-Cookie": `Atto-Grant=${user_token}`,
|
||||
},
|
||||
body:
|
||||
content_type === "application/json"
|
||||
? json_stringify(body)
|
||||
: body,
|
||||
method === "GET"
|
||||
? null
|
||||
: content_type === "application/json"
|
||||
? json_stringify(body)
|
||||
: body,
|
||||
})
|
||||
).text(),
|
||||
),
|
||||
|
@ -233,6 +232,11 @@ export default function tetratto({
|
|||
|
||||
// ...
|
||||
return {
|
||||
user_id,
|
||||
user_token,
|
||||
user_verifier,
|
||||
app_id,
|
||||
api_key,
|
||||
// app data
|
||||
app,
|
||||
query,
|
||||
|
|
|
@ -196,8 +196,8 @@ impl DataManager {
|
|||
|
||||
let res = query_row!(
|
||||
&conn,
|
||||
"SELECT * FROM users WHERE (SELECT jsonb_array_elements(grants::jsonb) @> ('{\"token\":\"' || $1 || '\"}')::jsonb)",
|
||||
&[&token],
|
||||
"SELECT * FROM users WHERE grants LIKE $1",
|
||||
&[&format!("%\"token\":\"{token}\"%")],
|
||||
|x| Ok(Self::get_user_from_row(x))
|
||||
);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue