Compare commits
2 Commits
65e83ecb1f
...
2249d986eb
Author | SHA1 | Date |
---|---|---|
|
2249d986eb | |
|
ec07371cb3 |
|
@ -10,10 +10,13 @@ use axum_extra::{
|
||||||
};
|
};
|
||||||
use cookie::time::Duration;
|
use cookie::time::Duration;
|
||||||
|
|
||||||
use crate::server::{
|
use crate::{
|
||||||
error::{AppError, AppResult},
|
gpodder,
|
||||||
gpodder::SESSION_ID_COOKIE,
|
server::{
|
||||||
Context,
|
error::{AppError, AppResult},
|
||||||
|
gpodder::SESSION_ID_COOKIE,
|
||||||
|
Context,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
pub fn router() -> Router<Context> {
|
pub fn router() -> Router<Context> {
|
||||||
|
@ -33,6 +36,31 @@ async fn post_login(
|
||||||
return Err(AppError::BadRequest);
|
return Err(AppError::BadRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If a session token is present, we check if it's valid first and do nothing if it is
|
||||||
|
if let Some(session_id) = jar
|
||||||
|
.get(SESSION_ID_COOKIE)
|
||||||
|
.and_then(|c| c.value().parse::<i64>().ok())
|
||||||
|
{
|
||||||
|
let ctx = ctx.clone();
|
||||||
|
match tokio::task::spawn_blocking(move || {
|
||||||
|
let session = ctx.store.get_session(session_id)?;
|
||||||
|
ctx.store.refresh_session(&session)?;
|
||||||
|
|
||||||
|
Ok(session)
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
.unwrap()
|
||||||
|
{
|
||||||
|
Ok(_) => {
|
||||||
|
return Ok(jar);
|
||||||
|
}
|
||||||
|
Err(gpodder::AuthErr::UnknownSession) => {}
|
||||||
|
Err(err) => {
|
||||||
|
return Err(AppError::from(err));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let session = tokio::task::spawn_blocking(move || {
|
let session = tokio::task::spawn_blocking(move || {
|
||||||
let user = ctx
|
let user = ctx
|
||||||
.store
|
.store
|
||||||
|
@ -43,7 +71,12 @@ async fn post_login(
|
||||||
.unwrap()?;
|
.unwrap()?;
|
||||||
|
|
||||||
Ok(jar.add(
|
Ok(jar.add(
|
||||||
Cookie::build((SESSION_ID_COOKIE, session.id.to_string())).max_age(Duration::days(365)),
|
Cookie::build((SESSION_ID_COOKIE, session.id.to_string()))
|
||||||
|
.secure(false)
|
||||||
|
.same_site(cookie::SameSite::Strict)
|
||||||
|
.http_only(true)
|
||||||
|
.path("/api")
|
||||||
|
.max_age(Duration::days(365)),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use chrono::{DateTime, Utc};
|
use chrono::{DateTime, NaiveDateTime, Utc};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
use crate::gpodder;
|
use crate::gpodder;
|
||||||
|
@ -66,7 +66,7 @@ pub enum EpisodeActionType {
|
||||||
pub struct EpisodeAction {
|
pub struct EpisodeAction {
|
||||||
pub podcast: String,
|
pub podcast: String,
|
||||||
pub episode: String,
|
pub episode: String,
|
||||||
pub timestamp: Option<i64>,
|
pub timestamp: Option<NaiveDateTime>,
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub device: Option<String>,
|
pub device: Option<String>,
|
||||||
#[serde(flatten)]
|
#[serde(flatten)]
|
||||||
|
@ -160,7 +160,7 @@ impl From<gpodder::EpisodeAction> for EpisodeAction {
|
||||||
Self {
|
Self {
|
||||||
podcast: value.podcast,
|
podcast: value.podcast,
|
||||||
episode: value.episode,
|
episode: value.episode,
|
||||||
timestamp: value.timestamp.map(|ts| ts.timestamp()),
|
timestamp: value.timestamp.map(|ts| ts.naive_utc()),
|
||||||
device: value.device,
|
device: value.device,
|
||||||
action: value.action.into(),
|
action: value.action.into(),
|
||||||
}
|
}
|
||||||
|
@ -173,9 +173,7 @@ impl From<EpisodeAction> for gpodder::EpisodeAction {
|
||||||
podcast: value.podcast,
|
podcast: value.podcast,
|
||||||
episode: value.episode,
|
episode: value.episode,
|
||||||
// TODO remove this unwrap
|
// TODO remove this unwrap
|
||||||
timestamp: value
|
timestamp: value.timestamp.map(|ts| ts.and_utc()),
|
||||||
.timestamp
|
|
||||||
.map(|ts| DateTime::from_timestamp(ts, 0).unwrap()),
|
|
||||||
device: value.device,
|
device: value.device,
|
||||||
action: value.action.into(),
|
action: value.action.into(),
|
||||||
time_changed: DateTime::<Utc>::MIN_UTC,
|
time_changed: DateTime::<Utc>::MIN_UTC,
|
||||||
|
|
Loading…
Reference in New Issue