fix(web)!: store full user id in auth

This commit is contained in:
əlemi 2024-05-02 02:07:11 +02:00
parent 0435c779c5
commit 4f477fd072
Signed by: alemi
GPG key ID: A4895B84D311642C
2 changed files with 19 additions and 8 deletions

View file

@ -12,9 +12,9 @@ pub fn App() -> impl IntoView {
UseCookieOptions::default()
.max_age(1000 * 60 * 60 * 6)
);
let (user, set_username) = use_cookie::<String, FromToStringCodec>("username");
let (userid, set_userid) = use_cookie::<String, FromToStringCodec>("user_id");
let auth = Auth { token, user };
let auth = Auth { token, userid };
provide_context(auth);
let home_tl = Timeline::new(format!("{URL_BASE}/users/{}/inbox/page", auth.username()));
@ -59,7 +59,7 @@ pub fn App() -> impl IntoView {
<div class="col-side sticky pb-s" class:hidden=move || menu.get() >
<LoginBox
token_tx=set_token
username_tx=set_username
userid_tx=set_userid
home_tl=home_tl
server_tl=server_tl
/>

View file

@ -5,6 +5,7 @@ use crate::prelude::*;
pub trait AuthToken {
fn present(&self) -> bool;
fn token(&self) -> String;
fn user_id(&self) -> String;
fn username(&self) -> String;
fn outbox(&self) -> String;
}
@ -12,14 +13,14 @@ pub trait AuthToken {
#[derive(Debug, Clone, Copy)]
pub struct Auth {
pub token: Signal<Option<String>>,
pub user: Signal<Option<String>>,
pub userid: Signal<Option<String>>,
}
#[component]
pub fn LoginBox(
token_tx: WriteSignal<Option<String>>,
username_tx: WriteSignal<Option<String>>,
userid_tx: WriteSignal<Option<String>>,
home_tl: Timeline,
server_tl: Timeline,
) -> impl IntoView {
@ -61,7 +62,7 @@ pub fn LoginBox(
logging::log!("logged in until {}", auth_response.expires);
// update our username and token cookies
let username = auth_response.user.split('/').last().unwrap_or_default().to_string();
username_tx.set(Some(username.clone()));
userid_tx.set(Some(auth_response.user));
token_tx.set(Some(auth_response.token));
// reset home feed and point it to our user's inbox
home_tl.reset(format!("{URL_BASE}/users/{}/inbox/page", username));
@ -107,9 +108,19 @@ impl AuthToken for Auth {
fn token(&self) -> String {
self.token.get().unwrap_or_default()
}
fn user_id(&self) -> String {
self.userid.get().unwrap_or_default()
}
fn username(&self) -> String {
self.user.get().unwrap_or_default()
// TODO maybe cache this?? how often do i need it?
self.userid.get()
.unwrap_or_default()
.split('/')
.last()
.unwrap_or_default()
.to_string()
}
fn present(&self) -> bool {
@ -117,6 +128,6 @@ impl AuthToken for Auth {
}
fn outbox(&self) -> String {
format!("{URL_BASE}/users/{}/outbox", self.user.get().unwrap_or_default())
format!("{URL_BASE}/users/{}/outbox", self.username())
}
}