Skip to content
This repository was archived by the owner on Sep 16, 2022. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion .github/workflows/check.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
name: Check Code

on:
pull_request:
push:
branches:
- '*'
Expand All @@ -15,7 +16,16 @@ jobs:

steps:
- name: "Checkout Repository"
uses: actions/checkout@v1
uses: actions/checkout@v2

- name: "Use Rust stable"
uses: actions-rs/toolchain@v1
with:
toolchain: stable
profile: minimal

- name: "Check rust_cache"
uses: Swatinem/rust-cache@v1

- name: Generate test secret key
shell: sh
Expand Down
4 changes: 3 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,7 @@ members = [
"actix-pgsql-simple",
"ntex-fileadapter-acl",
"actix-middleware-example",
"poem-todo",
"axum-middleware-example",
"poem-todo"

]
6 changes: 3 additions & 3 deletions actix-fileadapter-rbac/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ edition = "2018"
workspace = ".."

[dependencies]
actix-web = "3.0"
actix-rt = "1.1"
casbin = "2.0"
actix-web = "4.1.0"
actix-rt = "2.7.0"
casbin = "2.0.9"
dotenv = "0.15"
loge = {version = "0.4", default-features = false, features = ["colored", "chrono"]}
23 changes: 12 additions & 11 deletions actix-middleware-example/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ edition = "2018"

[dependencies]
http = "0.2.1"
actix = "0.11.0"
actix-web = "3.0.2"
actix-service = "1.0.6"
actix-rt = "1.1.1"
actix-cors = "0.5.0"
actix = "0.13.0"
actix-rt = "2.7.0"
actix-web = "4.1.0"
actix-service = "2.0.2"
actix-cors = "0.6.1"
futures = "0.3.5"
failure = "0.1.8"
serde = "1.0.116"
Expand All @@ -25,11 +25,12 @@ diesel_migrations = "1.4.0"
dotenv = "0.15.0"
env_logger = "0.9.0"
log = "0.4.11"
jsonwebtoken = "7.2.0"
bcrypt = "0.10.0"
jsonwebtoken = "8.1.0"
bcrypt = "0.13.0"
csv = "1.1.3"
walkdir = "2.3.1"
actix-casbin= {version = "0.4.2", default-features = false, features = [ "runtime-async-std" ]}
actix-casbin-auth = {version = "0.4.4", default-features = false, features = [ "runtime-async-std" ]}
diesel-adapter = { version = "0.8.1", default-features = false, features = ["postgres","runtime-async-std"] }
uuid = {version = "0.8.1", features = ["v4"] }
diesel-adapter ="0.9.0"
uuid = {version = "1.1.2", features = ["v4"] }
# UPDATE AFTER LATEST RELEASE OF actix-casbin and actix-casbin-auth to CRATE.IO
actix-casbin-auth = {git = "https://github.com/casbin-rs/actix-casbin-auth", default-features = false, features = [ "runtime-tokio" ]}
actix-casbin= {git = "https://github.com/casbin-rs/actix-casbin.git", default-features = false, features = [ "runtime-tokio" ]}
12 changes: 5 additions & 7 deletions actix-middleware-example/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ use actix_casbin::casbin::{
use actix_casbin::CasbinActor;
use actix_casbin_auth::CasbinService;
use actix_cors::Cors;
use actix_web::middleware::normalize::TrailingSlash;
use actix_web::middleware::Logger;
use actix_web::middleware::NormalizePath;
use actix_web::middleware::TrailingSlash;
use actix_web::{App, HttpServer};
use diesel_adapter::DieselAdapter;
use std::env;
Expand Down Expand Up @@ -62,7 +62,6 @@ async fn main() -> Result<()> {
.await
.get_role_manager()
.write()
.unwrap()
.matching_fn(Some(key_match2), None);

let share_enforcer = casbin_middleware.get_enforcer();
Expand Down Expand Up @@ -97,19 +96,18 @@ async fn main() -> Result<()> {

HttpServer::new(move || {
App::new()
.data(pool.clone())
.data(started_actor.clone())
.app_data(pool.clone())
.app_data(started_actor.clone())
.wrap(
Cors::new()
Cors::default()
.send_wildcard()
.allowed_methods(vec!["GET", "POST", "DELETE"])
.allowed_headers(vec![
http::header::AUTHORIZATION,
http::header::ACCEPT,
])
.allowed_header(http::header::CONTENT_TYPE)
.max_age(3600)
.finish(),
.max_age(3600),
)
.wrap(NormalizePath::new(TrailingSlash::Trim))
.wrap(Logger::default())
Expand Down
49 changes: 27 additions & 22 deletions actix-middleware-example/src/middleware/authn.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,12 @@ use crate::{
use actix_casbin_auth::CasbinVals;
use actix_service::{Service, Transform};
use actix_web::{
body::{EitherBody, MessageBody},
dev::{ServiceRequest, ServiceResponse},
http::{HeaderName, HeaderValue, Method},
http::{
header::{HeaderName, HeaderValue},
Method,
},
web::Data,
Error, HttpMessage, HttpResponse,
};
Expand All @@ -24,15 +28,12 @@ use std::{

pub struct Authentication;

impl<S, B> Transform<S> for Authentication
impl<S, B> Transform<S, ServiceRequest> for Authentication
where
S: Service<Request = ServiceRequest, Response = ServiceResponse<B>, Error = Error>
+ 'static,
S::Future: 'static,
B: 'static,
S: Service<ServiceRequest, Response = ServiceResponse<B>, Error = Error> + 'static,
B: MessageBody,
{
type Request = ServiceRequest;
type Response = ServiceResponse<B>;
type Response = ServiceResponse<EitherBody<B>>;
type Error = Error;
type InitError = ();
type Transform = AuthenticationMiddleware<S>;
Expand All @@ -48,24 +49,21 @@ pub struct AuthenticationMiddleware<S> {
service: Rc<RefCell<S>>,
}

impl<S, B> Service for AuthenticationMiddleware<S>
impl<S, B> Service<ServiceRequest> for AuthenticationMiddleware<S>
where
S: Service<Request = ServiceRequest, Response = ServiceResponse<B>, Error = Error>
+ 'static,
S::Future: 'static,
B: 'static,
S: Service<ServiceRequest, Response = ServiceResponse<B>, Error = Error> + 'static,
B: MessageBody,
{
type Request = ServiceRequest;
type Response = ServiceResponse<B>;
type Error = Error;
type Response = ServiceResponse<EitherBody<B>>;
type Error = S::Error;
type Future = Pin<Box<dyn Future<Output = Result<Self::Response, Self::Error>>>>;

fn poll_ready(&mut self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
fn poll_ready(&self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
self.service.poll_ready(cx)
}

fn call(&mut self, mut req: ServiceRequest) -> Self::Future {
let mut srv = self.service.clone();
fn call(&self, mut req: ServiceRequest) -> Self::Future {
let srv = self.service.clone();
let mut authenticate_pass: bool = false;
let mut public_route: bool = false;
let mut authenticate_username: String = String::from("");
Expand Down Expand Up @@ -125,14 +123,21 @@ where
domain: None,
};
req.extensions_mut().insert(vals);
Box::pin(async move { srv.call(req).await })
Box::pin(async move {
srv.call(req).await.map(|res| res.map_into_left_body())
})
} else {
let vals = CasbinVals {
subject: authenticate_username,
domain: None,
};
req.extensions_mut().insert(vals);
Box::pin(async move { srv.clone().call(req).await })
Box::pin(async move {
srv.clone()
.call(req)
.await
.map(|res| res.map_into_left_body())
})
}
} else {
Box::pin(async move {
Expand All @@ -142,7 +147,7 @@ where
constants::MESSAGE_INVALID_TOKEN,
constants::EMPTY,
))
.into_body(),
.map_into_right_body(),
))
})
}
Expand Down
13 changes: 7 additions & 6 deletions actix-middleware-example/src/models/post.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
#![allow(clippy::extra_unused_lifetimes)]
use crate::{
config::db::Connection,
schema::posts::{self, dsl::*},
Expand Down Expand Up @@ -37,24 +38,24 @@ pub struct DeletePost {
}

impl Post {
pub fn find_all(is_admin: bool, conn: &Connection) -> QueryResult<Vec<Post>> {
pub fn find_all(is_admin: bool, conn: &Connection) -> QueryResult<Vec<Self>> {
if is_admin {
return posts::table.order(id.asc()).load::<Post>(conn);
return posts::table.order(id.asc()).load::<Self>(conn);
}
posts::table
.filter(is_deleted.eq(false))
.order(id.asc())
.load::<Post>(conn)
.load::<Self>(conn)
}

pub fn find_by_id(is_admin: bool, i: i32, conn: &Connection) -> QueryResult<Post> {
pub fn find_by_id(is_admin: bool, i: i32, conn: &Connection) -> QueryResult<Self> {
if is_admin {
return posts::table.find(i).get_result::<Post>(conn);
return posts::table.find(i).get_result::<Self>(conn);
}
posts::table
.filter(is_deleted.eq(false))
.find(i)
.get_result::<Post>(conn)
.get_result::<Self>(conn)
}

pub fn insert(new_post: NewPost, conn: &Connection) -> QueryResult<usize> {
Expand Down
4 changes: 3 additions & 1 deletion actix-middleware-example/src/models/user.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
#![allow(clippy::extra_unused_lifetimes)]

use crate::{
config::db::Connection,
constants,
Expand Down Expand Up @@ -130,7 +132,7 @@ impl User {
}

pub fn generate_login_session() -> String {
Uuid::new_v4().to_simple().to_string()
Uuid::new_v4().simple().to_string()
}

// pub fn get_user_role(
Expand Down
4 changes: 3 additions & 1 deletion actix-middleware-example/src/routers/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ pub fn routes(cfg: &mut web::ServiceConfig) {
)
.service(
web::scope("/user")
.service(web::resource("logout").route(web::post().to(user::logout)))
.service(
web::resource("/logout").route(web::post().to(user::logout)),
)
.service(
web::resource("").route(web::delete().to(user::delete_self)),
),
Expand Down
8 changes: 4 additions & 4 deletions actix-middleware-example/src/services/account_service.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ use actix::Addr;
use actix_casbin::{CasbinActor, CasbinCmd, CasbinResult};
use actix_casbin_auth::casbin::CachedEnforcer;
use actix_casbin_auth::CasbinVals;
use actix_web::{http::StatusCode, web, HttpRequest};
use actix_web::{http::StatusCode, web, HttpMessage, HttpRequest};

#[derive(Serialize, Deserialize)]
pub struct TokenBodyResponse {
Expand Down Expand Up @@ -98,7 +98,7 @@ pub fn logout(req: HttpRequest, pool: &web::Data<Pool>) -> Result<(), ServiceErr
}
};
let username = &vals.subject;
let user = User::find_user_by_username(&username, &pool.get().unwrap())
let user = User::find_user_by_username(username, &pool.get().unwrap())
.map_err(|_| make_error())?;
User::logout(user.id, &pool.get().unwrap());
Ok(())
Expand Down Expand Up @@ -147,7 +147,7 @@ pub fn delete_admin(
}
};
let username = &vals.subject;
let user = User::find_user_by_username(&username, &pool.get().unwrap())
let user = User::find_user_by_username(username, &pool.get().unwrap())
.map_err(|_| make_error())?;
let delete_user_role = user.role;

Expand Down Expand Up @@ -201,7 +201,7 @@ pub fn delete_self(
}
};
let username = &vals.subject;
let user = User::find_user_by_username(&username, &pool.get().unwrap())
let user = User::find_user_by_username(username, &pool.get().unwrap())
.map_err(|_| make_error())?;

if user.role == 0 {
Expand Down
8 changes: 4 additions & 4 deletions actix-middleware-example/src/services/post_service.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use crate::{
models::user::User,
};
use actix_casbin_auth::CasbinVals;
use actix_web::{http::StatusCode, web, HttpRequest};
use actix_web::{http::StatusCode, web, HttpMessage, HttpRequest};

pub fn find_all_public(pool: &web::Data<Pool>) -> Result<Vec<Post>, ServiceError> {
match Post::find_all(false, &pool.get().unwrap()) {
Expand Down Expand Up @@ -39,7 +39,7 @@ pub fn find_all(
}
};
let username = &vals.subject;
let user = User::find_user_by_username(&username, &pool.get().unwrap())
let user = User::find_user_by_username(username, &pool.get().unwrap())
.map_err(|_| make_error())?;
let mut is_admin = false;
if user.role == 0 || user.role == 1 {
Expand Down Expand Up @@ -76,7 +76,7 @@ pub fn find_by_id(
}
};
let username = &vals.subject;
let user = User::find_user_by_username(&username, &pool.get().unwrap())
let user = User::find_user_by_username(username, &pool.get().unwrap())
.map_err(|_| make_error())?;
let mut is_admin = false;
if user.role == 0 || user.role == 1 {
Expand Down Expand Up @@ -134,7 +134,7 @@ pub fn delete(
}
};
let username = &vals.subject;
let user = User::find_user_by_username(&username, &pool.get().unwrap())
let user = User::find_user_by_username(username, &pool.get().unwrap())
.map_err(|_| make_error())?;
if user.role == 0 || user.role == 1 {
match Post::find_by_id(true, id, &pool.get().unwrap()) {
Expand Down
3 changes: 1 addition & 2 deletions actix-middleware-example/src/utils/csv_utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@ pub fn walk_csv<P: AsRef<Path>>(dir: P) -> Vec<PathBuf> {
pub fn load_csv<P: AsRef<Path>>(paths: Vec<P>) -> Vec<Vec<String>> {
paths
.into_iter()
.map(load_records)
.flatten()
.flat_map(load_records)
.filter_map(|r| r.deserialize::<Vec<String>>(None).ok())
.collect::<Vec<Vec<String>>>()
}
Expand Down
8 changes: 4 additions & 4 deletions actix-pgsql-simple/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ version = "0.1.0"
edition = "2018"

[dependencies]
casbin = "2.0"
diesel-adapter = { version = "0.8", features = ["postgres"] }
casbin = "2.0.9"
diesel-adapter = { version = "0.9.0", features = ["postgres"] }
async-std = { version = "1.6", features = ["attributes"] }

diesel = { version = "1.4", features = ["postgres", "serde_json", "r2d2"] }

actix-web = { version = "3.0" }
actix-rt = "1.1"
actix-web = "4.1.0"
actix-rt = "2.7.0"
serde = "1.0"
serde_derive = "1.0"

Expand Down
5 changes: 5 additions & 0 deletions axum-middleware-example/.env.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
APP_HOST=127.0.0.1
APP_PORT=8080
DATABASE_URL=postgres://postgres:[email protected]:5432/casbintest
POOL_SIZE=8
HASH_ROUNDS=12
Loading