use rustlavel::prelude::*;
use rustlavel::oauth_provider::database::{
DatabaseClientStore, DatabaseCodeStore, DatabaseConsentStore, DatabaseTokenStore,
};
use rustlavel::oauth_provider::{AuthorizationServer, OAuthProvider};
#[path = "../database/migrations/mod.rs"]
mod migrations;
#[path = "../database/seeders/mod.rs"]
mod seeders;
#[rustlavel::main]
async fn main() -> Result<()> {
let app = App::new()?;
let url = rustlavel::env::env_or("AUTH_DATABASE_URL", "");
if url.is_empty() {
return Err(Error::msg(
"AUTH_DATABASE_URL is not set. The authorization server keeps users, clients and tokens \
in its own database, separate from the resource server's.",
));
}
let db = Database::connect(&url).await?;
let registrar = {{crate_name}}_shared::join("auth", app.config());
let server = AuthorizationServer::new(DatabaseClientStore::new(db.clone()))
.storing_codes(DatabaseCodeStore::new(db.clone()))
.storing_tokens(DatabaseTokenStore::new(db.clone()))
.storing_consent(DatabaseConsentStore::new(db.clone()))
.configured(app.config());
app.on_shutdown({{crate_name}}_shared::farewell(registrar))
.state(db.clone())
.plugin(OAuthProvider::new(server))
.migrations(migrations::all())
.seeders(seeders::all())
.routes(routes)
.run()
.await
}
fn routes(r: &mut Router) {
r.get("/health", |_req: Request| async { Json::object([("status", Json::from("up"))]) });
}