blob: 57ee526b8ca0fa4af1663daa46fd2ed3ea5243bd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
//! # Gradecoin
//!
//! ## Services
//! ### /register
//! - Student creates their own 2048 bit RSA `keypair`
//! - Downloads `Gradecoin`'s Public Key from Moodle
//! - Encrypts their JSON wrapped `Public Key` and `Student ID` using Gradecoin's Public Key
//! - Their public key is now in our Db under [`block::User::public_key`] and can be used to sign their JWT's during requests
//!
//! ### /transaction
//! - offer a [`block::Transaction`] - POST request
//! - The request should have `Authorization`
//! - The request header should be signed by the Public Key of the `by` field in the transaction
//! - fetch the list of `Transaction`s - GET request
//!
//! ### /block
//! - offer a [`block::Block`] - POST request
//! - The request should have `Authorization`
//! - The [`block::Block::transaction_list`] of the block should be a subset of [`block::Db::pending_transactions`]
//! - fetch the last accepted [`block::Block`] - GET request
//!
//! `Authorization`: The request header should have Bearer JWT.Token signed with Student Public Key
#![warn(clippy::all, clippy::pedantic)]
#![allow(clippy::unused_async)]
mod custom_filters;
mod db;
mod handlers;
mod routes;
mod block;
mod student;
mod config;
pub use block::{Fingerprint, Id};
use db::Db;
use lazy_static::lazy_static;
use std::fs;
#[tokio::main]
async fn main() {
log4rs::init_file("log.conf.yml", log4rs::config::Deserializers::default()).unwrap();
let api = routes::application(Db::new());
// Start the server
let point = ([127, 0, 0, 1], 8080);
warp::serve(api).run(point).await;
}
lazy_static! {
static ref PRIVATE_KEY: String =
fs::read_to_string("secrets/gradecoin.pem").expect("error reading 'secrets/gradecoin.pem'");
}
|