Browse Source

Add cors support to rust server

laramackey 5 years ago
parent
commit
d1602a2406
3 changed files with 108 additions and 1 deletions
  1. 73 1
      webrtc_server/Cargo.lock
  2. 1 0
      webrtc_server/Cargo.toml
  3. 34 0
      webrtc_server/src/main.rs

+ 73 - 1
webrtc_server/Cargo.lock

@@ -1,5 +1,14 @@
 # This file is automatically @generated by Cargo.
 # It is not intended for manual editing.
+[[package]]
+name = "aho-corasick"
+version = "0.7.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8716408b8bc624ed7f65d223ddb9ac2d044c0547b6fa4b0d554f3a9540496ada"
+dependencies = [
+ "memchr",
+]
+
 [[package]]
 name = "atty"
 version = "0.2.14"
@@ -197,7 +206,7 @@ dependencies = [
  "time",
  "traitobject",
  "typeable",
- "unicase",
+ "unicase 1.4.2",
  "url",
 ]
 
@@ -481,6 +490,24 @@ version = "0.1.56"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
 
+[[package]]
+name = "regex"
+version = "1.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "322cf97724bea3ee221b78fe25ac9c46114ebb51747ad5babd51a2fc6a8235a8"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+ "thread_local",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1132f845907680735a84409c3bebc64d1364a5683ffbce899550cd09d5eaefc1"
+
 [[package]]
 name = "ring"
 version = "0.13.5"
@@ -542,6 +569,22 @@ dependencies = [
  "serde_json",
 ]
 
+[[package]]
+name = "rocket_cors"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "270a960cba5a0b7928ad74268db7773ce932da6b550478383cefebe9f46c4e13"
+dependencies = [
+ "log 0.3.9",
+ "regex",
+ "rocket",
+ "serde",
+ "serde_derive",
+ "unicase 2.6.0",
+ "unicase_serde",
+ "url",
+]
+
 [[package]]
 name = "rocket_http"
 version = "0.4.4"
@@ -648,6 +691,15 @@ dependencies = [
  "unicode-xid 0.2.0",
 ]
 
+[[package]]
+name = "thread_local"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14"
+dependencies = [
+ "lazy_static",
+]
+
 [[package]]
 name = "time"
 version = "0.1.42"
@@ -689,6 +741,25 @@ dependencies = [
  "version_check 0.1.5",
 ]
 
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check 0.9.1",
+]
+
+[[package]]
+name = "unicase_serde"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6ef53697679d874d69f3160af80bc28de12730a985d57bdf2b47456ccb8b11f1"
+dependencies = [
+ "serde",
+ "unicase 2.6.0",
+]
+
 [[package]]
 name = "unicode-bidi"
 version = "0.3.4"
@@ -766,6 +837,7 @@ dependencies = [
  "bincode",
  "rocket",
  "rocket_contrib",
+ "rocket_cors",
  "serde",
  "serde_derive",
  "serde_json",

+ 1 - 0
webrtc_server/Cargo.toml

@@ -6,6 +6,7 @@ edition = "2018"
 
 [dependencies]
 rocket = "0.4.4"
+rocket_cors = "0.5.0"
 serde = "1.0"
 serde_json = "1.0"
 serde_derive = "1.0"

+ 34 - 0
webrtc_server/src/main.rs

@@ -2,6 +2,7 @@
 
 #[macro_use]
 extern crate rocket;
+extern crate rocket_cors;
 #[macro_use]
 extern crate rocket_contrib;
 #[macro_use]
@@ -13,6 +14,38 @@ use std::sync::Mutex;
 
 use rocket_contrib::json::{Json, JsonValue};
 
+use rocket::http::Method; // 1.
+
+use rocket_cors::{
+    AllowedHeaders, AllowedOrigins, Error, // 2.
+    Cors, CorsOptions // 3.
+};
+
+fn make_cors() -> Cors {
+    let allowed_origins = AllowedOrigins::some_exact(&[ // 4.
+        "http://localhost:8080",
+        "http://127.0.0.1:8080",
+        "http://localhost:8000",
+        "http://0.0.0.0:8000",
+    ]);
+
+    CorsOptions { // 5.
+        allowed_origins,
+        allowed_methods: vec![Method::Get, Method::Post].into_iter().map(From::from).collect(), // 1.
+        allowed_headers: AllowedHeaders::some(&[
+            "Authorization",
+            "Accept",
+            "Content-Type",
+            "User-Agent",
+            "Access-Control-Allow-Origin", // 6.
+        ]),
+        allow_credentials: true,
+        ..Default::default()
+    }
+    .to_cors()
+    .expect("error while building CORS")
+}
+
 type Data = Mutex<ChannelData>;
 
 #[derive(Serialize, Deserialize, Clone, PartialEq, Debug)]
@@ -56,6 +89,7 @@ fn rocket() -> rocket::Rocket {
         .mount("/state", routes![new, get])
         .register(catchers![not_found])
         .manage(Mutex::new(ChannelData::default()))
+        .attach(make_cors())
 }
 
 fn main() {