Compare commits
No commits in common. "main" and "1.2.2" have entirely different histories.
6 changed files with 53 additions and 81 deletions
|
@ -7,25 +7,12 @@ on:
|
|||
- '[0-9]+.[0-9]+.[0-9]+'
|
||||
- '[0-9]+.[0-9]+.[0-9]+rc[0-9]+'
|
||||
jobs:
|
||||
test:
|
||||
run-tests:
|
||||
runs-on: docker
|
||||
steps:
|
||||
-
|
||||
name: Checking Out Repository Code
|
||||
uses: https://code.forgejo.org/actions/checkout@v3
|
||||
-
|
||||
name: Placeholder
|
||||
run: echo Placeholder Job
|
||||
-
|
||||
name: Check if Version in Cargo.toml matches Tag
|
||||
run: |
|
||||
VERSION=$(cat Cargo.toml | grep -E "(^|\|)version =" | cut -f2- -d= | tr -d \" | tr -d " ")
|
||||
if test $VERSION != "${{ github.ref_name }}"; then
|
||||
echo "Expected Version is: '${{ github.ref_name }}' actual Version is: '$VERSION'";
|
||||
exit 1
|
||||
else
|
||||
echo "Version is: '$VERSION'";
|
||||
fi
|
||||
|
||||
build:
|
||||
needs: test
|
||||
|
|
2
Cargo.lock
generated
2
Cargo.lock
generated
|
@ -397,7 +397,7 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
|||
|
||||
[[package]]
|
||||
name = "chellaris-rust-api"
|
||||
version = "1.2.4"
|
||||
version = "1.0.3"
|
||||
dependencies = [
|
||||
"actix-web",
|
||||
"chrono",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "chellaris-rust-api"
|
||||
version = "1.2.4"
|
||||
version = "1.0.3"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
|
17
src/main.rs
17
src/main.rs
|
@ -221,9 +221,9 @@ async fn main() {
|
|||
struct ApiDocV1;
|
||||
|
||||
let openapi_urls = vec![
|
||||
Url::new("v1", concat!(api_base!(), "-docs/openapi1.json")),
|
||||
Url::new("v2-L", concat!(api_base!(), "-docs/openapi2l.json")),
|
||||
Url::new("v3-L", concat!(api_base!(), "-docs/openapi3l.json")),
|
||||
Url::new("v1", concat!(api_base_1!(), "/openapi.json")),
|
||||
Url::new("v2-L", concat!(api_base_2!(), "/openapi.json")),
|
||||
Url::new("v3-L", concat!(api_base_3!(), "/openapi.json")),
|
||||
];
|
||||
|
||||
loop {
|
||||
|
@ -249,11 +249,6 @@ async fn main() {
|
|||
println!(" -> http://{}:{}", Ipv4Addr::UNSPECIFIED, 8080);
|
||||
|
||||
let watchdog_thread = tokio::spawn(async move { postgres_watchdog(pool_copy, shutdown_clone).await });
|
||||
tokio::spawn(async move {
|
||||
actix_web::rt::signal::unix::signal(SignalKind::terminate()).unwrap().recv().await;
|
||||
println!("SIGTERM received, killing Server");
|
||||
abort()
|
||||
});
|
||||
tokio::spawn(async move {
|
||||
actix_web::rt::signal::unix::signal(SignalKind::interrupt()).unwrap().recv().await;
|
||||
println!("SIGINT received, killing Server");
|
||||
|
@ -299,15 +294,15 @@ async fn main() {
|
|||
SwaggerUi::new(concat!(api_base!(), "/swagger/{_:.*}"))
|
||||
.urls(vec![
|
||||
(
|
||||
Url::new("v1", concat!(api_base!(), "-docs/openapi1.json")),
|
||||
Url::new("v1", concat!(api_base_1!(), "/openapi.json")),
|
||||
openapi_v1.clone(),
|
||||
),
|
||||
(
|
||||
Url::new("v2-l", concat!(api_base!(), "-docs/openapi2l.json")),
|
||||
Url::new("v2-l", concat!(api_base_2!(), "/openapi.json")),
|
||||
openapi_v2_l.clone(),
|
||||
),
|
||||
(
|
||||
Url::new("v3-l", concat!(api_base!(), "-docs/openapi3l.json")),
|
||||
Url::new("v3-l", concat!(api_base_3!(), "/openapi.json")),
|
||||
openapi_v3_l.clone(),
|
||||
),
|
||||
])
|
||||
|
|
|
@ -48,7 +48,7 @@ async fn verify_user_auth(data: &web::Data<AppState>, auth_token: &str, user_tok
|
|||
|
||||
// User Endpoints
|
||||
#[utoipa::path(
|
||||
request_body = GetUserParams,
|
||||
request_body = schemas::GetUserParams,
|
||||
responses(
|
||||
(status = 200, description = "OK", body = User),
|
||||
(status = 403, description = "Unauthorized"),
|
||||
|
@ -58,8 +58,8 @@ async fn verify_user_auth(data: &web::Data<AppState>, auth_token: &str, user_tok
|
|||
("api_key" = [])
|
||||
),
|
||||
)]
|
||||
#[post("/api/v1/user")]
|
||||
pub(crate) async fn get_user(
|
||||
#[get("/api/v1/user")]
|
||||
async fn get_user(
|
||||
data: web::Data<AppState>,
|
||||
params: web::Json<schemas::GetUserParams>,
|
||||
req: HttpRequest,
|
||||
|
@ -116,7 +116,7 @@ pub(crate) async fn get_user(
|
|||
(status = 500, description = "Internal Server Error")
|
||||
),
|
||||
)]
|
||||
#[post("/api/v1/user/create")]
|
||||
#[post("/api/v1/user")]
|
||||
pub(crate) async fn create_user(
|
||||
data: web::Data<AppState>,
|
||||
) -> impl Responder {
|
||||
|
@ -195,17 +195,9 @@ pub(crate) async fn update_user(
|
|||
None => return HttpResponse::Unauthorized().finish(),
|
||||
};
|
||||
|
||||
let mut user_permissions: HashMap<String, bool> = HashMap::new();
|
||||
match params.permissions {
|
||||
Some(data) => {user_permissions = data.clone()},
|
||||
None => {},
|
||||
}
|
||||
|
||||
let mut elevated_auth = false;
|
||||
if user_permissions.len() != 0 {
|
||||
if user_permissions["game_permissions"] || user_permissions["empire_permissions"] || user_permissions["data_permissions"] || user_permissions["user_permissions"] {
|
||||
elevated_auth = true;
|
||||
}
|
||||
if params.permissions["game_permissions"] || params.permissions["empire_permissions"] || params.permissions["data_permissions"] || params.permissions["user_permissions"] {
|
||||
elevated_auth = true;
|
||||
}
|
||||
|
||||
let auth = verify_user_auth(&data, &auth_token, ¶ms.user_token, schemas::TablePermission::User, elevated_auth).await;
|
||||
|
@ -233,43 +225,41 @@ pub(crate) async fn update_user(
|
|||
any_param_present = true;
|
||||
}
|
||||
|
||||
if user_permissions.len() != 0 {
|
||||
for (entry, value) in user_permissions.iter() {
|
||||
match entry.deref() {
|
||||
"game_permissions" => {
|
||||
user_query_separated.push( " game_permissions = ");
|
||||
match any_param_present {
|
||||
true => user_query_separated.push_bind(value),
|
||||
false => user_query_separated.push_bind_unseparated(value)
|
||||
};
|
||||
any_param_present = true;
|
||||
},
|
||||
"empire_permissions" => {
|
||||
user_query_separated.push( " empire_permissions = ");
|
||||
match any_param_present {
|
||||
true => user_query_separated.push_bind(value),
|
||||
false => user_query_separated.push_bind_unseparated(value)
|
||||
};
|
||||
any_param_present = true;
|
||||
},
|
||||
"data_permissions" => {
|
||||
user_query_separated.push( " data_permissions = ");
|
||||
match any_param_present {
|
||||
true => user_query_separated.push_bind(value),
|
||||
false => user_query_separated.push_bind_unseparated(value)
|
||||
};
|
||||
any_param_present = true;
|
||||
},
|
||||
"user_permissions" => {
|
||||
user_query_separated.push( " user_permissions = ");
|
||||
match any_param_present {
|
||||
true => user_query_separated.push_bind(value),
|
||||
false => user_query_separated.push_bind_unseparated(value)
|
||||
};
|
||||
any_param_present = true;
|
||||
},
|
||||
_ => {}
|
||||
}
|
||||
for (entry, value) in params.permissions.iter() {
|
||||
match entry.deref() {
|
||||
"game_permissions" => {
|
||||
user_query_separated.push( " game_permissions = ");
|
||||
match any_param_present {
|
||||
true => user_query_separated.push_bind(value),
|
||||
false => user_query_separated.push_bind_unseparated(value)
|
||||
};
|
||||
any_param_present = true;
|
||||
},
|
||||
"empire_permissions" => {
|
||||
user_query_separated.push( " empire_permissions = ");
|
||||
match any_param_present {
|
||||
true => user_query_separated.push_bind(value),
|
||||
false => user_query_separated.push_bind_unseparated(value)
|
||||
};
|
||||
any_param_present = true;
|
||||
},
|
||||
"data_permissions" => {
|
||||
user_query_separated.push( " data_permissions = ");
|
||||
match any_param_present {
|
||||
true => user_query_separated.push_bind(value),
|
||||
false => user_query_separated.push_bind_unseparated(value)
|
||||
};
|
||||
any_param_present = true;
|
||||
},
|
||||
"user_permissions" => {
|
||||
user_query_separated.push( " user_permissions = ");
|
||||
match any_param_present {
|
||||
true => user_query_separated.push_bind(value),
|
||||
false => user_query_separated.push_bind_unseparated(value)
|
||||
};
|
||||
any_param_present = true;
|
||||
},
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -318,7 +308,7 @@ pub(crate) async fn update_user(
|
|||
}
|
||||
|
||||
#[utoipa::path(
|
||||
request_body = DeleteUserParams,
|
||||
request_body = schemas::DeleteUserParams,
|
||||
responses(
|
||||
(status = 200, description = "OK"),
|
||||
(status = 403, description = "Unauthorized"),
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
use std::collections::HashMap;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use utoipa::{IntoParams, ToSchema};
|
||||
use utoipa::{ToSchema};
|
||||
|
||||
// DB Permission Enums
|
||||
|
||||
|
@ -54,7 +54,7 @@ pub struct UpdateUserParams {
|
|||
[\"user_permissions\"]: false,
|
||||
}\
|
||||
")]
|
||||
pub permissions: Option<HashMap<String, bool>>,
|
||||
pub permissions: HashMap<String, bool>,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, ToSchema, Debug)]
|
||||
|
|
Reference in a new issue