added pjsip generation
This commit is contained in:
parent
6c338e14bb
commit
34bc843476
|
@ -198,6 +198,7 @@ version = "0.0.0"
|
|||
dependencies = [
|
||||
"cfg-if 0.1.10",
|
||||
"console_error_panic_hook",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"worker",
|
||||
]
|
||||
|
@ -433,18 +434,18 @@ checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
|
|||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.143"
|
||||
version = "1.0.144"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "53e8e5d5b70924f74ff5c6d64d9a5acd91422117c60f48c4e07855238a254553"
|
||||
checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860"
|
||||
dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "1.0.143"
|
||||
version = "1.0.144"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d3d8e8de557aee63c26b85b947f5e59b690d0454c753f3adeb5cd7835ab88391"
|
||||
checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
|
|
@ -13,6 +13,7 @@ default = ["console_error_panic_hook"]
|
|||
cfg-if = "0.1.2"
|
||||
worker = "0.0.9"
|
||||
serde_json = "1.0.67"
|
||||
serde = "1.0.144"
|
||||
|
||||
# The `console_error_panic_hook` crate provides better debugging of panics by
|
||||
# logging them with `console.error`. This is great for development, but requires
|
||||
|
@ -23,3 +24,4 @@ console_error_panic_hook = { version = "0.1.1", optional = true }
|
|||
[profile.release]
|
||||
# Tell `rustc` to optimize for small code size.
|
||||
opt-level = "s"
|
||||
lto = true
|
|
@ -1,4 +1,4 @@
|
|||
[transport-udp-nat]
|
||||
[transport-udp]
|
||||
type=transport
|
||||
protocol=udp
|
||||
bind=0.0.0.0
|
||||
|
@ -9,4 +9,13 @@ local_net=127.0.0.1/32
|
|||
external_media_address=##EXTERNAL_IP##
|
||||
external_signaling_address=##EXTERNAL_IP##
|
||||
|
||||
|
||||
[transport-tcp]
|
||||
type=transport
|
||||
protocol=tcp
|
||||
bind=0.0.0.0
|
||||
local_net=192.168.0.0/16
|
||||
local_net=10.0.0.0/8
|
||||
local_net=172.16.0.0/12
|
||||
local_net=127.0.0.1/32
|
||||
external_media_address=##EXTERNAL_IP##
|
||||
external_signaling_address=##EXTERNAL_IP##
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
[##EXT##]
|
||||
type=endpoint
|
||||
auth=##EXT##
|
||||
aors=##EXT##
|
||||
incoming_mwi_mailbox=##EXT##@default
|
||||
mailboxes=##EXT##@default
|
||||
mwi_from_user=##EXT##
|
||||
allow=all
|
||||
transport=transport-udp
|
||||
transport=transport-tcp
|
||||
context=internal
|
||||
directmedia=no
|
||||
rewrite_contact=yes
|
||||
rtp_symmetric=yes
|
||||
force_rport=yes
|
||||
|
||||
[##EXT##]
|
||||
type=auth
|
||||
auth_type=userpass
|
||||
password=##CALL##
|
||||
username=##PASS##
|
||||
|
||||
[##EXT##]
|
||||
type=aor
|
||||
max_contacts=1
|
||||
mailboxes=##EXT##@default
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"comment": "This is to store user info and password",
|
||||
"created_at": "2020-01-01T00:00:00.000Z",
|
||||
"ext": "122434",
|
||||
"passwd": "password"
|
||||
}
|
74
src/lib.rs
74
src/lib.rs
|
@ -1,21 +1,32 @@
|
|||
use serde;
|
||||
use worker::*;
|
||||
|
||||
#[event(fetch)]
|
||||
pub async fn main(req: Request, env: Env, _ctx: worker::Context) -> Result<Response> {
|
||||
|
||||
// Create an instance of the Router, which can use parameters (/user/:name) or wildcard values
|
||||
// (/file/*pathname). Alternatively, use `Router::with_data(D)` and pass in arbitrary data for
|
||||
// routes to access and share using the `ctx.data()` method.
|
||||
let router = Router::new();
|
||||
|
||||
#[derive(serde::Serialize, serde::Deserialize)]
|
||||
struct UserInfo {
|
||||
ext: String,
|
||||
passwd: String,
|
||||
comment: String,
|
||||
created_at: String,
|
||||
}
|
||||
|
||||
router
|
||||
.get_async("/asterisk/:hostname", |_req, ctx| async move {
|
||||
if let Some(hostname) = ctx.param("hostname") {
|
||||
let kv = ctx.kv("GONK_NODES")?;
|
||||
|
||||
return match kv.get("asterisk_base").cache_ttl(300).text().await? {
|
||||
return match kv.get("base_asterisk").cache_ttl(300).text().await? {
|
||||
Some(a) => Response::ok(&a),
|
||||
None => Response::error(format!("Could not find asterisk.conf for {}", hostname), 404),
|
||||
None => Response::error(
|
||||
format!("Could not find asterisk.conf for {}", hostname),
|
||||
404,
|
||||
),
|
||||
};
|
||||
}
|
||||
Response::error("Bad Request", 400)
|
||||
|
@ -24,12 +35,61 @@ pub async fn main(req: Request, env: Env, _ctx: worker::Context) -> Result<Respo
|
|||
if let Some(hostname) = ctx.param("hostname") {
|
||||
let kv = ctx.kv("GONK_NODES")?;
|
||||
|
||||
return match kv.get("pjspi_base").cache_ttl(300).text().await? {
|
||||
Some(a) => Response::ok(&a),
|
||||
None => Response::error(format!("Could not find pjsip.conf for {}", hostname), 404),
|
||||
return match kv.get("base_pjsip").cache_ttl(300).text().await? {
|
||||
Some(base) => {
|
||||
let mut conf = base + "";
|
||||
let remote_ip =
|
||||
match _req.headers().get("CF-Connecting-IP").unwrap_or_default() {
|
||||
Some(ip) => ip,
|
||||
None => return Response::error("Could not find remote IP", 500),
|
||||
};
|
||||
|
||||
conf = conf.replace("##EXTERNAL_IP##", &remote_ip) + "\nxx";
|
||||
|
||||
match kv.get("users").cache_ttl(300).text().await? {
|
||||
Some(users) => {
|
||||
let users = users.split(",");
|
||||
let base_user =
|
||||
match kv.get("base_user").cache_ttl(300).text().await? {
|
||||
Some(base) => base,
|
||||
None => {
|
||||
return Response::error("Could not find user_base", 500)
|
||||
}
|
||||
};
|
||||
|
||||
for u in users {
|
||||
let mut user = base_user.clone();
|
||||
let info: UserInfo =
|
||||
match kv.get(u).cache_ttl(300).json().await? {
|
||||
Some(info) => info,
|
||||
None => {
|
||||
return Response::error(
|
||||
format!("Could not find user {}", u),
|
||||
500,
|
||||
)
|
||||
}
|
||||
};
|
||||
|
||||
user = user.replace("##CALL##", u);
|
||||
user = user.replace("##EXT##", &info.ext);
|
||||
user = user.replace("##PASSWD##", &info.passwd);
|
||||
|
||||
conf = conf + &user;
|
||||
}
|
||||
}
|
||||
None => {
|
||||
return Response::error(format!("Could not find gonk users"), 404);
|
||||
}
|
||||
}
|
||||
Response::ok(&conf)
|
||||
}
|
||||
None => {
|
||||
Response::error(format!("Could not find pjsip.conf for {}", hostname), 404)
|
||||
}
|
||||
};
|
||||
}
|
||||
Response::error("Bad Request", 400)
|
||||
})
|
||||
.run(req, env).await
|
||||
.run(req, env)
|
||||
.await
|
||||
}
|
Loading…
Reference in New Issue