- 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:
@@ -17,7 +17,7 @@ tracing = "0.1.41"
|
||||
tracing-subscriber = "0.3.19"
|
||||
utils = { path = "../utils" }
|
||||
dotenv = "0.15"
|
||||
tower-http = { version = "0.6.2", features = ["cors"] }
|
||||
tower-http = { version = "0.6.2", features = ["cors", "trace"] }
|
||||
|
||||
[build-dependencies]
|
||||
tonic-build = "0.12.3"
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user