Almost done with auth

TOOD:
Shared library for ErrorCode (30m),
Changing emails (1hr),
Username formatting (30m),
OAuth support (3hrs),
Testing (infinite)
This commit is contained in:
2024-07-02 23:47:57 -04:00
Unverified
parent 8495d1a1ba
commit a53c69ab56
6 changed files with 208 additions and 32 deletions

View File

@@ -8,7 +8,7 @@ use tarpc::server::{BaseChannel, Channel};
use tarpc::server::incoming::Incoming;
use tarpc::tokio_serde::formats::Json;
use realm_auth::server::RealmAuthServer;
use realm_auth::types::RealmAuth;
use realm_auth::types::{AuthEmail, RealmAuth};
async fn spawn(fut: impl Future<Output = ()> + Send + 'static) {
tokio::spawn(fut);
@@ -18,20 +18,28 @@ async fn spawn(fut: impl Future<Output = ()> + Send + 'static) {
async fn main() -> anyhow::Result<()> {
dotenv().ok();
let auth_email = AuthEmail {
server_address: env::var("SERVER_MAIL_ADDRESS").expect("SERVER_MAIL_ADDRESS must be set"),
server_port: env::var("SERVER_MAIL_PORT").expect("SERVER_MAIL_PORT must be set").parse::<u16>().expect("SERVER_MAIL_ADDRESS must be a number"),
auth_name: env::var("SERVER_MAIL_NAME").expect("SERVER_MAIL_NAME must be set"),
auth_from_address: env::var("SERVER_MAIL_FROM_ADDRESS").expect("SERVER_MAIL_FROM_ADDRESS must be set"),
auth_username: env::var("SERVER_MAIL_USERNAME").expect("SERVER_MAIL_USERNAME must be set"),
auth_password: env::var("SERVER_MAIL_PASSWORD").expect("SERVER_MAIL_PASSWORD must be set"),
};
let db_pool = MySqlPoolOptions::new()
.max_connections(64)
.connect(env::var("DATABASE_URL").expect("DATABASE_URL must be set").as_str()).await?;
sqlx::query(
"CREATE DATABASE IF NOT EXISTS realmauth; USE realmauth;"
).fetch_one(&db_pool).await?;
//TODO: In a docker container or figure out somewhere to do this command
//sqlx::query("CREATE DATABASE IF NOT EXISTS realmauth").execute(&db_pool).await?;
sqlx::query(
"CREATE TABLE IF NOT EXISTS user (
id SERIAL,
username VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
avatar TEXT NOT NULL
avatar TEXT NOT NULL,
login_code INT(6),
tokens TEXT,
google_oauth VARCHAR(255),
@@ -57,7 +65,7 @@ async fn main() -> anyhow::Result<()> {
// serve is generated by the service attribute. It takes as input any type implementing
// the generated World trait.
.map(|channel| {
let server = RealmAuthServer::new(channel.transport().peer_addr().unwrap(), db_pool);
let server = RealmAuthServer::new(channel.transport().peer_addr().unwrap(), db_pool.clone(), auth_email.clone());
channel.execute(server.serve()).for_each(spawn)
})
// Max 10 channels.