gets a 422 back from forgejo from user creation request

This commit is contained in:
Joe Ardent 2024-03-02 16:28:03 -08:00
parent 022f0e6325
commit bafc93f6af
3 changed files with 17 additions and 8 deletions

View file

@ -36,6 +36,7 @@ pub async fn post_signup(
Form(form): Form<SignupForm>, Form(form): Form<SignupForm>,
) -> Result<impl IntoResponse, CreateUserError> { ) -> Result<impl IntoResponse, CreateUserError> {
let user = validate_signup(&form).await?; let user = validate_signup(&form).await?;
dbg!(&*SIGNUP_KEY, &user);
session.insert(&SIGNUP_KEY, user).await.unwrap(); session.insert(&SIGNUP_KEY, user).await.unwrap();
Ok(Redirect::to( Ok(Redirect::to(
@ -46,7 +47,8 @@ pub async fn post_signup(
/// Redirected from Stripe with the receipt of payment. /// Redirected from Stripe with the receipt of payment.
pub async fn payment_success(session: Session, receipt: Option<Path<String>>) -> impl IntoResponse { pub async fn payment_success(session: Session, receipt: Option<Path<String>>) -> impl IntoResponse {
let user: User = session.get(&SIGNUP_KEY).await.unwrap().unwrap_or_default(); let user: User = session.get(&SIGNUP_KEY).await.unwrap().unwrap_or_default();
// dbg!(&session);
dbg!(&*SIGNUP_KEY, &user);
if receipt.is_none() { if receipt.is_none() {
log::info!("Got {:?} from the session, but no receipt.", &user); log::info!("Got {:?} from the session, but no receipt.", &user);
return CreateUserError(CreateUserErrorKind::BadPayment).into_response(); return CreateUserError(CreateUserErrorKind::BadPayment).into_response();
@ -58,11 +60,15 @@ pub async fn payment_success(session: Session, receipt: Option<Path<String>>) ->
return CreateUserError(CreateUserErrorKind::NoFormFound).into_response(); return CreateUserError(CreateUserErrorKind::NoFormFound).into_response();
} }
if !confirm_payment(&receipt) { if confirm_payment(&receipt) {
log::info!("Confirmed payment from {}", &receipt);
} else {
return CreateUserError(CreateUserErrorKind::BadPayment).into_response(); return CreateUserError(CreateUserErrorKind::BadPayment).into_response();
} }
if !create_user(&user) { if create_user(&user) {
log::info!("Created user {user:?}");
} else {
return CreateUserError(CreateUserErrorKind::AlreadyExists).into_response(); return CreateUserError(CreateUserErrorKind::AlreadyExists).into_response();
} }
// TODO: store the receipt into a durable store to prevent re-use after creating // TODO: store the receipt into a durable store to prevent re-use after creating
@ -85,8 +91,11 @@ fn create_user(user: &User) -> bool {
.expect("Could not find $ADD_USER_ENDPOINT in environment"); .expect("Could not find $ADD_USER_ENDPOINT in environment");
let auth_header = format!("token {token}"); let auth_header = format!("token {token}");
let user: ForgejoUser = user.into(); let user: ForgejoUser = user.into();
let resp = ureq::post(&format!("http://{url}/api/v1/admin/users")) dbg!(&user);
let resp = ureq::post(&format!("{url}/api/v1/admin/users"))
.set("Authorization", &auth_header) .set("Authorization", &auth_header)
.set("Content-Type", "application/json")
.set("accept", "application/json")
.send_json(user) .send_json(user)
.unwrap(); .unwrap();
resp.status() == 201 resp.status() == 201

View file

@ -34,7 +34,7 @@ async fn main() {
// just for signups // just for signups
let session_store = MemoryStore::default(); let session_store = MemoryStore::default();
let session_layer = SessionManagerLayer::new(session_store) let session_layer = SessionManagerLayer::new(session_store)
.with_secure(true) .with_secure(false)
.with_expiry(Expiry::OnInactivity(time::Duration::hours(2))); .with_expiry(Expiry::OnInactivity(time::Duration::hours(2)));
// the core application, defining the routes and handlers // the core application, defining the routes and handlers

View file

@ -44,10 +44,10 @@ impl Display for User {
} }
} }
#[derive(Clone, PartialEq, Eq, Deserialize, Serialize, Default)] #[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize, Default)]
pub struct ForgejoUser<'u> { pub struct ForgejoUser<'u> {
pub username: &'u str, pub username: &'u str,
pub full_name: Option<&'u str>, pub full_name: String,
pub email: &'u str, pub email: &'u str,
pub password: &'u str, pub password: &'u str,
pub must_change_password: bool, pub must_change_password: bool,
@ -57,7 +57,7 @@ impl<'u> From<&'u User> for ForgejoUser<'u> {
fn from(user: &'u User) -> Self { fn from(user: &'u User) -> Self {
Self { Self {
username: &user.username, username: &user.username,
full_name: user.displayname.as_deref(), full_name: user.displayname.to_owned().unwrap_or(user.username.clone()),
email: &user.email, email: &user.email,
password: &user.password, password: &user.password,
must_change_password: false, must_change_password: false,