base code
This commit is contained in:
commit
bc067bca0c
|
@ -0,0 +1,20 @@
|
|||
# blek! File
|
||||
blek! File is a free service that would help you with file sharing.
|
||||
|
||||
The principle is very simple: you upload a file, then download it from another device. The file will be deleted after 1 download or 30 minutes.
|
||||
|
||||
## Licensing
|
||||
This software is released under GPL3 license, a copyleft license that protects users' freedom by ensuring that all future copies of this software are open source as well.
|
||||
|
||||
## Deploying
|
||||
Simply copy the `docker-compose.yml.example` to `docker-compose.yml`, and `.env.example` to `.env` and edit them if necessary.
|
||||
|
||||
The following could be done with these bash commands:
|
||||
```bash
|
||||
$ # Notice that those are just for reference; you may not want to 100% copy them
|
||||
$ cp docker-compose.yml.example docker-compose.yml
|
||||
$ cp .env.example .env
|
||||
$ nvim .env # you need to edit this file
|
||||
# docker-compose up -d # "#" at the start means that the command must be run as root/sudo
|
||||
$ # It all should me up and running at this point
|
||||
```
|
|
@ -0,0 +1 @@
|
|||
APP_LOGGING=true
|
|
@ -0,0 +1 @@
|
|||
/target
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,13 @@
|
|||
[package]
|
||||
name = "filed"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
dotenvy = "0.15.7"
|
||||
femme = "2.2.1"
|
||||
log = "0.4.20"
|
||||
tokio = { version = "1.32.0", features = ["rt", "macros", "rt-multi-thread"] }
|
||||
warp = "0.3.6"
|
|
@ -0,0 +1,2 @@
|
|||
# fileD - file daemon
|
||||
This is a part of blek! File that is responsible for serving and uploading files.
|
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
env.rs - The environment loader. It loads all the .env config to a convenient `Env` struct.
|
||||
This file provides the `loadenv` function that will do just that.
|
||||
*/
|
||||
|
||||
use std::env::var;
|
||||
|
||||
pub struct Env {
|
||||
pub logging: bool
|
||||
}
|
||||
|
||||
fn get_var<T: Into<String>, O: From<String>>(name: T) -> Result<O, String> {
|
||||
let name: String = name.into();
|
||||
let v = var(name.clone());
|
||||
if v.is_err() {
|
||||
return Err(format!("Variable {name} does not exist!"));
|
||||
}
|
||||
return Ok(v.unwrap().into())
|
||||
}
|
||||
|
||||
pub fn loadenv() -> Result<Env, Box<dyn std::error::Error>> {
|
||||
Ok(
|
||||
Env {
|
||||
logging: get_var::<&str, String>("APP_LOGGING")?.to_lowercase() == "true",
|
||||
}
|
||||
)
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
#![forbid(unsafe_code)]
|
||||
#![warn(clippy::suspicious)]
|
||||
#![warn(clippy::correctness)]
|
||||
|
||||
mod env;
|
||||
mod web;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
dotenvy::dotenv().unwrap();
|
||||
let envy = env::loadenv().unwrap();
|
||||
|
||||
// set up logging
|
||||
if envy.logging {
|
||||
#[cfg(debug_assertions)] {
|
||||
femme::with_level(femme::LevelFilter::Debug)
|
||||
}
|
||||
#[cfg(not(debug_assertions))] {
|
||||
femme::with_level(femme::LevelFilter::Info)
|
||||
}
|
||||
} else {
|
||||
femme::with_level(femme::LevelFilter::Off);
|
||||
}
|
||||
|
||||
web::serve().await;
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
/*
|
||||
web - The part of filed that handles everything related to HTTP
|
||||
*/
|
||||
|
||||
use warp::Filter;
|
||||
|
||||
mod pages;
|
||||
|
||||
/*
|
||||
Serve the HTTP server
|
||||
*/
|
||||
pub async fn serve() {
|
||||
|
||||
log::info!("Listening on 0.0.0.0:80");
|
||||
|
||||
// let hello = warp::any().map(|| "Hi");
|
||||
|
||||
warp::serve(pages::get_routes()).run(([0,0,0,0], 80)).await;
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
/*
|
||||
pages.rs - All the HTML pages
|
||||
*/
|
||||
|
||||
use warp::{reply::{Reply, Html}, Filter, reject::Rejection};
|
||||
|
||||
pub fn index() -> Html<String> {
|
||||
warp::reply::html("<b>hiiii ^^</b>".into())
|
||||
}
|
||||
|
||||
pub fn get_routes() -> impl Filter<Extract = impl Reply, Error = Rejection> + Clone {
|
||||
|
||||
let index_r = warp::path::end().map(index);
|
||||
|
||||
warp::any().and(index_r)
|
||||
}
|
Loading…
Reference in New Issue