Adding webapps crate
This commit is contained in:
parent
0668f91b0c
commit
e3ce5d94e1
88
Cargo.lock
generated
88
Cargo.lock
generated
@ -11,6 +11,7 @@ dependencies = [
|
|||||||
"ethcore-devtools 1.1.0",
|
"ethcore-devtools 1.1.0",
|
||||||
"ethcore-rpc 1.1.0",
|
"ethcore-rpc 1.1.0",
|
||||||
"ethcore-util 1.1.0",
|
"ethcore-util 1.1.0",
|
||||||
|
"ethcore-webapp 1.1.0",
|
||||||
"ethminer 1.1.0",
|
"ethminer 1.1.0",
|
||||||
"ethsync 1.1.0",
|
"ethsync 1.1.0",
|
||||||
"fdlimit 0.1.0",
|
"fdlimit 0.1.0",
|
||||||
@ -107,6 +108,14 @@ dependencies = [
|
|||||||
"unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"unicode-normalization 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "conduit-mime-types"
|
||||||
|
version = "0.7.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"rustc-serialize 0.3.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cookie"
|
name = "cookie"
|
||||||
version = "0.1.21"
|
version = "0.1.21"
|
||||||
@ -185,6 +194,15 @@ dependencies = [
|
|||||||
"regex 0.1.61 (registry+https://github.com/rust-lang/crates.io-index)",
|
"regex 0.1.61 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "error"
|
||||||
|
version = "0.1.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"traitobject 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "eth-secp256k1"
|
name = "eth-secp256k1"
|
||||||
version = "0.5.4"
|
version = "0.5.4"
|
||||||
@ -291,6 +309,20 @@ dependencies = [
|
|||||||
"vergen 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"vergen 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ethcore-webapp"
|
||||||
|
version = "1.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"clippy 0.0.61 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"ethcore-rpc 1.1.0",
|
||||||
|
"ethcore-util 1.1.0",
|
||||||
|
"hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"iron 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"jsonrpc-core 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"jsonrpc-http-server 4.0.0 (git+https://github.com/tomusdrw/jsonrpc-http-server.git)",
|
||||||
|
"log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ethjson"
|
name = "ethjson"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
@ -427,6 +459,23 @@ dependencies = [
|
|||||||
"xmltree 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"xmltree 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "iron"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"conduit-mime-types 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"error 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"lazy_static 0.1.15 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"log 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"modifier 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"num_cpus 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"plugin 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"typemap 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"url 0.5.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itertools"
|
name = "itertools"
|
||||||
version = "0.4.11"
|
version = "0.4.11"
|
||||||
@ -461,6 +510,16 @@ dependencies = [
|
|||||||
"unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "jsonrpc-http-server"
|
||||||
|
version = "4.0.0"
|
||||||
|
source = "git+https://github.com/tomusdrw/jsonrpc-http-server.git#46bd4e7cf8352e0efc940cf76d3dff99f1a3da15"
|
||||||
|
dependencies = [
|
||||||
|
"hyper 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"jsonrpc-core 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"unicase 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "kernel32-sys"
|
name = "kernel32-sys"
|
||||||
version = "0.2.1"
|
version = "0.2.1"
|
||||||
@ -573,6 +632,11 @@ dependencies = [
|
|||||||
"ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "modifier"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "net2"
|
name = "net2"
|
||||||
version = "0.2.23"
|
version = "0.2.23"
|
||||||
@ -637,6 +701,14 @@ name = "odds"
|
|||||||
version = "0.2.12"
|
version = "0.2.12"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "plugin"
|
||||||
|
version = "0.2.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"typemap 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "primal"
|
name = "primal"
|
||||||
version = "0.2.3"
|
version = "0.2.3"
|
||||||
@ -938,6 +1010,14 @@ name = "typeable"
|
|||||||
version = "0.1.2"
|
version = "0.1.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "typemap"
|
||||||
|
version = "0.3.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"unsafe-any 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicase"
|
name = "unicase"
|
||||||
version = "1.4.0"
|
version = "1.4.0"
|
||||||
@ -964,6 +1044,14 @@ name = "unicode-xid"
|
|||||||
version = "0.0.3"
|
version = "0.0.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unsafe-any"
|
||||||
|
version = "0.4.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"traitobject 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "url"
|
name = "url"
|
||||||
version = "0.2.38"
|
version = "0.2.38"
|
||||||
|
@ -28,15 +28,19 @@ ethsync = { path = "sync" }
|
|||||||
ethminer = { path = "miner" }
|
ethminer = { path = "miner" }
|
||||||
ethcore-devtools = { path = "devtools" }
|
ethcore-devtools = { path = "devtools" }
|
||||||
ethcore-rpc = { path = "rpc", optional = true }
|
ethcore-rpc = { path = "rpc", optional = true }
|
||||||
|
ethcore-webapp = { path = "webapp", optional = true }
|
||||||
|
|
||||||
|
|
||||||
[dependencies.hyper]
|
[dependencies.hyper]
|
||||||
version = "0.8"
|
version = "0.8"
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["rpc"]
|
default = ["rpc", "webapp"]
|
||||||
rpc = ["ethcore-rpc"]
|
rpc = ["ethcore-rpc"]
|
||||||
dev = ["clippy", "ethcore/dev", "ethcore-util/dev", "ethsync/dev", "ethcore-rpc/dev", "ethminer/dev"]
|
webapp = ["ethcore-webapp"]
|
||||||
|
dev = ["clippy", "ethcore/dev", "ethcore-util/dev", "ethsync/dev", "ethcore-rpc/dev", "ethminer/dev",
|
||||||
|
"ethcore-webapp/dev"]
|
||||||
travis-beta = ["ethcore/json-tests"]
|
travis-beta = ["ethcore/json-tests"]
|
||||||
travis-nightly = ["ethcore/json-tests", "dev"]
|
travis-nightly = ["ethcore/json-tests", "dev"]
|
||||||
|
|
||||||
|
2
cov.sh
2
cov.sh
@ -23,6 +23,7 @@ cargo test \
|
|||||||
-p ethcore-rpc \
|
-p ethcore-rpc \
|
||||||
-p parity \
|
-p parity \
|
||||||
-p ethminer \
|
-p ethminer \
|
||||||
|
-p ethcore-webapp \
|
||||||
--no-run || exit $?
|
--no-run || exit $?
|
||||||
rm -rf target/coverage
|
rm -rf target/coverage
|
||||||
mkdir -p target/coverage
|
mkdir -p target/coverage
|
||||||
@ -33,5 +34,6 @@ kcov --exclude-pattern $EXCLUDE --include-pattern src --verify target/coverage t
|
|||||||
kcov --exclude-pattern $EXCLUDE --include-pattern src --verify target/coverage target/debug/deps/ethcore_util-*
|
kcov --exclude-pattern $EXCLUDE --include-pattern src --verify target/coverage target/debug/deps/ethcore_util-*
|
||||||
kcov --exclude-pattern $EXCLUDE --include-pattern src --verify target/coverage target/debug/deps/ethsync-*
|
kcov --exclude-pattern $EXCLUDE --include-pattern src --verify target/coverage target/debug/deps/ethsync-*
|
||||||
kcov --exclude-pattern $EXCLUDE --include-pattern src --verify target/coverage target/debug/deps/ethcore_rpc-*
|
kcov --exclude-pattern $EXCLUDE --include-pattern src --verify target/coverage target/debug/deps/ethcore_rpc-*
|
||||||
|
kcov --exclude-pattern $EXCLUDE --include-pattern src --verify target/coverage target/debug/deps/ethcore_webapp-*
|
||||||
kcov --exclude-pattern $EXCLUDE --include-pattern src --verify target/coverage target/debug/deps/ethminer-*
|
kcov --exclude-pattern $EXCLUDE --include-pattern src --verify target/coverage target/debug/deps/ethminer-*
|
||||||
xdg-open target/coverage/index.html
|
xdg-open target/coverage/index.html
|
||||||
|
1
doc.sh
1
doc.sh
@ -7,5 +7,6 @@ cargo doc --no-deps --verbose \
|
|||||||
-p ethcore \
|
-p ethcore \
|
||||||
-p ethsync \
|
-p ethsync \
|
||||||
-p ethcore-rpc \
|
-p ethcore-rpc \
|
||||||
|
-p ethcore-webapp \
|
||||||
-p parity \
|
-p parity \
|
||||||
-p ethminer
|
-p ethminer
|
||||||
|
1
fmt.sh
1
fmt.sh
@ -9,6 +9,7 @@ $RUSTFMT ./json/src/lib.rs
|
|||||||
$RUSTFMT ./miner/src/lib.rs
|
$RUSTFMT ./miner/src/lib.rs
|
||||||
$RUSTFMT ./parity/main.rs
|
$RUSTFMT ./parity/main.rs
|
||||||
$RUSTFMT ./rpc/src/lib.rs
|
$RUSTFMT ./rpc/src/lib.rs
|
||||||
|
$RUSTFMT ./webapp/src/lib.rs
|
||||||
$RUSTFMT ./sync/src/lib.rs
|
$RUSTFMT ./sync/src/lib.rs
|
||||||
$RUSTFMT ./util/src/lib.rs
|
$RUSTFMT ./util/src/lib.rs
|
||||||
|
|
||||||
|
2
hook.sh
2
hook.sh
@ -7,6 +7,6 @@ echo "set -e" >> $FILE
|
|||||||
echo "cargo build --release --features dev" >> $FILE
|
echo "cargo build --release --features dev" >> $FILE
|
||||||
# Build tests
|
# Build tests
|
||||||
echo "cargo test --no-run --features dev \\" >> $FILE
|
echo "cargo test --no-run --features dev \\" >> $FILE
|
||||||
echo " -p ethash -p ethcore-util -p ethcore -p ethsync -p ethcore-rpc -p parity -p ethminer" >> $FILE
|
echo " -p ethash -p ethcore-util -p ethcore -p ethsync -p ethcore-rpc -p parity -p ethminer -p ethcore-webapp" >> $FILE
|
||||||
echo "" >> $FILE
|
echo "" >> $FILE
|
||||||
chmod +x $FILE
|
chmod +x $FILE
|
||||||
|
@ -42,6 +42,8 @@ extern crate rpassword;
|
|||||||
|
|
||||||
#[cfg(feature = "rpc")]
|
#[cfg(feature = "rpc")]
|
||||||
extern crate ethcore_rpc as rpc;
|
extern crate ethcore_rpc as rpc;
|
||||||
|
#[cfg(feature = "webapp")]
|
||||||
|
extern crate ethcore_webapp as webapp;
|
||||||
|
|
||||||
use std::io::{BufRead, BufReader};
|
use std::io::{BufRead, BufReader};
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
|
1
test.sh
1
test.sh
@ -7,6 +7,7 @@ cargo test --features ethcore/json-tests $1 \
|
|||||||
-p ethcore \
|
-p ethcore \
|
||||||
-p ethsync \
|
-p ethsync \
|
||||||
-p ethcore-rpc \
|
-p ethcore-rpc \
|
||||||
|
-p ethcore-webapp \
|
||||||
-p parity \
|
-p parity \
|
||||||
-p ethminer \
|
-p ethminer \
|
||||||
-p bigint
|
-p bigint
|
||||||
|
21
webapp/Cargo.toml
Normal file
21
webapp/Cargo.toml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
[package]
|
||||||
|
description = "Parity WebApplications crate"
|
||||||
|
name = "ethcore-webapp"
|
||||||
|
version = "1.1.0"
|
||||||
|
license = "GPL-3.0"
|
||||||
|
authors = ["Ethcore <admin@ethcore.io"]
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
log = "0.3"
|
||||||
|
jsonrpc-core = "2.0"
|
||||||
|
jsonrpc-http-server = { git = "https://github.com/tomusdrw/jsonrpc-http-server.git" }
|
||||||
|
hyper = { version = "0.8", default-features = false }
|
||||||
|
iron = { version = "0.3" }
|
||||||
|
ethcore-rpc = { path = "../rpc" }
|
||||||
|
ethcore-util = { path = "../util" }
|
||||||
|
clippy = { version = "0.0.61", optional = true}
|
||||||
|
|
||||||
|
[features]
|
||||||
|
dev = ["clippy", "ethcore-rpc/dev", "ethcore-util/dev"]
|
160
webapp/src/lib.rs
Normal file
160
webapp/src/lib.rs
Normal file
@ -0,0 +1,160 @@
|
|||||||
|
// Copyright 2015, 2016 Ethcore (UK) Ltd.
|
||||||
|
// This file is part of Parity.
|
||||||
|
|
||||||
|
// Parity is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
|
||||||
|
// Parity is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
//! Ethcore Webapplications for Parity
|
||||||
|
#![warn(missing_docs)]
|
||||||
|
#![cfg_attr(feature="nightly", plugin(clippy))]
|
||||||
|
|
||||||
|
#[macro_use]
|
||||||
|
extern crate log;
|
||||||
|
extern crate hyper;
|
||||||
|
extern crate iron;
|
||||||
|
extern crate jsonrpc_core;
|
||||||
|
extern crate jsonrpc_http_server;
|
||||||
|
extern crate ethcore_rpc as rpc;
|
||||||
|
extern crate ethcore_util as util;
|
||||||
|
|
||||||
|
use rpc::v1::*;
|
||||||
|
use std::sync::Arc;
|
||||||
|
use std::thread;
|
||||||
|
|
||||||
|
use util::panics::PanicHandler;
|
||||||
|
use iron::request::Url;
|
||||||
|
use self::jsonrpc_core::{IoHandler, IoDelegate};
|
||||||
|
use jsonrpc_http_server::ServerHandler;
|
||||||
|
|
||||||
|
/// Http server.
|
||||||
|
pub struct WebappServer {
|
||||||
|
handler: Arc<IoHandler>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl WebappServer {
|
||||||
|
/// Construct new http server object
|
||||||
|
pub fn new() -> Self {
|
||||||
|
let server = WebappServer {
|
||||||
|
handler: Arc::new(IoHandler::new()),
|
||||||
|
};
|
||||||
|
// TODO add more
|
||||||
|
server.add_delegate(Web3Client::new().to_delegate());
|
||||||
|
|
||||||
|
server
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Add io delegate.
|
||||||
|
fn add_delegate<D>(&self, delegate: IoDelegate<D>) where D: Send + Sync + 'static {
|
||||||
|
self.handler.add_delegate(delegate);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Start server asynchronously in new thread and returns panic handler.
|
||||||
|
pub fn start_http(&self, addr: &str, threads: usize) -> Arc<PanicHandler> {
|
||||||
|
let addr = addr.to_owned();
|
||||||
|
let panic_handler = PanicHandler::new_in_arc();
|
||||||
|
let ph = panic_handler.clone();
|
||||||
|
let handler = self.handler.clone();
|
||||||
|
|
||||||
|
thread::Builder::new().name("jsonrpc_http".to_string()).spawn(move || {
|
||||||
|
let cors_domain = jsonrpc_http_server::AccessControlAllowOrigin::Null;
|
||||||
|
let rpc = ServerHandler::new(handler, cors_domain);
|
||||||
|
let router = Router::new(rpc);
|
||||||
|
|
||||||
|
ph.catch_panic(move || {
|
||||||
|
hyper::Server::http(addr.as_ref() as &str).unwrap()
|
||||||
|
.handle_threads(router, threads)
|
||||||
|
.unwrap();
|
||||||
|
}).unwrap()
|
||||||
|
}).expect("Error while creating jsonrpc http thread");
|
||||||
|
|
||||||
|
panic_handler
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct Router {
|
||||||
|
rpc: ServerHandler,
|
||||||
|
// admin: Page<AdminApp>,
|
||||||
|
// wallet: Page<WalletApp>,
|
||||||
|
// mist: Page<MistApp>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Router {
|
||||||
|
pub fn new(rpc: ServerHandler) -> Self {
|
||||||
|
Router {
|
||||||
|
rpc: rpc,
|
||||||
|
// admin: Page { app: AdminApp::default() },
|
||||||
|
// wallet: Page { app: WalletApp::default() },
|
||||||
|
// mist: Page { app: MistApp::default() },
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn extract_url(req: &hyper::server::Request) -> Option<Url> {
|
||||||
|
match req.uri {
|
||||||
|
hyper::uri::RequestUri::AbsoluteUri(ref url) => {
|
||||||
|
match Url::from_generic_url(url.clone()) {
|
||||||
|
Ok(url) => Some(url),
|
||||||
|
_ => None,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
hyper::uri::RequestUri::AbsolutePath(ref path) => {
|
||||||
|
// Attempt to prepend the Host header (mandatory in HTTP/1.1)
|
||||||
|
let url_string = match req.headers.get::<hyper::header::Host>() {
|
||||||
|
Some(ref host) => {
|
||||||
|
format!("http://{}:{}{}", host.hostname, host.port.unwrap_or(80), path)
|
||||||
|
},
|
||||||
|
None => return None
|
||||||
|
};
|
||||||
|
|
||||||
|
match Url::parse(&url_string) {
|
||||||
|
Ok(url) => Some(url),
|
||||||
|
_ => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn extract_request_path<'a, 'b>(mut req: hyper::server::Request<'a, 'b>) -> (Option<String>, hyper::server::Request<'a, 'b>) {
|
||||||
|
let url = Router::extract_url(&req);
|
||||||
|
match url {
|
||||||
|
Some(url) => {
|
||||||
|
let part = url.path[0].clone();
|
||||||
|
let url = url.path[1..].join("/");
|
||||||
|
req.uri = hyper::uri::RequestUri::AbsolutePath(url);
|
||||||
|
(Some(part), req)
|
||||||
|
},
|
||||||
|
None => {
|
||||||
|
(None, req)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl hyper::server::Handler for Router {
|
||||||
|
fn handle<'b, 'a>(&'a self, req: hyper::server::Request<'a, 'b>, res: hyper::server::Response<'a>) {
|
||||||
|
let (path, req) = Router::extract_request_path(req);
|
||||||
|
match path {
|
||||||
|
// Some(ref url) if url == "admin" => {
|
||||||
|
// self.admin.handle(req, res);
|
||||||
|
// },
|
||||||
|
// Some(ref url) if url == "wallet" => {
|
||||||
|
// self.wallet.handle(req, res);
|
||||||
|
// },
|
||||||
|
// Some(ref url) if url == "mist" => {
|
||||||
|
// self.mist.handle(req, res);
|
||||||
|
// },
|
||||||
|
_ => self.rpc.handle(req, res),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user