flodgatt/src/main.rs

100 lines
2.6 KiB
Rust
Raw Normal View History

2019-02-11 18:58:51 +01:00
mod api;
2019-02-15 10:22:35 +01:00
mod common;
mod middleware;
2019-02-11 18:58:51 +01:00
2019-02-15 10:22:35 +01:00
use actix::prelude::*;
use actix_redis::RedisActor;
2019-02-15 22:59:21 +01:00
use actix_web::{
http::{header, Method},
middleware::cors::Cors,
server, App, HttpResponse,
};
2019-02-11 09:45:14 +01:00
use env_logger::Builder;
use log::info;
use std::net::SocketAddr;
use structopt::StructOpt;
const ENV_LOG_VARIABLE: &str = "STREAMING_API_LOG";
#[derive(StructOpt)]
struct Opt {
#[structopt(short, long, default_value = "3666")]
port: u16,
}
2019-02-15 10:22:35 +01:00
#[derive(Clone)]
pub struct AppState {
redis: Addr<RedisActor>,
}
2019-02-11 09:45:14 +01:00
fn main() {
Builder::from_env(ENV_LOG_VARIABLE).init();
let args = Opt::from_args();
info!("starting streaming api server");
2019-02-11 18:58:51 +01:00
let addr: SocketAddr = ([127, 0, 0, 1], args.port).into();
2019-02-15 10:22:35 +01:00
let sys = System::new("streaming-api-server");
let redis_addr = RedisActor::start("127.0.0.1:6379");
let app_state = AppState {
redis: redis_addr.clone(),
};
2019-02-15 22:59:21 +01:00
server::new(move || endpoints(&app_state)).bind(addr).unwrap().start();
2019-02-15 10:22:35 +01:00
sys.run();
}
2019-02-15 22:59:21 +01:00
fn endpoints(app_state: &AppState) -> App<AppState> {
2019-02-15 10:22:35 +01:00
use api::http;
2019-02-15 22:59:21 +01:00
use api::ws;
2019-02-15 10:22:35 +01:00
App::with_state(app_state.clone())
.prefix("/api/v1")
2019-02-15 22:59:21 +01:00
.resource("/streaming", |r| r.with(ws::index))
.resource("/streaming/health", |r| {
r.middleware(cors_middleware());
r.get().f(|_| HttpResponse::Ok())
})
.resource("/streaming/user", |r| {
r.middleware(cors_middleware());
r.get().with(http::user::index)
})
.resource("/streaming/public", |r| {
r.middleware(cors_middleware());
r.get().with(http::public::index)
})
.resource("/streaming/public/local", |r| {
r.middleware(cors_middleware());
r.get().with(http::public::local)
})
.resource("/streaming/direct", |r| {
r.middleware(cors_middleware());
r.get().with(http::direct::index)
})
.resource("/streaming/hashtag", |r| {
r.middleware(cors_middleware());
r.get().with(http::hashtag::index)
})
.resource("/streaming/hashtag/local", |r| {
r.middleware(cors_middleware());
r.get().with(http::hashtag::local)
})
.resource("/streaming/list", |r| {
r.middleware(cors_middleware());
r.get().with(http::list::index)
})
2019-02-15 10:22:35 +01:00
}
fn cors_middleware() -> Cors {
Cors::build()
.allowed_origin("*")
.allowed_methods(vec!["GET", "OPTIONS"])
.allowed_headers(vec![header::AUTHORIZATION, header::ACCEPT, header::CACHE_CONTROL])
.finish()
2019-02-11 09:45:14 +01:00
}