Add container setup scripts for various services
Some checks failed
GBCI / build (push) Failing after 7m31s
Some checks failed
GBCI / build (push) Failing after 7m31s
- Implemented ALM container setup with Forgejo installation and systemd service configuration. - Created Bot container setup with necessary dependencies and Node.js application installation. - Developed Desktop container setup with XRDP and Brave browser installation. - Established Directory container setup with Zitadel installation and service configuration. - Added Doc Editor container setup for Collabora Online integration. - Implemented Drive container setup with MinIO installation and service configuration. - Created Email container setup with Stalwart Mail installation and service configuration. - Developed Meeting container setup with LiveKit and TURN server configuration. - Added Proxy container setup with Caddy installation and service configuration. - Implemented System container setup for general bots with service configuration. - Created Table Editor container setup with NocoDB installation and service configuration. - Developed Tables container setup with PostgreSQL installation and configuration. - Added Webmail container setup with Roundcube installation and service configuration. - Included prompt guidelines for container setup scripts.
This commit is contained in:
parent
d2d65652a9
commit
3718abf8d6
1 changed files with 17 additions and 19 deletions
|
@ -1,5 +1,5 @@
|
||||||
use actix_web::{HttpResponse, http::header::ContentType};
|
|
||||||
use actix_web::web;
|
use actix_web::web;
|
||||||
|
use actix_web::{http::header::ContentType, HttpResponse};
|
||||||
use jmap_client::{
|
use jmap_client::{
|
||||||
client::Client,
|
client::Client,
|
||||||
core::query::Filter,
|
core::query::Filter,
|
||||||
|
@ -31,8 +31,7 @@ pub async fn list_emails() -> Result<web::Json<Vec<email::Email>>, actix_web::Er
|
||||||
|
|
||||||
let mut emails = client
|
let mut emails = client
|
||||||
.email_query(
|
.email_query(
|
||||||
Filter::and([email::query::Filter::in_mailbox(inbox_id)])
|
Filter::and([email::query::Filter::in_mailbox(inbox_id)]).into(),
|
||||||
.into(),
|
|
||||||
[email::query::Comparator::from()].into(),
|
[email::query::Comparator::from()].into(),
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
|
@ -57,8 +56,7 @@ pub async fn list_emails() -> Result<web::Json<Vec<email::Email>>, actix_web::Er
|
||||||
Ok(web::Json(email_list))
|
Ok(web::Json(email_list))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[actix_web::post("/campaigns/{campaign_id}/click/{email}")]
|
||||||
|
|
||||||
pub async fn save_click(
|
pub async fn save_click(
|
||||||
path: web::Path<(String, String)>,
|
path: web::Path<(String, String)>,
|
||||||
state: web::Data<AppState>,
|
state: web::Data<AppState>,
|
||||||
|
@ -70,26 +68,26 @@ pub async fn save_click(
|
||||||
.execute(state.db.as_ref().unwrap())
|
.execute(state.db.as_ref().unwrap())
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let pixel = [0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, // PNG header
|
let pixel = [
|
||||||
0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, // IHDR chunk
|
0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, // PNG header
|
||||||
0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, // 1x1 dimension
|
0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52, // IHDR chunk
|
||||||
0x08, 0x06, 0x00, 0x00, 0x00, 0x1F, 0x15, 0xC4, 0x89, // RGBA
|
0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, // 1x1 dimension
|
||||||
0x00, 0x00, 0x00, 0x0A, 0x49, 0x44, 0x41, 0x54, // IDAT chunk
|
0x08, 0x06, 0x00, 0x00, 0x00, 0x1F, 0x15, 0xC4, 0x89, // RGBA
|
||||||
0x78, 0x9C, 0x63, 0x00, 0x01, 0x00, 0x00, 0x05, // data
|
0x00, 0x00, 0x00, 0x0A, 0x49, 0x44, 0x41, 0x54, // IDAT chunk
|
||||||
0x00, 0x01, 0x0D, 0x0A, 0x2D, 0xB4, // CRC
|
0x78, 0x9C, 0x63, 0x00, 0x01, 0x00, 0x00, 0x05, // data
|
||||||
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, // IEND chunk
|
0x00, 0x01, 0x0D, 0x0A, 0x2D, 0xB4, // CRC
|
||||||
0xAE, 0x42, 0x60, 0x82]; // EOF
|
0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, // IEND chunk
|
||||||
|
0xAE, 0x42, 0x60, 0x82,
|
||||||
|
]; // EOF
|
||||||
|
|
||||||
|
// At the end of your save_click function:
|
||||||
HttpResponse::Ok()
|
HttpResponse::Ok()
|
||||||
.content_type(ContentType::png())
|
.content_type(ContentType::png())
|
||||||
.body(pixel)
|
.body(pixel.to_vec()) // Using slicing to pass a reference
|
||||||
}
|
}
|
||||||
|
|
||||||
#[actix_web::get("/campaigns/{campaign_id}/emails")]
|
#[actix_web::get("/campaigns/{campaign_id}/emails")]
|
||||||
pub async fn get_emails(
|
pub async fn get_emails(path: web::Path<String>, state: web::Data<AppState>) -> String {
|
||||||
path: web::Path<String>,
|
|
||||||
state: web::Data<AppState>,
|
|
||||||
) -> String {
|
|
||||||
let campaign_id = path.into_inner();
|
let campaign_id = path.into_inner();
|
||||||
let rows = sqlx::query_scalar::<_, String>("SELECT email FROM clicks WHERE campaign_id = $1")
|
let rows = sqlx::query_scalar::<_, String>("SELECT email FROM clicks WHERE campaign_id = $1")
|
||||||
.bind(campaign_id)
|
.bind(campaign_id)
|
||||||
|
|
Loading…
Add table
Reference in a new issue