added pjsip generation
This commit is contained in:
parent
6c338e14bb
commit
34bc843476
|
@ -198,6 +198,7 @@ version = "0.0.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if 0.1.10",
|
"cfg-if 0.1.10",
|
||||||
"console_error_panic_hook",
|
"console_error_panic_hook",
|
||||||
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"worker",
|
"worker",
|
||||||
]
|
]
|
||||||
|
@ -433,18 +434,18 @@ checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.143"
|
version = "1.0.144"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "53e8e5d5b70924f74ff5c6d64d9a5acd91422117c60f48c4e07855238a254553"
|
checksum = "0f747710de3dcd43b88c9168773254e809d8ddbdf9653b84e2554ab219f17860"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.143"
|
version = "1.0.144"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d3d8e8de557aee63c26b85b947f5e59b690d0454c753f3adeb5cd7835ab88391"
|
checksum = "94ed3a816fb1d101812f83e789f888322c34e291f894f19590dc310963e87a00"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
|
|
@ -13,6 +13,7 @@ default = ["console_error_panic_hook"]
|
||||||
cfg-if = "0.1.2"
|
cfg-if = "0.1.2"
|
||||||
worker = "0.0.9"
|
worker = "0.0.9"
|
||||||
serde_json = "1.0.67"
|
serde_json = "1.0.67"
|
||||||
|
serde = "1.0.144"
|
||||||
|
|
||||||
# The `console_error_panic_hook` crate provides better debugging of panics by
|
# The `console_error_panic_hook` crate provides better debugging of panics by
|
||||||
# logging them with `console.error`. This is great for development, but requires
|
# logging them with `console.error`. This is great for development, but requires
|
||||||
|
@ -22,4 +23,5 @@ console_error_panic_hook = { version = "0.1.1", optional = true }
|
||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
# Tell `rustc` to optimize for small code size.
|
# Tell `rustc` to optimize for small code size.
|
||||||
opt-level = "s"
|
opt-level = "s"
|
||||||
|
lto = true
|
|
@ -1,4 +1,4 @@
|
||||||
[transport-udp-nat]
|
[transport-udp]
|
||||||
type=transport
|
type=transport
|
||||||
protocol=udp
|
protocol=udp
|
||||||
bind=0.0.0.0
|
bind=0.0.0.0
|
||||||
|
@ -9,4 +9,13 @@ local_net=127.0.0.1/32
|
||||||
external_media_address=##EXTERNAL_IP##
|
external_media_address=##EXTERNAL_IP##
|
||||||
external_signaling_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"
|
||||||
|
}
|
78
src/lib.rs
78
src/lib.rs
|
@ -1,21 +1,32 @@
|
||||||
|
use serde;
|
||||||
use worker::*;
|
use worker::*;
|
||||||
|
|
||||||
#[event(fetch)]
|
#[event(fetch)]
|
||||||
pub async fn main(req: Request, env: Env, _ctx: worker::Context) -> Result<Response> {
|
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
|
// 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
|
// (/file/*pathname). Alternatively, use `Router::with_data(D)` and pass in arbitrary data for
|
||||||
// routes to access and share using the `ctx.data()` method.
|
// routes to access and share using the `ctx.data()` method.
|
||||||
let router = Router::new();
|
let router = Router::new();
|
||||||
|
|
||||||
|
#[derive(serde::Serialize, serde::Deserialize)]
|
||||||
|
struct UserInfo {
|
||||||
|
ext: String,
|
||||||
|
passwd: String,
|
||||||
|
comment: String,
|
||||||
|
created_at: String,
|
||||||
|
}
|
||||||
|
|
||||||
router
|
router
|
||||||
.get_async("/asterisk/:hostname", |_req, ctx| async move {
|
.get_async("/asterisk/:hostname", |_req, ctx| async move {
|
||||||
if let Some(hostname) = ctx.param("hostname") {
|
if let Some(hostname) = ctx.param("hostname") {
|
||||||
let kv = ctx.kv("GONK_NODES")?;
|
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),
|
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)
|
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") {
|
if let Some(hostname) = ctx.param("hostname") {
|
||||||
let kv = ctx.kv("GONK_NODES")?;
|
let kv = ctx.kv("GONK_NODES")?;
|
||||||
|
|
||||||
return match kv.get("pjspi_base").cache_ttl(300).text().await? {
|
return match kv.get("base_pjsip").cache_ttl(300).text().await? {
|
||||||
Some(a) => Response::ok(&a),
|
Some(base) => {
|
||||||
None => Response::error(format!("Could not find pjsip.conf for {}", hostname), 404),
|
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)
|
Response::error("Bad Request", 400)
|
||||||
})
|
})
|
||||||
.run(req, env).await
|
.run(req, env)
|
||||||
}
|
.await
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue