- add: logout grpc function

- add: logout packet handler
- add: connection state and service for storing connection data
- add: session service calls to auth-service
- fix: compile error on database service due to moved redis cache
This commit is contained in:
2024-12-20 14:46:00 -05:00
parent 3c1f8c40d6
commit 18afa71d74
22 changed files with 265 additions and 46 deletions

View File

@@ -1,15 +1,19 @@
use axum::extract::State;
use axum::extract::{ConnectInfo, State};
use axum::{routing::post, Json, Router};
use serde::{Deserialize, Serialize};
use std::env;
use std::net::SocketAddr;
use std::sync::Arc;
use axum::http::Method;
use tonic::transport::Channel;
use tower_http::cors::{Any, CorsLayer};
use tower_http::trace::TraceLayer;
use tower::ServiceBuilder;
use auth::auth_service_client::AuthServiceClient;
use auth::{LoginRequest, RegisterRequest};
use log::error;
use log::{error, info};
use tokio::sync::Mutex;
pub mod auth {
@@ -25,6 +29,7 @@ struct RestLoginRequest {
#[derive(Serialize, Deserialize)]
struct RestLoginResponse {
token: String,
session_id: String,
}
#[derive(Serialize, Deserialize)]
@@ -41,19 +46,27 @@ struct RestRegisterResponse {
}
async fn login_handler(
ConnectInfo(addr): ConnectInfo<SocketAddr>,
State(grpc_client): State<Arc<Mutex<AuthServiceClient<Channel>>>>,
Json(payload): Json<RestLoginRequest>,
) -> Result<Json<RestLoginResponse>, axum::http::StatusCode> {
let ip_address = addr.ip().to_string();
info!("Client IP Address: {}", ip_address);
let request = tonic::Request::new(LoginRequest {
username: payload.username.clone(),
password: payload.password.clone(),
ip_address
});
let mut client = grpc_client.lock().await; // Lock the mutex to get mutable access
match client.login(request).await {
Ok(response) => {
let token = response.into_inner().token;
Ok(Json(RestLoginResponse { token }))
let resp = response.into_inner();
let token = resp.token;
let session_id = resp.session_id;
Ok(Json(RestLoginResponse { token, session_id }))
}
Err(e) => {
error!("gRPC Login call failed: {}", e);
@@ -63,6 +76,7 @@ async fn login_handler(
}
async fn register_handler(
ConnectInfo(addr): ConnectInfo<SocketAddr>,
State(grpc_client): State<Arc<Mutex<AuthServiceClient<Channel>>>>,
Json(payload): Json<RestRegisterRequest>,
) -> Result<Json<RestRegisterResponse>, axum::http::StatusCode> {
@@ -106,7 +120,7 @@ pub async fn serve_rest_api(
let listener = tokio::net::TcpListener::bind(format!("{}:{}", addr, port))
.await
.unwrap();
axum::serve(listener, app.into_make_service())
axum::serve(listener, app.into_make_service_with_connect_info::<SocketAddr>())
.await
.unwrap();