mirror of
https://github.com/kanidm/kanidm.git
synced 2025-02-23 04:27:02 +01:00
Windows build fixes (#1388)
This commit is contained in:
parent
4bdf7c2aa2
commit
3378717d5a
|
@ -1,4 +1,3 @@
|
|||
|
||||
[profile.release]
|
||||
debug = true
|
||||
lto = "thin"
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
kanidm_book/src/DEVELOPER_README.md
|
0
DEVELOPER_README.md
Normal file
0
DEVELOPER_README.md
Normal file
4
Makefile
4
Makefile
|
@ -252,3 +252,7 @@ cert/clean:
|
|||
rm -f /tmp/kanidm/*.csr
|
||||
rm -f /tmp/kanidm/ca.txt*
|
||||
rm -f /tmp/kanidm/ca.{cnf,srl,srl.old}
|
||||
|
||||
.PHONY: webui
|
||||
webui: ## Build the WASM web frontent
|
||||
cd kanidmd_web_ui && ./build_wasm_release.sh
|
||||
|
|
|
@ -22,7 +22,6 @@ tokio = { workspace = true, features = ["rt", "macros", "net"] }
|
|||
tracing.workspace = true
|
||||
tracing-subscriber = { workspace = true, features = ["env-filter", "fmt"] }
|
||||
|
||||
users.workspace = true
|
||||
|
||||
ldap3_client.workspace = true
|
||||
serde = { workspace = true, features = ["derive"] }
|
||||
|
@ -34,6 +33,9 @@ uuid = { workspace = true, features = ["serde"] }
|
|||
# For file metadata, should this me moved out?
|
||||
kanidmd_lib.workspace = true
|
||||
|
||||
[target.'cfg(target_family = "unix")'.dependencies]
|
||||
users.workspace = true
|
||||
|
||||
[build-dependencies]
|
||||
clap = { workspace = true, features = ["derive"] }
|
||||
clap_complete.workspace = true
|
||||
|
|
|
@ -27,6 +27,7 @@ use std::collections::{BTreeMap, HashMap};
|
|||
use std::fs::metadata;
|
||||
use std::fs::File;
|
||||
use std::io::Read;
|
||||
#[cfg(target_family = "unix")]
|
||||
use std::os::unix::fs::MetadataExt;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::str::FromStr;
|
||||
|
@ -53,6 +54,7 @@ use kanidm_proto::scim_v1::{
|
|||
};
|
||||
use kanidmd_lib::utils::file_permissions_readonly;
|
||||
|
||||
#[cfg(target_family = "unix")]
|
||||
use users::{get_current_gid, get_current_uid, get_effective_gid, get_effective_uid};
|
||||
|
||||
use ldap3_client::{
|
||||
|
@ -175,41 +177,53 @@ async fn driver_main(opt: Opt) {
|
|||
info!("Stopped sync driver");
|
||||
});
|
||||
|
||||
// TODO: this loop/handler should be generic across the various crates
|
||||
// Block on signals now.
|
||||
loop {
|
||||
tokio::select! {
|
||||
Ok(()) = tokio::signal::ctrl_c() => {
|
||||
break
|
||||
#[cfg(target_family = "unix")]
|
||||
{
|
||||
tokio::select! {
|
||||
Ok(()) = tokio::signal::ctrl_c() => {
|
||||
break
|
||||
}
|
||||
Some(()) = async move {
|
||||
let sigterm = tokio::signal::unix::SignalKind::terminate();
|
||||
tokio::signal::unix::signal(sigterm).unwrap().recv().await
|
||||
} => {
|
||||
break
|
||||
}
|
||||
Some(()) = async move {
|
||||
let sigterm = tokio::signal::unix::SignalKind::alarm();
|
||||
tokio::signal::unix::signal(sigterm).unwrap().recv().await
|
||||
} => {
|
||||
// Ignore
|
||||
}
|
||||
Some(()) = async move {
|
||||
let sigterm = tokio::signal::unix::SignalKind::hangup();
|
||||
tokio::signal::unix::signal(sigterm).unwrap().recv().await
|
||||
} => {
|
||||
// Ignore
|
||||
}
|
||||
Some(()) = async move {
|
||||
let sigterm = tokio::signal::unix::SignalKind::user_defined1();
|
||||
tokio::signal::unix::signal(sigterm).unwrap().recv().await
|
||||
} => {
|
||||
// Ignore
|
||||
}
|
||||
Some(()) = async move {
|
||||
let sigterm = tokio::signal::unix::SignalKind::user_defined2();
|
||||
tokio::signal::unix::signal(sigterm).unwrap().recv().await
|
||||
} => {
|
||||
// Ignore
|
||||
}
|
||||
}
|
||||
Some(()) = async move {
|
||||
let sigterm = tokio::signal::unix::SignalKind::terminate();
|
||||
tokio::signal::unix::signal(sigterm).unwrap().recv().await
|
||||
} => {
|
||||
break
|
||||
}
|
||||
Some(()) = async move {
|
||||
let sigterm = tokio::signal::unix::SignalKind::alarm();
|
||||
tokio::signal::unix::signal(sigterm).unwrap().recv().await
|
||||
} => {
|
||||
// Ignore
|
||||
}
|
||||
Some(()) = async move {
|
||||
let sigterm = tokio::signal::unix::SignalKind::hangup();
|
||||
tokio::signal::unix::signal(sigterm).unwrap().recv().await
|
||||
} => {
|
||||
// Ignore
|
||||
}
|
||||
Some(()) = async move {
|
||||
let sigterm = tokio::signal::unix::SignalKind::user_defined1();
|
||||
tokio::signal::unix::signal(sigterm).unwrap().recv().await
|
||||
} => {
|
||||
// Ignore
|
||||
}
|
||||
Some(()) = async move {
|
||||
let sigterm = tokio::signal::unix::SignalKind::user_defined2();
|
||||
tokio::signal::unix::signal(sigterm).unwrap().recv().await
|
||||
} => {
|
||||
// Ignore
|
||||
}
|
||||
#[cfg(target_family = "windows")]
|
||||
{
|
||||
tokio::select! {
|
||||
Ok(()) = tokio::signal::ctrl_c() => {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -908,10 +922,8 @@ fn config_security_checks(cfg_path: &Path) -> bool {
|
|||
);
|
||||
}
|
||||
|
||||
let cuid = get_current_uid();
|
||||
let ceuid = get_effective_uid();
|
||||
|
||||
if cfg_meta.uid() == cuid || cfg_meta.uid() == ceuid {
|
||||
#[cfg(target_family = "unix")]
|
||||
if cfg_meta.uid() == get_current_uid() || cfg_meta.uid() == get_effective_uid() {
|
||||
warn!("WARNING: {} owned by the current uid, which may allow file permission changes. This could be a security risk ...",
|
||||
cfg_path_str
|
||||
);
|
||||
|
@ -922,11 +934,6 @@ fn config_security_checks(cfg_path: &Path) -> bool {
|
|||
}
|
||||
|
||||
fn main() {
|
||||
let cuid = get_current_uid();
|
||||
let ceuid = get_effective_uid();
|
||||
let cgid = get_current_gid();
|
||||
let cegid = get_effective_gid();
|
||||
|
||||
let opt = Opt::parse();
|
||||
|
||||
let fmt_layer = fmt::layer().with_writer(std::io::stderr);
|
||||
|
@ -952,10 +959,15 @@ fn main() {
|
|||
.init();
|
||||
|
||||
// Startup sanity checks.
|
||||
// TODO: put this in the junk drawer
|
||||
#[cfg(target_family = "unix")]
|
||||
if opt.skip_root_check {
|
||||
warn!("Skipping root user check, if you're running this for testing, ensure you clean up temporary files.")
|
||||
// TODO: this wording is not great m'kay.
|
||||
} else if cuid == 0 || ceuid == 0 || cgid == 0 || cegid == 0 {
|
||||
} else if get_current_uid() == 0
|
||||
|| get_effective_uid() == 0
|
||||
|| get_current_gid() == 0
|
||||
|| get_effective_gid() == 0
|
||||
{
|
||||
error!("Refusing to run - this process must not operate as root.");
|
||||
return;
|
||||
};
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
See the [designs] folder, and compile the private documentation locally:
|
||||
|
||||
```
|
||||
```bash
|
||||
cargo doc --document-private-items --open --no-deps
|
||||
```
|
||||
|
||||
|
@ -44,7 +44,7 @@ Tumbleweed release, it's packaged in `zypper`.
|
|||
|
||||
You will also need some system libraries to build this:
|
||||
|
||||
```
|
||||
```text
|
||||
libudev-devel sqlite3-devel libopenssl-devel
|
||||
```
|
||||
|
||||
|
@ -58,13 +58,13 @@ rust cargo
|
|||
|
||||
You will also need some system libraries to build this:
|
||||
|
||||
```
|
||||
```text
|
||||
systemd-devel sqlite-devel openssl-devel pam-devel
|
||||
```
|
||||
|
||||
Building the Web UI requires additional packages:
|
||||
|
||||
```
|
||||
```text
|
||||
perl-FindBin perl-File-Compare rust-std-static-wasm32-unknown-unknown
|
||||
```
|
||||
|
||||
|
|
|
@ -3,8 +3,7 @@ FROM ${BASE_IMAGE} AS repos
|
|||
RUN \
|
||||
--mount=type=cache,id=zypp,target=/var/cache/zypp \
|
||||
zypper mr -k repo-oss && \
|
||||
zypper mr -k repo-update && \
|
||||
zypper dup -y
|
||||
zypper mr -k repo-update
|
||||
|
||||
# ======================
|
||||
FROM repos
|
||||
|
|
|
@ -12,6 +12,10 @@ license.workspace = true
|
|||
homepage.workspace = true
|
||||
repository.workspace = true
|
||||
|
||||
[features]
|
||||
default = ["unix"]
|
||||
unix = []
|
||||
|
||||
[lib]
|
||||
name = "kanidm_cli"
|
||||
path = "src/cli/lib.rs"
|
||||
|
|
|
@ -11,37 +11,48 @@ license.workspace = true
|
|||
homepage.workspace = true
|
||||
repository.workspace = true
|
||||
|
||||
[lib]
|
||||
name = "kanidm_unix_common"
|
||||
path = "src/lib.rs"
|
||||
[features]
|
||||
default = ["unix"]
|
||||
unix = []
|
||||
|
||||
[[bin]]
|
||||
name = "kanidm_unixd"
|
||||
path = "src/daemon.rs"
|
||||
required-features = ["unix"]
|
||||
|
||||
[[bin]]
|
||||
name = "kanidm_unixd_tasks"
|
||||
path = "src/tasks_daemon.rs"
|
||||
required-features = ["unix"]
|
||||
|
||||
[[bin]]
|
||||
name = "kanidm_ssh_authorizedkeys"
|
||||
path = "src/ssh_authorizedkeys.rs"
|
||||
required-features = ["unix"]
|
||||
|
||||
[[bin]]
|
||||
name = "kanidm_cache_invalidate"
|
||||
path = "src/cache_invalidate.rs"
|
||||
required-features = ["unix"]
|
||||
|
||||
[[bin]]
|
||||
name = "kanidm_cache_clear"
|
||||
path = "src/cache_clear.rs"
|
||||
required-features = ["unix"]
|
||||
|
||||
[[bin]]
|
||||
name = "kanidm_unixd_status"
|
||||
path = "src/daemon_status.rs"
|
||||
required-features = ["unix"]
|
||||
|
||||
[[bin]]
|
||||
name = "kanidm_test_auth"
|
||||
path = "src/test_auth.rs"
|
||||
required-features = ["unix"]
|
||||
|
||||
[lib]
|
||||
name = "kanidm_unix_common"
|
||||
path = "src/lib.rs"
|
||||
|
||||
[dependencies]
|
||||
bytes.workspace = true
|
||||
|
@ -69,11 +80,10 @@ tokio = { workspace = true, features = ["rt", "macros", "sync", "time", "net", "
|
|||
tokio-util = { workspace = true, features = ["codec"] }
|
||||
tracing.workspace = true
|
||||
reqwest = { workspace = true, default-features = false }
|
||||
users.workspace = true
|
||||
walkdir.workspace = true
|
||||
|
||||
[features]
|
||||
# default = [ "libsqlite3-sys/bundled" ]
|
||||
[target.'cfg(not(target_family = "windows"))'.dependencies]
|
||||
users.workspace = true
|
||||
|
||||
[dev-dependencies]
|
||||
kanidmd_core.workspace = true
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
[package]
|
||||
name = "nss_kanidm"
|
||||
|
||||
version.workspace = true
|
||||
authors.workspace = true
|
||||
rust-version.workspace = true
|
||||
edition.workspace = true
|
||||
license.workspace = true
|
||||
homepage.workspace = true
|
||||
repository.workspace = true
|
||||
version = { workspace = true }
|
||||
authors = { workspace = true }
|
||||
rust-version = { workspace = true }
|
||||
edition = { workspace = true }
|
||||
license = { workspace = true }
|
||||
homepage = { workspace = true }
|
||||
repository = { workspace = true }
|
||||
|
||||
[lib]
|
||||
name = "nss_kanidm"
|
||||
|
@ -15,9 +15,11 @@ crate-type = [ "cdylib" ]
|
|||
path = "src/lib.rs"
|
||||
|
||||
[dependencies]
|
||||
kanidm_unix_int.workspace = true
|
||||
libnss.workspace = true
|
||||
libc.workspace = true
|
||||
paste.workspace = true
|
||||
lazy_static.workspace = true
|
||||
kanidm_unix_int = { workspace = true }
|
||||
|
||||
[target.'cfg(not(target_family = "windows"))'.dependencies]
|
||||
libnss = { workspace = true }
|
||||
libc = { workspace = true }
|
||||
paste = { workspace = true }
|
||||
lazy_static = { workspace = true }
|
||||
|
||||
|
|
154
kanidm_unix_int/nss_kanidm/src/implementation.rs
Normal file
154
kanidm_unix_int/nss_kanidm/src/implementation.rs
Normal file
|
@ -0,0 +1,154 @@
|
|||
use kanidm_unix_common::client_sync::call_daemon_blocking;
|
||||
use kanidm_unix_common::constants::DEFAULT_CONFIG_PATH;
|
||||
use kanidm_unix_common::unix_config::KanidmUnixdConfig;
|
||||
use kanidm_unix_common::unix_proto::{ClientRequest, ClientResponse, NssGroup, NssUser};
|
||||
use libnss::group::{Group, GroupHooks};
|
||||
use libnss::interop::Response;
|
||||
use libnss::passwd::{Passwd, PasswdHooks};
|
||||
|
||||
struct KanidmPasswd;
|
||||
libnss_passwd_hooks!(kanidm, KanidmPasswd);
|
||||
|
||||
impl PasswdHooks for KanidmPasswd {
|
||||
fn get_all_entries() -> Response<Vec<Passwd>> {
|
||||
let cfg =
|
||||
match KanidmUnixdConfig::new().read_options_from_optional_config(DEFAULT_CONFIG_PATH) {
|
||||
Ok(c) => c,
|
||||
Err(_) => {
|
||||
return Response::Unavail;
|
||||
}
|
||||
};
|
||||
let req = ClientRequest::NssAccounts;
|
||||
call_daemon_blocking(cfg.sock_path.as_str(), &req, cfg.unix_sock_timeout)
|
||||
.map(|r| match r {
|
||||
ClientResponse::NssAccounts(l) => l.into_iter().map(passwd_from_nssuser).collect(),
|
||||
_ => Vec::new(),
|
||||
})
|
||||
.map(Response::Success)
|
||||
.unwrap_or_else(|_| Response::Success(vec![]))
|
||||
}
|
||||
|
||||
fn get_entry_by_uid(uid: libc::uid_t) -> Response<Passwd> {
|
||||
let cfg =
|
||||
match KanidmUnixdConfig::new().read_options_from_optional_config(DEFAULT_CONFIG_PATH) {
|
||||
Ok(c) => c,
|
||||
Err(_) => {
|
||||
return Response::Unavail;
|
||||
}
|
||||
};
|
||||
let req = ClientRequest::NssAccountByUid(uid);
|
||||
call_daemon_blocking(cfg.sock_path.as_str(), &req, cfg.unix_sock_timeout)
|
||||
.map(|r| match r {
|
||||
ClientResponse::NssAccount(opt) => opt
|
||||
.map(passwd_from_nssuser)
|
||||
.map(Response::Success)
|
||||
.unwrap_or_else(|| Response::NotFound),
|
||||
_ => Response::NotFound,
|
||||
})
|
||||
.unwrap_or_else(|_| Response::NotFound)
|
||||
}
|
||||
|
||||
fn get_entry_by_name(name: String) -> Response<Passwd> {
|
||||
let cfg =
|
||||
match KanidmUnixdConfig::new().read_options_from_optional_config(DEFAULT_CONFIG_PATH) {
|
||||
Ok(c) => c,
|
||||
Err(_) => {
|
||||
return Response::Unavail;
|
||||
}
|
||||
};
|
||||
let req = ClientRequest::NssAccountByName(name);
|
||||
call_daemon_blocking(cfg.sock_path.as_str(), &req, cfg.unix_sock_timeout)
|
||||
.map(|r| match r {
|
||||
ClientResponse::NssAccount(opt) => opt
|
||||
.map(passwd_from_nssuser)
|
||||
.map(Response::Success)
|
||||
.unwrap_or_else(|| Response::NotFound),
|
||||
_ => Response::NotFound,
|
||||
})
|
||||
.unwrap_or_else(|_| Response::NotFound)
|
||||
}
|
||||
}
|
||||
|
||||
struct KanidmGroup;
|
||||
libnss_group_hooks!(kanidm, KanidmGroup);
|
||||
|
||||
impl GroupHooks for KanidmGroup {
|
||||
fn get_all_entries() -> Response<Vec<Group>> {
|
||||
let cfg =
|
||||
match KanidmUnixdConfig::new().read_options_from_optional_config(DEFAULT_CONFIG_PATH) {
|
||||
Ok(c) => c,
|
||||
Err(_) => {
|
||||
return Response::Unavail;
|
||||
}
|
||||
};
|
||||
let req = ClientRequest::NssGroups;
|
||||
call_daemon_blocking(cfg.sock_path.as_str(), &req, cfg.unix_sock_timeout)
|
||||
.map(|r| match r {
|
||||
ClientResponse::NssGroups(l) => l.into_iter().map(group_from_nssgroup).collect(),
|
||||
_ => Vec::new(),
|
||||
})
|
||||
.map(Response::Success)
|
||||
.unwrap_or_else(|_| Response::Success(vec![]))
|
||||
}
|
||||
|
||||
fn get_entry_by_gid(gid: libc::gid_t) -> Response<Group> {
|
||||
let cfg =
|
||||
match KanidmUnixdConfig::new().read_options_from_optional_config(DEFAULT_CONFIG_PATH) {
|
||||
Ok(c) => c,
|
||||
Err(_) => {
|
||||
return Response::Unavail;
|
||||
}
|
||||
};
|
||||
let req = ClientRequest::NssGroupByGid(gid);
|
||||
call_daemon_blocking(cfg.sock_path.as_str(), &req, cfg.unix_sock_timeout)
|
||||
.map(|r| match r {
|
||||
ClientResponse::NssGroup(opt) => opt
|
||||
.map(group_from_nssgroup)
|
||||
.map(Response::Success)
|
||||
.unwrap_or_else(|| Response::NotFound),
|
||||
_ => Response::NotFound,
|
||||
})
|
||||
.unwrap_or_else(|_| Response::NotFound)
|
||||
}
|
||||
|
||||
fn get_entry_by_name(name: String) -> Response<Group> {
|
||||
let cfg =
|
||||
match KanidmUnixdConfig::new().read_options_from_optional_config(DEFAULT_CONFIG_PATH) {
|
||||
Ok(c) => c,
|
||||
Err(_) => {
|
||||
return Response::Unavail;
|
||||
}
|
||||
};
|
||||
let req = ClientRequest::NssGroupByName(name);
|
||||
call_daemon_blocking(cfg.sock_path.as_str(), &req, cfg.unix_sock_timeout)
|
||||
.map(|r| match r {
|
||||
ClientResponse::NssGroup(opt) => opt
|
||||
.map(group_from_nssgroup)
|
||||
.map(Response::Success)
|
||||
.unwrap_or_else(|| Response::NotFound),
|
||||
_ => Response::NotFound,
|
||||
})
|
||||
.unwrap_or_else(|_| Response::NotFound)
|
||||
}
|
||||
}
|
||||
|
||||
fn passwd_from_nssuser(nu: NssUser) -> Passwd {
|
||||
Passwd {
|
||||
name: nu.name,
|
||||
gecos: nu.gecos,
|
||||
passwd: "x".to_string(),
|
||||
uid: nu.gid,
|
||||
gid: nu.gid,
|
||||
dir: nu.homedir,
|
||||
shell: nu.shell,
|
||||
}
|
||||
}
|
||||
|
||||
fn group_from_nssgroup(ng: NssGroup) -> Group {
|
||||
Group {
|
||||
name: ng.name,
|
||||
passwd: "x".to_string(),
|
||||
gid: ng.gid,
|
||||
members: ng.members,
|
||||
}
|
||||
}
|
|
@ -10,162 +10,15 @@
|
|||
#![deny(clippy::needless_pass_by_value)]
|
||||
#![deny(clippy::trivially_copy_pass_by_ref)]
|
||||
|
||||
#[cfg(target_family = "unix")]
|
||||
#[macro_use]
|
||||
extern crate libnss;
|
||||
#[cfg(target_family = "unix")]
|
||||
#[macro_use]
|
||||
extern crate lazy_static;
|
||||
|
||||
use kanidm_unix_common::client_sync::call_daemon_blocking;
|
||||
use kanidm_unix_common::constants::DEFAULT_CONFIG_PATH;
|
||||
use kanidm_unix_common::unix_config::KanidmUnixdConfig;
|
||||
use kanidm_unix_common::unix_proto::{ClientRequest, ClientResponse, NssGroup, NssUser};
|
||||
use libnss::group::{Group, GroupHooks};
|
||||
use libnss::interop::Response;
|
||||
use libnss::passwd::{Passwd, PasswdHooks};
|
||||
#[cfg(target_family = "unix")]
|
||||
mod implementation;
|
||||
|
||||
struct KanidmPasswd;
|
||||
libnss_passwd_hooks!(kanidm, KanidmPasswd);
|
||||
|
||||
impl PasswdHooks for KanidmPasswd {
|
||||
fn get_all_entries() -> Response<Vec<Passwd>> {
|
||||
let cfg =
|
||||
match KanidmUnixdConfig::new().read_options_from_optional_config(DEFAULT_CONFIG_PATH) {
|
||||
Ok(c) => c,
|
||||
Err(_) => {
|
||||
return Response::Unavail;
|
||||
}
|
||||
};
|
||||
let req = ClientRequest::NssAccounts;
|
||||
call_daemon_blocking(cfg.sock_path.as_str(), &req, cfg.unix_sock_timeout)
|
||||
.map(|r| match r {
|
||||
ClientResponse::NssAccounts(l) => l.into_iter().map(passwd_from_nssuser).collect(),
|
||||
_ => Vec::new(),
|
||||
})
|
||||
.map(Response::Success)
|
||||
.unwrap_or_else(|_| Response::Success(vec![]))
|
||||
}
|
||||
|
||||
fn get_entry_by_uid(uid: libc::uid_t) -> Response<Passwd> {
|
||||
let cfg =
|
||||
match KanidmUnixdConfig::new().read_options_from_optional_config(DEFAULT_CONFIG_PATH) {
|
||||
Ok(c) => c,
|
||||
Err(_) => {
|
||||
return Response::Unavail;
|
||||
}
|
||||
};
|
||||
let req = ClientRequest::NssAccountByUid(uid);
|
||||
call_daemon_blocking(cfg.sock_path.as_str(), &req, cfg.unix_sock_timeout)
|
||||
.map(|r| match r {
|
||||
ClientResponse::NssAccount(opt) => opt
|
||||
.map(passwd_from_nssuser)
|
||||
.map(Response::Success)
|
||||
.unwrap_or_else(|| Response::NotFound),
|
||||
_ => Response::NotFound,
|
||||
})
|
||||
.unwrap_or_else(|_| Response::NotFound)
|
||||
}
|
||||
|
||||
fn get_entry_by_name(name: String) -> Response<Passwd> {
|
||||
let cfg =
|
||||
match KanidmUnixdConfig::new().read_options_from_optional_config(DEFAULT_CONFIG_PATH) {
|
||||
Ok(c) => c,
|
||||
Err(_) => {
|
||||
return Response::Unavail;
|
||||
}
|
||||
};
|
||||
let req = ClientRequest::NssAccountByName(name);
|
||||
call_daemon_blocking(cfg.sock_path.as_str(), &req, cfg.unix_sock_timeout)
|
||||
.map(|r| match r {
|
||||
ClientResponse::NssAccount(opt) => opt
|
||||
.map(passwd_from_nssuser)
|
||||
.map(Response::Success)
|
||||
.unwrap_or_else(|| Response::NotFound),
|
||||
_ => Response::NotFound,
|
||||
})
|
||||
.unwrap_or_else(|_| Response::NotFound)
|
||||
}
|
||||
}
|
||||
|
||||
struct KanidmGroup;
|
||||
libnss_group_hooks!(kanidm, KanidmGroup);
|
||||
|
||||
impl GroupHooks for KanidmGroup {
|
||||
fn get_all_entries() -> Response<Vec<Group>> {
|
||||
let cfg =
|
||||
match KanidmUnixdConfig::new().read_options_from_optional_config(DEFAULT_CONFIG_PATH) {
|
||||
Ok(c) => c,
|
||||
Err(_) => {
|
||||
return Response::Unavail;
|
||||
}
|
||||
};
|
||||
let req = ClientRequest::NssGroups;
|
||||
call_daemon_blocking(cfg.sock_path.as_str(), &req, cfg.unix_sock_timeout)
|
||||
.map(|r| match r {
|
||||
ClientResponse::NssGroups(l) => l.into_iter().map(group_from_nssgroup).collect(),
|
||||
_ => Vec::new(),
|
||||
})
|
||||
.map(Response::Success)
|
||||
.unwrap_or_else(|_| Response::Success(vec![]))
|
||||
}
|
||||
|
||||
fn get_entry_by_gid(gid: libc::gid_t) -> Response<Group> {
|
||||
let cfg =
|
||||
match KanidmUnixdConfig::new().read_options_from_optional_config(DEFAULT_CONFIG_PATH) {
|
||||
Ok(c) => c,
|
||||
Err(_) => {
|
||||
return Response::Unavail;
|
||||
}
|
||||
};
|
||||
let req = ClientRequest::NssGroupByGid(gid);
|
||||
call_daemon_blocking(cfg.sock_path.as_str(), &req, cfg.unix_sock_timeout)
|
||||
.map(|r| match r {
|
||||
ClientResponse::NssGroup(opt) => opt
|
||||
.map(group_from_nssgroup)
|
||||
.map(Response::Success)
|
||||
.unwrap_or_else(|| Response::NotFound),
|
||||
_ => Response::NotFound,
|
||||
})
|
||||
.unwrap_or_else(|_| Response::NotFound)
|
||||
}
|
||||
|
||||
fn get_entry_by_name(name: String) -> Response<Group> {
|
||||
let cfg =
|
||||
match KanidmUnixdConfig::new().read_options_from_optional_config(DEFAULT_CONFIG_PATH) {
|
||||
Ok(c) => c,
|
||||
Err(_) => {
|
||||
return Response::Unavail;
|
||||
}
|
||||
};
|
||||
let req = ClientRequest::NssGroupByName(name);
|
||||
call_daemon_blocking(cfg.sock_path.as_str(), &req, cfg.unix_sock_timeout)
|
||||
.map(|r| match r {
|
||||
ClientResponse::NssGroup(opt) => opt
|
||||
.map(group_from_nssgroup)
|
||||
.map(Response::Success)
|
||||
.unwrap_or_else(|| Response::NotFound),
|
||||
_ => Response::NotFound,
|
||||
})
|
||||
.unwrap_or_else(|_| Response::NotFound)
|
||||
}
|
||||
}
|
||||
|
||||
fn passwd_from_nssuser(nu: NssUser) -> Passwd {
|
||||
Passwd {
|
||||
name: nu.name,
|
||||
gecos: nu.gecos,
|
||||
passwd: "x".to_string(),
|
||||
uid: nu.gid,
|
||||
gid: nu.gid,
|
||||
dir: nu.homedir,
|
||||
shell: nu.shell,
|
||||
}
|
||||
}
|
||||
|
||||
fn group_from_nssgroup(ng: NssGroup) -> Group {
|
||||
Group {
|
||||
name: ng.name,
|
||||
passwd: "x".to_string(),
|
||||
gid: ng.gid,
|
||||
members: ng.members,
|
||||
}
|
||||
}
|
||||
#[cfg(target_family = "unix")]
|
||||
pub use implementation::*;
|
||||
|
|
|
@ -11,326 +11,9 @@
|
|||
#![deny(clippy::needless_pass_by_value)]
|
||||
#![deny(clippy::trivially_copy_pass_by_ref)]
|
||||
|
||||
// extern crate libc;
|
||||
|
||||
#[cfg(target_family = "unix")]
|
||||
mod pam;
|
||||
use std::collections::BTreeSet;
|
||||
use std::convert::TryFrom;
|
||||
use std::ffi::CStr;
|
||||
|
||||
// use std::os::raw::c_char;
|
||||
use kanidm_unix_common::client_sync::call_daemon_blocking;
|
||||
use kanidm_unix_common::constants::DEFAULT_CONFIG_PATH;
|
||||
use kanidm_unix_common::unix_config::KanidmUnixdConfig;
|
||||
use kanidm_unix_common::unix_proto::{ClientRequest, ClientResponse};
|
||||
|
||||
use crate::pam::constants::*;
|
||||
use crate::pam::conv::PamConv;
|
||||
use crate::pam::module::{PamHandle, PamHooks};
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Options {
|
||||
debug: bool,
|
||||
use_first_pass: bool,
|
||||
ignore_unknown_user: bool,
|
||||
}
|
||||
|
||||
impl TryFrom<&Vec<&CStr>> for Options {
|
||||
type Error = ();
|
||||
|
||||
fn try_from(args: &Vec<&CStr>) -> Result<Self, Self::Error> {
|
||||
let opts: Result<BTreeSet<&str>, _> = args.iter().map(|cs| cs.to_str()).collect();
|
||||
let gopts = match opts {
|
||||
Ok(o) => o,
|
||||
Err(e) => {
|
||||
println!("Error in module args -> {:?}", e);
|
||||
return Err(());
|
||||
}
|
||||
};
|
||||
|
||||
Ok(Options {
|
||||
debug: gopts.contains("debug"),
|
||||
use_first_pass: gopts.contains("use_first_pass"),
|
||||
ignore_unknown_user: gopts.contains("ignore_unknown_user"),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
fn get_cfg() -> Result<KanidmUnixdConfig, PamResultCode> {
|
||||
KanidmUnixdConfig::new()
|
||||
.read_options_from_optional_config(DEFAULT_CONFIG_PATH)
|
||||
.map_err(|_| PamResultCode::PAM_SERVICE_ERR)
|
||||
}
|
||||
|
||||
struct PamKanidm;
|
||||
pam_hooks!(PamKanidm);
|
||||
|
||||
impl PamHooks for PamKanidm {
|
||||
fn acct_mgmt(pamh: &PamHandle, args: Vec<&CStr>, _flags: PamFlag) -> PamResultCode {
|
||||
let opts = match Options::try_from(&args) {
|
||||
Ok(o) => o,
|
||||
Err(_) => return PamResultCode::PAM_SERVICE_ERR,
|
||||
};
|
||||
|
||||
if opts.debug {
|
||||
println!("acct_mgmt");
|
||||
println!("args -> {:?}", args);
|
||||
println!("opts -> {:?}", opts);
|
||||
}
|
||||
|
||||
let account_id = match pamh.get_user(None) {
|
||||
Ok(aid) => aid,
|
||||
Err(e) => {
|
||||
if opts.debug {
|
||||
println!("Error get_user -> {:?}", e);
|
||||
}
|
||||
return e;
|
||||
}
|
||||
};
|
||||
|
||||
let cfg = match get_cfg() {
|
||||
Ok(cfg) => cfg,
|
||||
Err(e) => return e,
|
||||
};
|
||||
let req = ClientRequest::PamAccountAllowed(account_id);
|
||||
// PamResultCode::PAM_IGNORE
|
||||
|
||||
match call_daemon_blocking(cfg.sock_path.as_str(), &req, cfg.unix_sock_timeout) {
|
||||
Ok(r) => match r {
|
||||
ClientResponse::PamStatus(Some(true)) => {
|
||||
if opts.debug {
|
||||
println!("PamResultCode::PAM_SUCCESS");
|
||||
}
|
||||
PamResultCode::PAM_SUCCESS
|
||||
}
|
||||
ClientResponse::PamStatus(Some(false)) => {
|
||||
// println!("PAM_IGNORE");
|
||||
if opts.debug {
|
||||
println!("PamResultCode::PAM_AUTH_ERR");
|
||||
}
|
||||
PamResultCode::PAM_AUTH_ERR
|
||||
}
|
||||
ClientResponse::PamStatus(None) => {
|
||||
if opts.ignore_unknown_user {
|
||||
if opts.debug {
|
||||
println!("PamResultCode::PAM_IGNORE");
|
||||
}
|
||||
PamResultCode::PAM_IGNORE
|
||||
} else {
|
||||
if opts.debug {
|
||||
println!("PamResultCode::PAM_USER_UNKNOWN");
|
||||
}
|
||||
PamResultCode::PAM_USER_UNKNOWN
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
// unexpected response.
|
||||
if opts.debug {
|
||||
println!("PamResultCode::PAM_IGNORE -> {:?}", r);
|
||||
}
|
||||
PamResultCode::PAM_IGNORE
|
||||
}
|
||||
},
|
||||
Err(e) => {
|
||||
if opts.debug {
|
||||
println!("PamResultCode::PAM_IGNORE -> {:?}", e);
|
||||
}
|
||||
PamResultCode::PAM_IGNORE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn sm_authenticate(pamh: &PamHandle, args: Vec<&CStr>, _flags: PamFlag) -> PamResultCode {
|
||||
let opts = match Options::try_from(&args) {
|
||||
Ok(o) => o,
|
||||
Err(_) => return PamResultCode::PAM_SERVICE_ERR,
|
||||
};
|
||||
|
||||
if opts.debug {
|
||||
println!("sm_authenticate");
|
||||
println!("args -> {:?}", args);
|
||||
println!("opts -> {:?}", opts);
|
||||
}
|
||||
|
||||
let account_id = match pamh.get_user(None) {
|
||||
Ok(aid) => aid,
|
||||
Err(e) => {
|
||||
println!("Error get_user -> {:?}", e);
|
||||
return e;
|
||||
}
|
||||
};
|
||||
|
||||
let authtok = match pamh.get_authtok() {
|
||||
Ok(atok) => atok,
|
||||
Err(e) => {
|
||||
if opts.debug {
|
||||
println!("Error get_authtok -> {:?}", e);
|
||||
}
|
||||
return e;
|
||||
}
|
||||
};
|
||||
|
||||
let authtok = match authtok {
|
||||
Some(v) => v,
|
||||
None => {
|
||||
if opts.use_first_pass {
|
||||
if opts.debug {
|
||||
println!("Don't have an authtok, returning PAM_AUTH_ERR");
|
||||
}
|
||||
return PamResultCode::PAM_AUTH_ERR;
|
||||
} else {
|
||||
let conv = match pamh.get_item::<PamConv>() {
|
||||
Ok(conv) => conv,
|
||||
Err(err) => {
|
||||
if opts.debug {
|
||||
println!("Couldn't get pam_conv");
|
||||
}
|
||||
return err;
|
||||
}
|
||||
};
|
||||
match conv.send(PAM_PROMPT_ECHO_OFF, "Password: ") {
|
||||
Ok(password) => match password {
|
||||
Some(pw) => pw,
|
||||
None => {
|
||||
if opts.debug {
|
||||
println!("No password");
|
||||
}
|
||||
return PamResultCode::PAM_CRED_INSUFFICIENT;
|
||||
}
|
||||
},
|
||||
Err(err) => {
|
||||
if opts.debug {
|
||||
println!("Couldn't get password");
|
||||
}
|
||||
return err;
|
||||
}
|
||||
}
|
||||
} // end opts.use_first_pass
|
||||
}
|
||||
};
|
||||
|
||||
let cfg = match get_cfg() {
|
||||
Ok(cfg) => cfg,
|
||||
Err(e) => return e,
|
||||
};
|
||||
let req = ClientRequest::PamAuthenticate(account_id, authtok);
|
||||
|
||||
match call_daemon_blocking(cfg.sock_path.as_str(), &req, cfg.unix_sock_timeout) {
|
||||
Ok(r) => match r {
|
||||
ClientResponse::PamStatus(Some(true)) => {
|
||||
// println!("PAM_SUCCESS");
|
||||
PamResultCode::PAM_SUCCESS
|
||||
}
|
||||
ClientResponse::PamStatus(Some(false)) => {
|
||||
// println!("PAM_AUTH_ERR");
|
||||
PamResultCode::PAM_AUTH_ERR
|
||||
}
|
||||
ClientResponse::PamStatus(None) => {
|
||||
// println!("PAM_USER_UNKNOWN");
|
||||
if opts.ignore_unknown_user {
|
||||
PamResultCode::PAM_IGNORE
|
||||
} else {
|
||||
PamResultCode::PAM_USER_UNKNOWN
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
// unexpected response.
|
||||
if opts.debug {
|
||||
println!("PAM_IGNORE -> {:?}", r);
|
||||
}
|
||||
PamResultCode::PAM_IGNORE
|
||||
}
|
||||
},
|
||||
Err(e) => {
|
||||
if opts.debug {
|
||||
println!("PAM_IGNORE -> {:?}", e);
|
||||
}
|
||||
PamResultCode::PAM_IGNORE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn sm_chauthtok(_pamh: &PamHandle, args: Vec<&CStr>, _flags: PamFlag) -> PamResultCode {
|
||||
let opts = match Options::try_from(&args) {
|
||||
Ok(o) => o,
|
||||
Err(_) => return PamResultCode::PAM_SERVICE_ERR,
|
||||
};
|
||||
|
||||
if opts.debug {
|
||||
println!("sm_chauthtok");
|
||||
println!("args -> {:?}", args);
|
||||
println!("opts -> {:?}", opts);
|
||||
}
|
||||
PamResultCode::PAM_IGNORE
|
||||
}
|
||||
|
||||
fn sm_close_session(_pamh: &PamHandle, args: Vec<&CStr>, _flags: PamFlag) -> PamResultCode {
|
||||
let opts = match Options::try_from(&args) {
|
||||
Ok(o) => o,
|
||||
Err(_) => return PamResultCode::PAM_SERVICE_ERR,
|
||||
};
|
||||
|
||||
if opts.debug {
|
||||
println!("sm_close_session");
|
||||
println!("args -> {:?}", args);
|
||||
println!("opts -> {:?}", opts);
|
||||
}
|
||||
PamResultCode::PAM_SUCCESS
|
||||
}
|
||||
|
||||
fn sm_open_session(pamh: &PamHandle, args: Vec<&CStr>, _flags: PamFlag) -> PamResultCode {
|
||||
let opts = match Options::try_from(&args) {
|
||||
Ok(o) => o,
|
||||
Err(_) => return PamResultCode::PAM_SERVICE_ERR,
|
||||
};
|
||||
|
||||
if opts.debug {
|
||||
println!("sm_open_session");
|
||||
println!("args -> {:?}", args);
|
||||
println!("opts -> {:?}", opts);
|
||||
}
|
||||
|
||||
let account_id = match pamh.get_user(None) {
|
||||
Ok(aid) => aid,
|
||||
Err(e) => {
|
||||
if opts.debug {
|
||||
println!("Error get_user -> {:?}", e);
|
||||
}
|
||||
return e;
|
||||
}
|
||||
};
|
||||
|
||||
let cfg = match get_cfg() {
|
||||
Ok(cfg) => cfg,
|
||||
Err(e) => return e,
|
||||
};
|
||||
let req = ClientRequest::PamAccountBeginSession(account_id);
|
||||
|
||||
match call_daemon_blocking(cfg.sock_path.as_str(), &req, cfg.unix_sock_timeout) {
|
||||
Ok(ClientResponse::Ok) => {
|
||||
// println!("PAM_SUCCESS");
|
||||
PamResultCode::PAM_SUCCESS
|
||||
}
|
||||
other => {
|
||||
if opts.debug {
|
||||
println!("PAM_IGNORE -> {:?}", other);
|
||||
}
|
||||
PamResultCode::PAM_IGNORE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn sm_setcred(_pamh: &PamHandle, args: Vec<&CStr>, _flags: PamFlag) -> PamResultCode {
|
||||
let opts = match Options::try_from(&args) {
|
||||
Ok(o) => o,
|
||||
Err(_) => return PamResultCode::PAM_SERVICE_ERR,
|
||||
};
|
||||
|
||||
if opts.debug {
|
||||
println!("sm_setcred");
|
||||
println!("args -> {:?}", args);
|
||||
println!("opts -> {:?}", opts);
|
||||
}
|
||||
PamResultCode::PAM_SUCCESS
|
||||
}
|
||||
}
|
||||
// pub use needs to be here so it'll compile and export all the things
|
||||
#[cfg(target_family = "unix")]
|
||||
pub use crate::pam::*;
|
||||
|
|
|
@ -30,3 +30,326 @@ pub mod items;
|
|||
#[doc(hidden)]
|
||||
pub mod macros;
|
||||
pub mod module;
|
||||
|
||||
use std::collections::BTreeSet;
|
||||
use std::convert::TryFrom;
|
||||
use std::ffi::CStr;
|
||||
|
||||
use kanidm_unix_common::client_sync::call_daemon_blocking;
|
||||
use kanidm_unix_common::constants::DEFAULT_CONFIG_PATH;
|
||||
use kanidm_unix_common::unix_config::KanidmUnixdConfig;
|
||||
use kanidm_unix_common::unix_proto::{ClientRequest, ClientResponse};
|
||||
|
||||
use crate::pam::constants::*;
|
||||
use crate::pam::conv::PamConv;
|
||||
use crate::pam::module::{PamHandle, PamHooks};
|
||||
use crate::pam_hooks;
|
||||
use constants::PamResultCode;
|
||||
|
||||
pub fn get_cfg() -> Result<KanidmUnixdConfig, PamResultCode> {
|
||||
KanidmUnixdConfig::new()
|
||||
.read_options_from_optional_config(DEFAULT_CONFIG_PATH)
|
||||
.map_err(|_| PamResultCode::PAM_SERVICE_ERR)
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Options {
|
||||
debug: bool,
|
||||
use_first_pass: bool,
|
||||
ignore_unknown_user: bool,
|
||||
}
|
||||
|
||||
impl TryFrom<&Vec<&CStr>> for Options {
|
||||
type Error = ();
|
||||
|
||||
fn try_from(args: &Vec<&CStr>) -> Result<Self, Self::Error> {
|
||||
let opts: Result<BTreeSet<&str>, _> = args.iter().map(|cs| cs.to_str()).collect();
|
||||
let gopts = match opts {
|
||||
Ok(o) => o,
|
||||
Err(e) => {
|
||||
println!("Error in module args -> {:?}", e);
|
||||
return Err(());
|
||||
}
|
||||
};
|
||||
|
||||
Ok(Options {
|
||||
debug: gopts.contains("debug"),
|
||||
use_first_pass: gopts.contains("use_first_pass"),
|
||||
ignore_unknown_user: gopts.contains("ignore_unknown_user"),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
pub struct PamKanidm;
|
||||
|
||||
pam_hooks!(PamKanidm);
|
||||
|
||||
impl PamHooks for PamKanidm {
|
||||
fn acct_mgmt(pamh: &PamHandle, args: Vec<&CStr>, _flags: PamFlag) -> PamResultCode {
|
||||
let opts = match Options::try_from(&args) {
|
||||
Ok(o) => o,
|
||||
Err(_) => return PamResultCode::PAM_SERVICE_ERR,
|
||||
};
|
||||
|
||||
if opts.debug {
|
||||
println!("acct_mgmt");
|
||||
println!("args -> {:?}", args);
|
||||
println!("opts -> {:?}", opts);
|
||||
}
|
||||
|
||||
let account_id = match pamh.get_user(None) {
|
||||
Ok(aid) => aid,
|
||||
Err(e) => {
|
||||
if opts.debug {
|
||||
println!("Error get_user -> {:?}", e);
|
||||
}
|
||||
return e;
|
||||
}
|
||||
};
|
||||
|
||||
let cfg = match get_cfg() {
|
||||
Ok(cfg) => cfg,
|
||||
Err(e) => return e,
|
||||
};
|
||||
let req = ClientRequest::PamAccountAllowed(account_id);
|
||||
// PamResultCode::PAM_IGNORE
|
||||
|
||||
match call_daemon_blocking(cfg.sock_path.as_str(), &req, cfg.unix_sock_timeout) {
|
||||
Ok(r) => match r {
|
||||
ClientResponse::PamStatus(Some(true)) => {
|
||||
if opts.debug {
|
||||
println!("PamResultCode::PAM_SUCCESS");
|
||||
}
|
||||
PamResultCode::PAM_SUCCESS
|
||||
}
|
||||
ClientResponse::PamStatus(Some(false)) => {
|
||||
// println!("PAM_IGNORE");
|
||||
if opts.debug {
|
||||
println!("PamResultCode::PAM_AUTH_ERR");
|
||||
}
|
||||
PamResultCode::PAM_AUTH_ERR
|
||||
}
|
||||
ClientResponse::PamStatus(None) => {
|
||||
if opts.ignore_unknown_user {
|
||||
if opts.debug {
|
||||
println!("PamResultCode::PAM_IGNORE");
|
||||
}
|
||||
PamResultCode::PAM_IGNORE
|
||||
} else {
|
||||
if opts.debug {
|
||||
println!("PamResultCode::PAM_USER_UNKNOWN");
|
||||
}
|
||||
PamResultCode::PAM_USER_UNKNOWN
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
// unexpected response.
|
||||
if opts.debug {
|
||||
println!("PamResultCode::PAM_IGNORE -> {:?}", r);
|
||||
}
|
||||
PamResultCode::PAM_IGNORE
|
||||
}
|
||||
},
|
||||
Err(e) => {
|
||||
if opts.debug {
|
||||
println!("PamResultCode::PAM_IGNORE -> {:?}", e);
|
||||
}
|
||||
PamResultCode::PAM_IGNORE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn sm_authenticate(pamh: &PamHandle, args: Vec<&CStr>, _flags: PamFlag) -> PamResultCode {
|
||||
let opts = match Options::try_from(&args) {
|
||||
Ok(o) => o,
|
||||
Err(_) => return PamResultCode::PAM_SERVICE_ERR,
|
||||
};
|
||||
|
||||
if opts.debug {
|
||||
println!("sm_authenticate");
|
||||
println!("args -> {:?}", args);
|
||||
println!("opts -> {:?}", opts);
|
||||
}
|
||||
|
||||
let account_id = match pamh.get_user(None) {
|
||||
Ok(aid) => aid,
|
||||
Err(e) => {
|
||||
println!("Error get_user -> {:?}", e);
|
||||
return e;
|
||||
}
|
||||
};
|
||||
|
||||
let authtok = match pamh.get_authtok() {
|
||||
Ok(atok) => atok,
|
||||
Err(e) => {
|
||||
if opts.debug {
|
||||
println!("Error get_authtok -> {:?}", e);
|
||||
}
|
||||
return e;
|
||||
}
|
||||
};
|
||||
|
||||
let authtok = match authtok {
|
||||
Some(v) => v,
|
||||
None => {
|
||||
if opts.use_first_pass {
|
||||
if opts.debug {
|
||||
println!("Don't have an authtok, returning PAM_AUTH_ERR");
|
||||
}
|
||||
return PamResultCode::PAM_AUTH_ERR;
|
||||
} else {
|
||||
let conv = match pamh.get_item::<PamConv>() {
|
||||
Ok(conv) => conv,
|
||||
Err(err) => {
|
||||
if opts.debug {
|
||||
println!("Couldn't get pam_conv");
|
||||
}
|
||||
return err;
|
||||
}
|
||||
};
|
||||
match conv.send(PAM_PROMPT_ECHO_OFF, "Password: ") {
|
||||
Ok(password) => match password {
|
||||
Some(pw) => pw,
|
||||
None => {
|
||||
if opts.debug {
|
||||
println!("No password");
|
||||
}
|
||||
return PamResultCode::PAM_CRED_INSUFFICIENT;
|
||||
}
|
||||
},
|
||||
Err(err) => {
|
||||
if opts.debug {
|
||||
println!("Couldn't get password");
|
||||
}
|
||||
return err;
|
||||
}
|
||||
}
|
||||
} // end opts.use_first_pass
|
||||
}
|
||||
};
|
||||
|
||||
let cfg = match get_cfg() {
|
||||
Ok(cfg) => cfg,
|
||||
Err(e) => return e,
|
||||
};
|
||||
let req = ClientRequest::PamAuthenticate(account_id, authtok);
|
||||
|
||||
match call_daemon_blocking(cfg.sock_path.as_str(), &req, cfg.unix_sock_timeout) {
|
||||
Ok(r) => match r {
|
||||
ClientResponse::PamStatus(Some(true)) => {
|
||||
// println!("PAM_SUCCESS");
|
||||
PamResultCode::PAM_SUCCESS
|
||||
}
|
||||
ClientResponse::PamStatus(Some(false)) => {
|
||||
// println!("PAM_AUTH_ERR");
|
||||
PamResultCode::PAM_AUTH_ERR
|
||||
}
|
||||
ClientResponse::PamStatus(None) => {
|
||||
// println!("PAM_USER_UNKNOWN");
|
||||
if opts.ignore_unknown_user {
|
||||
PamResultCode::PAM_IGNORE
|
||||
} else {
|
||||
PamResultCode::PAM_USER_UNKNOWN
|
||||
}
|
||||
}
|
||||
_ => {
|
||||
// unexpected response.
|
||||
if opts.debug {
|
||||
println!("PAM_IGNORE -> {:?}", r);
|
||||
}
|
||||
PamResultCode::PAM_IGNORE
|
||||
}
|
||||
},
|
||||
Err(e) => {
|
||||
if opts.debug {
|
||||
println!("PAM_IGNORE -> {:?}", e);
|
||||
}
|
||||
PamResultCode::PAM_IGNORE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn sm_chauthtok(_pamh: &PamHandle, args: Vec<&CStr>, _flags: PamFlag) -> PamResultCode {
|
||||
let opts = match Options::try_from(&args) {
|
||||
Ok(o) => o,
|
||||
Err(_) => return PamResultCode::PAM_SERVICE_ERR,
|
||||
};
|
||||
|
||||
if opts.debug {
|
||||
println!("sm_chauthtok");
|
||||
println!("args -> {:?}", args);
|
||||
println!("opts -> {:?}", opts);
|
||||
}
|
||||
PamResultCode::PAM_IGNORE
|
||||
}
|
||||
|
||||
fn sm_close_session(_pamh: &PamHandle, args: Vec<&CStr>, _flags: PamFlag) -> PamResultCode {
|
||||
let opts = match Options::try_from(&args) {
|
||||
Ok(o) => o,
|
||||
Err(_) => return PamResultCode::PAM_SERVICE_ERR,
|
||||
};
|
||||
|
||||
if opts.debug {
|
||||
println!("sm_close_session");
|
||||
println!("args -> {:?}", args);
|
||||
println!("opts -> {:?}", opts);
|
||||
}
|
||||
PamResultCode::PAM_SUCCESS
|
||||
}
|
||||
|
||||
fn sm_open_session(pamh: &PamHandle, args: Vec<&CStr>, _flags: PamFlag) -> PamResultCode {
|
||||
let opts = match Options::try_from(&args) {
|
||||
Ok(o) => o,
|
||||
Err(_) => return PamResultCode::PAM_SERVICE_ERR,
|
||||
};
|
||||
|
||||
if opts.debug {
|
||||
println!("sm_open_session");
|
||||
println!("args -> {:?}", args);
|
||||
println!("opts -> {:?}", opts);
|
||||
}
|
||||
|
||||
let account_id = match pamh.get_user(None) {
|
||||
Ok(aid) => aid,
|
||||
Err(e) => {
|
||||
if opts.debug {
|
||||
println!("Error get_user -> {:?}", e);
|
||||
}
|
||||
return e;
|
||||
}
|
||||
};
|
||||
|
||||
let cfg = match get_cfg() {
|
||||
Ok(cfg) => cfg,
|
||||
Err(e) => return e,
|
||||
};
|
||||
let req = ClientRequest::PamAccountBeginSession(account_id);
|
||||
|
||||
match call_daemon_blocking(cfg.sock_path.as_str(), &req, cfg.unix_sock_timeout) {
|
||||
Ok(ClientResponse::Ok) => {
|
||||
// println!("PAM_SUCCESS");
|
||||
PamResultCode::PAM_SUCCESS
|
||||
}
|
||||
other => {
|
||||
if opts.debug {
|
||||
println!("PAM_IGNORE -> {:?}", other);
|
||||
}
|
||||
PamResultCode::PAM_IGNORE
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn sm_setcred(_pamh: &PamHandle, args: Vec<&CStr>, _flags: PamFlag) -> PamResultCode {
|
||||
let opts = match Options::try_from(&args) {
|
||||
Ok(o) => o,
|
||||
Err(_) => return PamResultCode::PAM_SERVICE_ERR,
|
||||
};
|
||||
|
||||
if opts.debug {
|
||||
println!("sm_setcred");
|
||||
println!("args -> {:?}", args);
|
||||
println!("opts -> {:?}", opts);
|
||||
}
|
||||
PamResultCode::PAM_SUCCESS
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,15 +10,24 @@
|
|||
#![deny(clippy::needless_pass_by_value)]
|
||||
#![deny(clippy::trivially_copy_pass_by_ref)]
|
||||
|
||||
#[cfg(target_family = "unix")]
|
||||
#[macro_use]
|
||||
extern crate tracing;
|
||||
#[cfg(target_family = "unix")]
|
||||
#[macro_use]
|
||||
extern crate rusqlite;
|
||||
|
||||
#[cfg(target_family = "unix")]
|
||||
pub mod cache;
|
||||
#[cfg(target_family = "unix")]
|
||||
pub mod client;
|
||||
#[cfg(target_family = "unix")]
|
||||
pub mod client_sync;
|
||||
#[cfg(target_family = "unix")]
|
||||
pub mod constants;
|
||||
#[cfg(target_family = "unix")]
|
||||
pub(crate) mod db;
|
||||
#[cfg(target_family = "unix")]
|
||||
pub mod unix_config;
|
||||
#[cfg(target_family = "unix")]
|
||||
pub mod unix_proto;
|
||||
|
|
|
@ -4,7 +4,6 @@ FROM ${BASE_IMAGE} AS repos
|
|||
RUN \
|
||||
--mount=type=cache,id=zypp,target=/var/cache/zypp \
|
||||
zypper mr -k repo-oss && \
|
||||
zypper mr -k repo-non-oss && \
|
||||
zypper mr -k repo-update && \
|
||||
zypper dup -y
|
||||
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
#[cfg(not(target_family = "windows"))]
|
||||
use std::fs::Metadata;
|
||||
use std::io::ErrorKind;
|
||||
#[cfg(target_os = "linux")]
|
||||
|
@ -161,6 +160,7 @@ impl Distribution<char> for DistinctAlpha {
|
|||
}
|
||||
|
||||
#[cfg(target_family = "unix")]
|
||||
/// Check a given file's metadata is read-only for the current user (true = read-only)
|
||||
pub fn file_permissions_readonly(meta: &Metadata) -> bool {
|
||||
// Who are we running as?
|
||||
let cuid = get_current_uid();
|
||||
|
@ -183,6 +183,16 @@ pub fn file_permissions_readonly(meta: &Metadata) -> bool {
|
|||
)
|
||||
}
|
||||
|
||||
#[cfg(not(target_family = "unix"))]
|
||||
/// Check a given file's metadata is read-only for the current user (true = read-only) Stub function if you're building for windows!
|
||||
pub fn file_permissions_readonly(meta: &Metadata) -> bool {
|
||||
debug!(
|
||||
"Windows target asked to check metadata on {:?} returning false",
|
||||
meta
|
||||
);
|
||||
false
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::prelude::*;
|
||||
|
|
|
@ -33,23 +33,23 @@ impl ValueSetSession {
|
|||
}
|
||||
|
||||
pub fn from_dbvs2(data: Vec<DbValueSession>) -> Result<ValueSet, OperationError> {
|
||||
let map =
|
||||
data.into_iter()
|
||||
.filter_map(|dbv| {
|
||||
match dbv {
|
||||
// MISTAKE - Skip due to lack of credential id
|
||||
// Don't actually skip, generate a random cred id. Session cleanup will
|
||||
// trim sessions on users, but if we skip blazenly we invalidate every api
|
||||
// token ever issued. OOPS!
|
||||
DbValueSession::V1 {
|
||||
refer,
|
||||
label,
|
||||
expiry,
|
||||
issued_at,
|
||||
issued_by,
|
||||
scope,
|
||||
} => {
|
||||
let cred_id = Uuid::new_v4();
|
||||
let map = data
|
||||
.into_iter()
|
||||
.filter_map(|dbv| {
|
||||
match dbv {
|
||||
// MISTAKE - Skip due to lack of credential id
|
||||
// Don't actually skip, generate a random cred id. Session cleanup will
|
||||
// trim sessions on users, but if we skip blazenly we invalidate every api
|
||||
// token ever issued. OOPS!
|
||||
DbValueSession::V1 {
|
||||
refer,
|
||||
label,
|
||||
expiry,
|
||||
issued_at,
|
||||
issued_by,
|
||||
scope,
|
||||
} => {
|
||||
let cred_id = Uuid::new_v4();
|
||||
|
||||
// Convert things.
|
||||
let issued_at = OffsetDateTime::parse(issued_at, time::Format::Rfc3339)
|
||||
|
|
|
@ -14,13 +14,13 @@ license = "MPL-2.0"
|
|||
homepage = "https://github.com/kanidm/kanidm/"
|
||||
repository = "https://github.com/kanidm/kanidm/"
|
||||
|
||||
# version.workspace = true
|
||||
# authors.workspace = true
|
||||
# rust-version.workspace = true
|
||||
# edition.workspace = true
|
||||
# license.workspace = true
|
||||
# homepage.workspace = true
|
||||
# repository.workspace = true
|
||||
# version = { workspace = true }
|
||||
# authors = { workspace = true }
|
||||
# rust-version = { workspace = true }
|
||||
# edition = { workspace = true }
|
||||
# license = { workspace = true }
|
||||
# homepage = { workspace = true }
|
||||
# repository = { workspace = true }
|
||||
|
||||
# These are ignored because the crate is in a workspace
|
||||
#[profile.release]
|
||||
|
@ -32,21 +32,21 @@ crate-type = ["cdylib", "rlib"]
|
|||
[dependencies]
|
||||
compact_jwt = { workspace = true, default-features = false, features = ["unsafe_release_without_verify"] }
|
||||
# gloo = "^0.8.0"
|
||||
gloo.workspace = true
|
||||
gloo-net.workspace = true
|
||||
js-sys.workspace = true
|
||||
gloo = { workspace = true }
|
||||
gloo-net = { workspace = true }
|
||||
js-sys = { workspace = true }
|
||||
kanidm_proto = { path = "../kanidm_proto", features = ["wasm"] }
|
||||
qrcode = { workspace = true, default-features = false, features = ["svg"] }
|
||||
serde = { workspace = true, features = ["derive"] }
|
||||
serde_json.workspace = true
|
||||
serde-wasm-bindgen.workspace = true
|
||||
wasm-bindgen.workspace = true
|
||||
wasm-bindgen-futures.workspace = true
|
||||
wasm-bindgen-test.workspace = true
|
||||
url.workspace = true
|
||||
uuid.workspace = true
|
||||
serde_json = { workspace = true }
|
||||
serde-wasm-bindgen = { workspace = true }
|
||||
wasm-bindgen = { workspace = true }
|
||||
wasm-bindgen-futures = { workspace = true }
|
||||
wasm-bindgen-test = { workspace = true }
|
||||
url = { workspace = true }
|
||||
uuid = { workspace = true }
|
||||
yew = { workspace = true, features = ["csr"] }
|
||||
yew-router.workspace = true
|
||||
yew-router = { workspace = true }
|
||||
|
||||
|
||||
[dependencies.web-sys]
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
../LICENSE.md
|
0
kanidmd_web_ui/LICENSE.md
Normal file
0
kanidmd_web_ui/LICENSE.md
Normal file
|
@ -1 +0,0 @@
|
|||
../README.md
|
0
kanidmd_web_ui/README.md
Normal file
0
kanidmd_web_ui/README.md
Normal file
|
@ -28,6 +28,8 @@ wasm-pack build ${BUILD_FLAGS} --target web || exit 1
|
|||
touch ./pkg/ANYTHING_HERE_WILL_BE_DELETED_ADD_TO_SRC && \
|
||||
rsync --delete-after -r --copy-links -v ./src/img/ ./pkg/img/ && \
|
||||
rsync --delete-after -r --copy-links -v ./src/external/ ./pkg/external/ && \
|
||||
cp ../README.md ./pkg/
|
||||
cp ../LICENSE.md ./pkg/
|
||||
cp ./src/style.css ./pkg/style.css && \
|
||||
cp ./src/wasmloader.js ./pkg/wasmloader.js && \
|
||||
rm ./pkg/.gitignore
|
||||
|
|
|
@ -1,168 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="256"
|
||||
height="256"
|
||||
viewBox="0 0 135.46667 135.46666"
|
||||
version="1.1"
|
||||
id="svg1084"
|
||||
sodipodi:docname="kani-waving.svg"
|
||||
inkscape:version="1.2 (dc2aeda, 2022-05-15)"
|
||||
inkscape:export-filename="logo-180.png"
|
||||
inkscape:export-xdpi="33.75"
|
||||
inkscape:export-ydpi="33.75"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<title
|
||||
id="title332">Kanidm Square Logo</title>
|
||||
<sodipodi:namedview
|
||||
id="namedview39"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
showgrid="false"
|
||||
showguides="true"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="178"
|
||||
inkscape:cy="304.5"
|
||||
inkscape:window-width="1389"
|
||||
inkscape:window-height="847"
|
||||
inkscape:window-x="51"
|
||||
inkscape:window-y="25"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg1084">
|
||||
<sodipodi:guide
|
||||
position="-52.916665,67.733332"
|
||||
orientation="0,1"
|
||||
id="guide145"
|
||||
inkscape:locked="false"
|
||||
inkscape:label="vertical_middle"
|
||||
inkscape:color="rgb(0,134,229)" />
|
||||
<sodipodi:guide
|
||||
position="121.97292,175.15416"
|
||||
orientation="-1,0"
|
||||
id="guide777"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,134,229)" />
|
||||
<sodipodi:guide
|
||||
position="13.49375,173.03749"
|
||||
orientation="-1,0"
|
||||
id="guide779"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,134,229)" />
|
||||
<sodipodi:guide
|
||||
position="22.754166,121.97292"
|
||||
orientation="0,1"
|
||||
id="guide781"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,134,229)" />
|
||||
<sodipodi:guide
|
||||
position="4.4979168,13.758333"
|
||||
orientation="0,1"
|
||||
id="guide783"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,134,229)" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs1081" />
|
||||
<metadata
|
||||
id="metadata330">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:title>Kanidm Square Logo</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
id="layer1"
|
||||
transform="matrix(1.0952772,0,0,1.0952772,-42.847275,-49.68044)"
|
||||
inkscape:label="kani"
|
||||
style="display:inline">
|
||||
<path
|
||||
id="path5404"
|
||||
d="m 62.537712,110.23377 c -3.36297,8.12708 5.78522,15.61876 5.82446,15.73981 -1.67096,-4.90156 -3.43697,-8.85836 -0.189,-12.28424"
|
||||
style="display:inline;fill:#803300;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="display:inline;fill:#803300;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 138.4423,109.69923 c 3.36297,8.12708 -5.78522,15.61876 -5.82446,15.7398 1.67096,-4.90155 3.43697,-8.85835 0.189,-12.28423"
|
||||
id="path5408" />
|
||||
<path
|
||||
id="path4529"
|
||||
d="m 100.24698,67.21217 c -1.308628,-0.01556 -2.560878,2.352773 -4.890668,6.986654 -7.05187,-7.755768 -7.41258,-7.849666 -9.84229,2.649966 -0.11364,0.04758 -0.22709,0.0959 -0.34055,0.144695 -8.88231,-5.324406 -9.34124,-5.366051 -8.66717,5.041551 -0.21569,0.159933 -0.43121,0.322088 -0.64596,0.486794 -9.102,-3.605578 -9.49555,-3.378386 -7.19232,6.611477 -0.10784,0.11671 -0.21599,0.23284 -0.3235,0.35089 -9.27685,-2.506375 -9.53641,-2.129764 -6.07663,7.65845 -0.14847,0.21295 -0.29578,0.42957 -0.44338,0.64544 -10.45618,-1.11775 -10.67098,-0.91353 -5.35523,8.828413 -0.026,0.0482 -0.0526,0.0943 -0.0786,0.14263 -4.28381,2.04782 -5.70197,4.54381 -7.73183,7.89409 -0.15756,6.64457 6.9544,12.37105 17.18035,18.87895 -3.51325,-6.5113 -9.00735,-9.81207 -10.0614,-17.88832 1.54367,-2.90538 4.16877,-3.90901 6.42286,-5.21622 24.61995,14.36815 50.615808,14.53471 76.550928,-0.55035 2.26015,1.31503 4.90084,2.31509 6.45076,5.23224 -1.05405,8.07624 -6.54866,11.3765 -10.06191,17.8878 10.22594,-6.5079 17.33842,-12.23387 17.18086,-18.87844 -1.97354,-3.25733 -3.37677,-5.706 -7.38973,-7.72149 5.01291,-9.218263 4.53571,-9.305023 -5.98567,-8.177293 -0.0891,-0.1152 -0.17795,-0.23186 -0.26717,-0.34623 3.63467,-10.261532 3.40665,-10.529692 -6.39186,-7.87136 2.47993,-10.705895 2.14854,-10.749554 -7.77938,-6.803718 0.74781,-11.285018 0.47993,-11.261581 -8.88835,-5.642548 -2.49815,-10.818768 -2.79293,-10.786576 -9.94048,-2.924887 -2.68846,-4.933638 -4.10296,-7.403383 -5.43173,-7.419184 z"
|
||||
style="display:inline;fill:#ff6600;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
id="path5389"
|
||||
d="m 75.334492,106.8255 c -0.51041,0.004 -0.85068,0.0544 -0.79478,0.0889 0,0 -9.13406,11.93611 0.31006,18.65881 a 9.7471106,8.2770874 37.793943 0 0 1.43712,9.42372 9.7471106,8.2770874 37.793943 0 0 10.56473,3.9672 l -3.56412,-8.60569 9.19685,0.73536 a 9.7471106,8.2770874 37.793943 0 0 -7.02645,-8.91057 9.7471106,8.2770874 37.793943 0 0 -7.00784,0.009 c -1.86231,-1.36401 -4.6287,-4.92596 -0.0408,-12.47521 1.51807,-2.49795 -1.54349,-2.90314 -3.07475,-2.89129 z"
|
||||
style="display:inline;fill:#ff6600;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:label="path5389" />
|
||||
<g
|
||||
id="g5758"
|
||||
transform="translate(-2.3193819,-7.5517449)"
|
||||
style="display:inline"
|
||||
inkscape:label="kani">
|
||||
<path
|
||||
style="display:inline;fill:#d45500;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 98.808992,121.55238 c -0.682767,-0.0559 4.468828,10.17565 8.051908,0.17277 0.24133,-0.67372 -3.69223,2.90976 -8.051908,-0.17277 z"
|
||||
id="path5399" />
|
||||
<g
|
||||
id="g351">
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 93.212672,111.5632 c -5.131386,10.99206 5.618332,14.73472 4.412511,4.11951 -0.319289,-3.2881 -2.328089,-7.17448 -4.412511,-4.11951 z"
|
||||
id="path5415" />
|
||||
<path
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 95.394393,112.41429 c -1.183441,1.51896 -0.08172,3.83605 -0.09872,3.98526 1.674403,1.64132 1.61267,-4.77034 0.09872,-3.98526 z"
|
||||
id="path5417" />
|
||||
</g>
|
||||
<g
|
||||
id="g355">
|
||||
<path
|
||||
id="path5433"
|
||||
d="m 109.6169,111.5632 c -5.13141,10.99206 5.61836,14.73472 4.41254,4.11951 -0.31929,-3.2881 -2.3281,-7.17448 -4.41254,-4.11951 z"
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
id="path5435"
|
||||
d="m 111.79864,112.41429 c -1.18345,1.51896 -0.0817,3.83605 -0.0987,3.98526 1.67441,1.64132 1.61267,-4.77034 0.0987,-3.98526 z"
|
||||
style="display:inline;fill:#ffffff;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
id="path5732"
|
||||
d="m 111.51646,83.878113 c -0.0644,2.604234 0.83829,5.245703 2.49515,7.301842 2.19739,2.716867 5.40747,4.034785 8.37885,3.439994 6.01625,8.488971 -0.30315,11.998681 -0.4866,12.038481 -1.32922,0.42046 0.0534,6.32365 4.60901,2.5271 7.11608,-5.93031 2.73673,-13.62732 0.0641,-17.143859 1.54476,-1.912559 2.20351,-4.57778 1.80861,-7.317326 -0.6031,-4.141273 -3.48425,-7.674191 -7.13223,-8.745669 l -1.25194,9.229861 -1.06142,-0.736985 z"
|
||||
style="display:inline;fill:#ff6600;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:label="arm-up"
|
||||
transform="matrix(1.0952772,0,0,1.0952772,-42.847275,-49.680439)">
|
||||
<set id="show_frame0" attributeName="visibility" attributeType="CSS" to="visible"
|
||||
begin="0ms; hide_frame1.end" dur="500ms" fill="freeze"/>
|
||||
<set id="hide_frame0" attributeName="visibility" attributeType="CSS" to="hidden"
|
||||
begin="show_frame0.end" dur="1ms" fill="freeze"/>
|
||||
</path>
|
||||
<path
|
||||
id="path294"
|
||||
d="m 136.84733,83.996879 c -2.18137,1.42401 -3.84498,3.66555 -4.59874,6.19631 -0.99138,3.35068 -0.25622,6.742 1.91889,8.85192 -3.57942,9.769591 -10.05414,6.555411 -10.19096,6.426891 -1.10017,-0.85629 -5.17794,3.63047 0.53268,5.22929 8.92019,2.49747 12.77572,-5.47478 14.1562,-9.67038 2.45132,0.18756 5.02004,-0.78148 7.05239,-2.660471 3.06875,-2.84546 4.34444,-7.22212 3.15795,-10.83433 l -8.31186,4.20365 0.005,-1.29218 z"
|
||||
style="display:inline;fill:#ff6600;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:label="arm-down"
|
||||
transform="matrix(1.0952772,0,0,1.0952772,-42.847275,-49.680439)" visibility="hidden">
|
||||
<set id="show_frame1" attributeName="visibility" attributeType="CSS" to="visible"
|
||||
begin="hide_frame0.end" dur="500ms" fill="freeze"/>
|
||||
<set id="hide_frame1" attributeName="visibility" attributeType="CSS" to="hidden"
|
||||
begin="show_frame1.end" dur="1ms" fill="freeze"/>
|
||||
</path>
|
||||
</svg>
|
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 0 B |
|
@ -1,252 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="512"
|
||||
height="512"
|
||||
viewBox="0 0 135.46667 135.46666"
|
||||
version="1.1"
|
||||
id="svg1084"
|
||||
sodipodi:docname="logo-square.svg"
|
||||
inkscape:version="1.2 (dc2aeda, 2022-05-15)"
|
||||
inkscape:export-filename="logo-180.png"
|
||||
inkscape:export-xdpi="33.75"
|
||||
inkscape:export-ydpi="33.75"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<title
|
||||
id="title332">Kanidm Square Logo</title>
|
||||
<sodipodi:namedview
|
||||
id="namedview39"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
showgrid="false"
|
||||
showguides="true"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="234.5"
|
||||
inkscape:cy="304.5"
|
||||
inkscape:window-width="1389"
|
||||
inkscape:window-height="847"
|
||||
inkscape:window-x="51"
|
||||
inkscape:window-y="25"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg1084">
|
||||
<sodipodi:guide
|
||||
position="-52.916665,67.733332"
|
||||
orientation="0,1"
|
||||
id="guide145"
|
||||
inkscape:locked="false"
|
||||
inkscape:label="vertical_middle"
|
||||
inkscape:color="rgb(0,134,229)" />
|
||||
<sodipodi:guide
|
||||
position="121.97292,175.15416"
|
||||
orientation="-1,0"
|
||||
id="guide777"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,134,229)" />
|
||||
<sodipodi:guide
|
||||
position="13.49375,173.03749"
|
||||
orientation="-1,0"
|
||||
id="guide779"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,134,229)" />
|
||||
<sodipodi:guide
|
||||
position="22.754166,121.97292"
|
||||
orientation="0,1"
|
||||
id="guide781"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,134,229)" />
|
||||
<sodipodi:guide
|
||||
position="4.4979168,13.758333"
|
||||
orientation="0,1"
|
||||
id="guide783"
|
||||
inkscape:locked="false"
|
||||
inkscape:label=""
|
||||
inkscape:color="rgb(0,134,229)" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs1081" />
|
||||
<metadata
|
||||
id="metadata330">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:title>Kanidm Square Logo</dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<rect
|
||||
style="fill:#ffffff;stroke-width:0.243721"
|
||||
id="rect443"
|
||||
width="135.46666"
|
||||
height="135.46666"
|
||||
x="0"
|
||||
y="0"
|
||||
inkscape:label="background"
|
||||
sodipodi:insensitive="true" />
|
||||
<g
|
||||
id="layer1"
|
||||
transform="matrix(0.91407203,0,0,0.91407203,-34.121105,-24.362694)"
|
||||
inkscape:label="kani">
|
||||
<path
|
||||
id="path5404"
|
||||
d="m 62.537712,110.23377 c -3.36297,8.12708 5.78522,15.61876 5.82446,15.73981 -1.67096,-4.90156 -3.43697,-8.85836 -0.189,-12.28424"
|
||||
style="display:inline;fill:#803300;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="display:inline;fill:#803300;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 138.4423,109.69923 c 3.36297,8.12708 -5.78522,15.61876 -5.82446,15.7398 1.67096,-4.90155 3.43697,-8.85835 0.189,-12.28423"
|
||||
id="path5408" />
|
||||
<path
|
||||
id="path4529"
|
||||
d="m 100.24698,67.21217 c -1.308628,-0.01556 -2.560878,2.352773 -4.890668,6.986654 -7.05187,-7.755768 -7.41258,-7.849666 -9.84229,2.649966 -0.11364,0.04758 -0.22709,0.0959 -0.34055,0.144695 -8.88231,-5.324406 -9.34124,-5.366051 -8.66717,5.041551 -0.21569,0.159933 -0.43121,0.322088 -0.64596,0.486794 -9.102,-3.605578 -9.49555,-3.378386 -7.19232,6.611477 -0.10784,0.11671 -0.21599,0.23284 -0.3235,0.35089 -9.27685,-2.506375 -9.53641,-2.129764 -6.07663,7.65845 -0.14847,0.21295 -0.29578,0.42957 -0.44338,0.64544 -10.45618,-1.11775 -10.67098,-0.91353 -5.35523,8.828413 -0.026,0.0482 -0.0526,0.0943 -0.0786,0.14263 -4.28381,2.04782 -5.70197,4.54381 -7.73183,7.89409 -0.15756,6.64457 6.9544,12.37105 17.18035,18.87895 -3.51325,-6.5113 -9.00735,-9.81207 -10.0614,-17.88832 1.54367,-2.90538 4.16877,-3.90901 6.42286,-5.21622 24.61995,14.36815 50.615808,14.53471 76.550928,-0.55035 2.26015,1.31503 4.90084,2.31509 6.45076,5.23224 -1.05405,8.07624 -6.54866,11.3765 -10.06191,17.8878 10.22594,-6.5079 17.33842,-12.23387 17.18086,-18.87844 -1.97354,-3.25733 -3.37677,-5.706 -7.38973,-7.72149 5.01291,-9.218263 4.53571,-9.305023 -5.98567,-8.177293 -0.0891,-0.1152 -0.17795,-0.23186 -0.26717,-0.34623 3.63467,-10.261532 3.40665,-10.529692 -6.39186,-7.87136 2.47993,-10.705895 2.14854,-10.749554 -7.77938,-6.803718 0.74781,-11.285018 0.47993,-11.261581 -8.88835,-5.642548 -2.49815,-10.818768 -2.79293,-10.786576 -9.94048,-2.924887 -2.68846,-4.933638 -4.10296,-7.403383 -5.43173,-7.419184 z"
|
||||
style="display:inline;fill:#ff6600;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<g
|
||||
id="g5758"
|
||||
transform="translate(-2.3193819,-7.5517449)"
|
||||
style="display:inline">
|
||||
<path
|
||||
style="display:inline;fill:#d45500;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 98.808992,121.55238 c -0.682767,-0.0559 4.468828,10.17565 8.051908,0.17277 0.24133,-0.67372 -3.69223,2.90976 -8.051908,-0.17277 z"
|
||||
id="path5399" />
|
||||
<g
|
||||
id="g351">
|
||||
<path
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 93.212672,111.5632 c -5.131386,10.99206 5.618332,14.73472 4.412511,4.11951 -0.319289,-3.2881 -2.328089,-7.17448 -4.412511,-4.11951 z"
|
||||
id="path5415" />
|
||||
<path
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 95.394393,112.41429 c -1.183441,1.51896 -0.08172,3.83605 -0.09872,3.98526 1.674403,1.64132 1.61267,-4.77034 0.09872,-3.98526 z"
|
||||
id="path5417" />
|
||||
</g>
|
||||
<g
|
||||
id="g355">
|
||||
<path
|
||||
id="path5433"
|
||||
d="m 109.6169,111.5632 c -5.13141,10.99206 5.61836,14.73472 4.41254,4.11951 -0.31929,-3.2881 -2.3281,-7.17448 -4.41254,-4.11951 z"
|
||||
style="fill:#000000;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
id="path5435"
|
||||
d="m 111.79864,112.41429 c -1.18345,1.51896 -0.0817,3.83605 -0.0987,3.98526 1.67441,1.64132 1.61267,-4.77034 0.0987,-3.98526 z"
|
||||
style="display:inline;fill:#ffffff;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
id="path5389"
|
||||
d="m 75.334492,106.8255 c -0.51041,0.004 -0.85068,0.0544 -0.79478,0.0889 0,0 -9.13406,11.93611 0.31006,18.65881 a 9.7471106,8.2770874 37.793943 0 0 1.43712,9.42372 9.7471106,8.2770874 37.793943 0 0 10.56473,3.9672 l -3.56412,-8.60569 9.19685,0.73536 a 9.7471106,8.2770874 37.793943 0 0 -7.02645,-8.91057 9.7471106,8.2770874 37.793943 0 0 -7.00784,0.009 c -1.86231,-1.36401 -4.6287,-4.92596 -0.0408,-12.47521 1.51807,-2.49795 -1.54349,-2.90314 -3.07475,-2.89129 z"
|
||||
style="display:inline;fill:#ff6600;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<g
|
||||
transform="translate(-12.063571,-65.570169)"
|
||||
id="g5751"
|
||||
style="display:inline">
|
||||
<path
|
||||
style="display:inline;opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 142.55119,137.92594 27.3632,-15.27364 21.39613,38.33184 -27.36321,15.27364 z"
|
||||
id="path5730" />
|
||||
<path
|
||||
id="path5734"
|
||||
d="m 142.55119,137.92594 27.3632,-15.27364 21.39613,38.33184 -27.36321,15.27364 -6.27068,-11.23547 c 3.50932,-3.1137 4.19635,-7.01138 3.17635,-11.38324 l -7.39141,3.83317 z"
|
||||
style="display:inline;opacity:1;fill:#2a3455;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<g
|
||||
id="g1027"
|
||||
transform="matrix(0.86024749,-0.10202883,0.10202883,0.86024749,30.096406,71.933538)"
|
||||
style="display:inline">
|
||||
<path
|
||||
id="path4529-1"
|
||||
d="m 142.60294,99.070411 c -0.25799,0.104739 -0.3086,0.672471 -0.384,1.773409 -2.02218,-0.940695 -2.10067,-0.929408 -1.71256,1.33048 -0.0183,0.0187 -0.0366,0.0375 -0.0549,0.0564 -2.18101,-0.31296 -2.27447,-0.28333 -1.28505,1.70286 -0.0291,0.0491 -0.0581,0.0987 -0.0866,0.1487 -2.08254,0.0423 -2.14104,0.11931 -0.86643,1.88938 -0.0116,0.0318 -0.0232,0.0635 -0.0346,0.0955 -2.02632,0.27237 -2.04621,0.36762 -0.56133,2.00288 -0.0116,0.054 -0.0226,0.10863 -0.0338,0.16313 -2.1433,0.64191 -2.16862,0.69967 -0.32345,2.17298 -0.001,0.0115 -0.002,0.0228 -0.004,0.0345 -0.67172,0.75455 -0.74436,1.361 -0.86664,2.18542 0.51637,1.31647 2.38318,1.85412 4.92525,2.2886 -1.22549,-0.98801 -2.57514,-1.18304 -3.44709,-2.68058 0.0635,-0.6971 0.49586,-1.1102 0.83039,-1.55228 6.0132,0.79095 11.12666,-1.31742 14.97206,-6.41277 0.55169,0.0718 1.1521,0.0505 1.69641,0.49515 0.45839,1.67116 -0.34771,2.77114 -0.50064,4.33785 1.47008,-2.11891 2.39377,-3.82799 1.81562,-5.11852 -0.65544,-0.47646 -1.13239,-0.84126 -2.08564,-0.90614 0.2242,-2.22125 0.12343,-2.19897 -1.84772,-1.11119 -0.027,-0.0153 -0.054,-0.0308 -0.081,-0.0459 -0.13212,-2.312418 -0.19894,-2.346242 -1.90222,-1.01773 -0.39525,-2.304482 -0.46385,-2.285755 -2.08647,-0.69401 -0.78276,-2.275429 -0.83337,-2.248771 -2.2084,-0.374874 -1.38113,-1.916624 -1.4363,-1.886031 -2.19098,0.244914 -0.93375,-0.746434 -1.41465,-1.114437 -1.67661,-1.008099 z"
|
||||
style="fill:#2a3455;fill-opacity:1;stroke:#cccccc;stroke-width:0.212762;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
id="path5389-8"
|
||||
d="m 140.97831,108.89338 c -0.0997,0.0432 -0.1624,0.0807 -0.1486,0.0829 0,0 -0.80881,3.09385 1.59758,3.63486 a 2.0738233,1.7610569 15.019669 0 0 1.05807,1.73034 2.0738233,1.7610569 15.019669 0 0 2.39928,-0.0919 l -1.40796,-1.39467 1.86476,-0.61321 a 2.0738233,1.7610569 15.019669 0 0 -2.1123,-1.16933 2.0738233,1.7610569 15.019669 0 0 -1.37407,0.57883 c -0.47768,-0.11421 -1.31374,-0.58513 -1.03548,-2.44396 0.0921,-0.61507 -0.54189,-0.4424 -0.84131,-0.31396 z"
|
||||
style="fill:#2a3455;fill-opacity:1;stroke:#cccccc;stroke-width:0.212762;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
id="path5732-7"
|
||||
d="m 151.16542,99.348723 c -0.31065,0.459014 -0.45239,1.035767 -0.39183,1.594317 0.0815,0.73897 0.505,1.34373 1.10549,1.57849 0.10244,2.21135 -1.43246,2.11407 -1.46989,2.10013 -0.28634,-0.0774 -0.71677,1.13867 0.53519,0.98198 1.95562,-0.24473 2.05537,-2.12623 1.98064,-3.063 0.49633,-0.1651 0.92044,-0.56676 1.16438,-1.10276 0.36766,-0.81095 0.25745,-1.774612 -0.27281,-2.385521 l -1.28437,1.509221 -0.10531,-0.25395 z"
|
||||
style="fill:#2a3455;fill-opacity:1;stroke:#cccccc;stroke-width:0.212762;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:#b1b3b8;fill-opacity:1;stroke:#b1b3b8;stroke-width:0.165543;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 157.03788,77.939189 c -0.10179,0.05 1.49878,1.067004 1.15909,-0.658823 -0.0229,-0.116239 -0.27783,0.726935 -1.15909,0.658823 z"
|
||||
id="path5399-5"
|
||||
transform="matrix(1.1463308,0.13595947,-0.13595947,1.1463308,-22.801274,-2.4500009)" />
|
||||
<g
|
||||
id="g364"
|
||||
transform="matrix(1.1463308,0.13595947,-0.13595947,1.1463308,-22.801274,-2.4500009)">
|
||||
<path
|
||||
style="fill:#b1b3b8;fill-opacity:1;stroke:#b1b3b8;stroke-width:0.0438px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 155.39466,76.994381 c 0.20359,1.997829 2.04911,1.617431 0.97679,0.211015 -0.32445,-0.440244 -0.93981,-0.822131 -0.97679,-0.211015 z"
|
||||
id="path5415-5" />
|
||||
<path
|
||||
style="fill:#ffffff;stroke:#ffffff;stroke-width:0.0438px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 155.77699,76.930181 c -0.0393,0.316333 0.31396,0.552158 0.32421,0.574809 0.37728,0.09117 -0.17566,-0.814887 -0.32421,-0.574809 z"
|
||||
id="path5417-5" />
|
||||
</g>
|
||||
<g
|
||||
id="g374"
|
||||
transform="matrix(1.1463308,0.13595947,-0.13595947,1.1463308,-22.801274,-2.4500009)">
|
||||
<path
|
||||
id="path5433-8"
|
||||
d="m 157.72622,75.602125 c 0.20358,1.997831 2.04911,1.617429 0.97679,0.211012 -0.32445,-0.440244 -0.93981,-0.82213 -0.97679,-0.211012 z"
|
||||
style="fill:#b1b3b8;fill-opacity:1;stroke:#b1b3b8;stroke-width:0.0438px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
id="path5435-2"
|
||||
d="m 158.10855,75.537924 c -0.0393,0.316333 0.31396,0.552158 0.32421,0.574808 0.37728,0.09117 -0.17566,-0.814886 -0.32421,-0.574808 z"
|
||||
style="fill:#ffffff;stroke:#ffffff;stroke-width:0.0438px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:1.71585px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0428963"
|
||||
x="94.641426"
|
||||
y="157.04494"
|
||||
id="text167"
|
||||
transform="rotate(-28.988077,144.6719,16.286147)"><tspan
|
||||
id="tspan165"
|
||||
x="94.641426"
|
||||
y="157.04494"
|
||||
style="fill:#cccccc;stroke-width:0.0428963">PASSPORT</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:2.03519px;line-height:1.25;font-family:sans-serif;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.0508798"
|
||||
x="92.063805"
|
||||
y="154.54707"
|
||||
id="text163"
|
||||
transform="rotate(-29.037466,144.42409,16.321288)"><tspan
|
||||
id="tspan161"
|
||||
x="92.063805"
|
||||
y="154.54707"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'.PingFang SC';-inkscape-font-specification:'.PingFang SC';fill:#cccccc;stroke-width:0.0508798">AUTHSTRALIA</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-style:normal;font-weight:normal;font-size:2.70471px;line-height:1.25;font-family:sans-serif;fill:#cccccc;fill-opacity:1;stroke:none;stroke-width:0.0676183"
|
||||
x="93.162766"
|
||||
y="128.62389"
|
||||
id="text1127"
|
||||
transform="rotate(-29.176231,143.73222,16.419399)"><tspan
|
||||
id="tspan1125"
|
||||
x="93.162766"
|
||||
y="128.62389"
|
||||
style="fill:#cccccc;stroke-width:0.0676183">KANIDM</tspan></text>
|
||||
</g>
|
||||
<path
|
||||
d="m 145.61485,98.730679 c 3.50932,-3.1137 4.19635,-7.01138 3.17635,-11.38324 l -7.3914,3.83317 z"
|
||||
style="display:inline;fill:#2a3455;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path523" />
|
||||
<path
|
||||
id="path5732"
|
||||
d="m 136.84733,83.996879 c -2.18137,1.42401 -3.84498,3.66555 -4.59874,6.19631 -0.99138,3.35068 -0.25622,6.742 1.91889,8.85192 -3.57942,9.769591 -10.05414,6.555411 -10.19096,6.426891 -1.10017,-0.85629 -5.17794,3.63047 0.53268,5.22929 8.92019,2.49747 12.77572,-5.47478 14.1562,-9.67038 2.45132,0.18756 5.02004,-0.78148 7.05239,-2.660471 3.06875,-2.84546 4.34444,-7.22212 3.15795,-10.83433 l -8.31186,4.20365 0.005,-1.29218 z"
|
||||
style="display:inline;fill:#ff6600;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
</g>
|
||||
</svg>
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 0 B |
|
@ -233,7 +233,7 @@ function addBorrowedObject(obj) {
|
|||
}
|
||||
function __wbg_adapter_48(arg0, arg1, arg2) {
|
||||
try {
|
||||
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hef8a7abf8d4fa4dc(arg0, arg1, addBorrowedObject(arg2));
|
||||
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hd2dc42f7ea9500e6(arg0, arg1, addBorrowedObject(arg2));
|
||||
} finally {
|
||||
heap[stack_pointer++] = undefined;
|
||||
}
|
||||
|
@ -245,7 +245,7 @@ function __wbg_adapter_51(arg0, arg1, arg2) {
|
|||
|
||||
function __wbg_adapter_54(arg0, arg1, arg2) {
|
||||
try {
|
||||
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hc899b3af6aa31a80(arg0, arg1, addBorrowedObject(arg2));
|
||||
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hf526198f1b682d58(arg0, arg1, addBorrowedObject(arg2));
|
||||
} finally {
|
||||
heap[stack_pointer++] = undefined;
|
||||
}
|
||||
|
@ -484,7 +484,7 @@ function getImports() {
|
|||
wasm.__wbindgen_free(arg0, arg1 * 4);
|
||||
console.warn(...v0);
|
||||
};
|
||||
imports.wbg.__wbg_instanceof_Window_acc97ff9f5d2c7b4 = function(arg0) {
|
||||
imports.wbg.__wbg_instanceof_Window_e266f02eee43b570 = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof Window;
|
||||
|
@ -494,443 +494,59 @@ function getImports() {
|
|||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_document_3ead31dbcad65886 = function(arg0) {
|
||||
imports.wbg.__wbg_document_950215a728589a2d = function(arg0) {
|
||||
const ret = getObject(arg0).document;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_location_8cc8ccf27e342c0a = function(arg0) {
|
||||
imports.wbg.__wbg_location_797a1856892cc2de = function(arg0) {
|
||||
const ret = getObject(arg0).location;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_history_2a104346a1208269 = function() { return handleError(function (arg0) {
|
||||
imports.wbg.__wbg_history_6ee959556f01f7ea = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).history;
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_navigator_d1dcf282b97e2495 = function(arg0) {
|
||||
imports.wbg.__wbg_navigator_b18e629f7f0b75fa = function(arg0) {
|
||||
const ret = getObject(arg0).navigator;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_localStorage_753b6d15a844c3dc = function() { return handleError(function (arg0) {
|
||||
imports.wbg.__wbg_localStorage_42608208af988a02 = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).localStorage;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_sessionStorage_4ab60c7f3cb9633b = function() { return handleError(function (arg0) {
|
||||
imports.wbg.__wbg_sessionStorage_71f0ec1cb0950b17 = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).sessionStorage;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_fetch_0fe04905cccfc2aa = function(arg0, arg1) {
|
||||
imports.wbg.__wbg_fetch_465e8cb61a0f43ea = function(arg0, arg1) {
|
||||
const ret = getObject(arg0).fetch(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_body_3cb4b4042b9a632b = function(arg0) {
|
||||
imports.wbg.__wbg_body_be46234bb33edd63 = function(arg0) {
|
||||
const ret = getObject(arg0).body;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_createElement_976dbb84fe1661b5 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_createElement_e2a0e21263eb5416 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
const ret = getObject(arg0).createElement(getStringFromWasm0(arg1, arg2));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_createElementNS_1561aca8ee3693c0 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
imports.wbg.__wbg_createElementNS_0047de728927ea00 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
const ret = getObject(arg0).createElementNS(arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_createTextNode_300f845fab76642f = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_createTextNode_866e33a51b47f04c = function(arg0, arg1, arg2) {
|
||||
const ret = getObject(arg0).createTextNode(getStringFromWasm0(arg1, arg2));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_getElementById_3a708b83e4f034d7 = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_getElementById_eb93a47327bb5585 = function(arg0, arg1, arg2) {
|
||||
const ret = getObject(arg0).getElementById(getStringFromWasm0(arg1, arg2));
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_querySelector_3628dc2c3319e7e0 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_querySelector_32b9d7ebb2df951d = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
const ret = getObject(arg0).querySelector(getStringFromWasm0(arg1, arg2));
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_href_bbb11e0e61ea410e = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg1).href;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_pathname_4441d4d8fc4aba51 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg1).pathname;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_search_4aac147f005678e5 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg1).search;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_hash_8565e7b1ae1f2be4 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg1).hash;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_replace_ab0ff56e84982ad2 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).replace(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_parentNode_e397bbbe28be7b28 = function(arg0) {
|
||||
const ret = getObject(arg0).parentNode;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_parentElement_0cffb3ceb0f107bd = function(arg0) {
|
||||
const ret = getObject(arg0).parentElement;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_lastChild_a2f5ed739809bb31 = function(arg0) {
|
||||
const ret = getObject(arg0).lastChild;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_nextSibling_62338ec2a05607b4 = function(arg0) {
|
||||
const ret = getObject(arg0).nextSibling;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_setnodeValue_4077cafeefd0725e = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).nodeValue = arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_textContent_77bd294928962f93 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).textContent;
|
||||
var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
var len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
};
|
||||
imports.wbg.__wbg_appendChild_e513ef0e5098dfdd = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg0).appendChild(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_insertBefore_9f2d2defb9471006 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
const ret = getObject(arg0).insertBefore(getObject(arg1), getObject(arg2));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_removeChild_6751e9ca5d9aaf00 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg0).removeChild(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_state_4896ba54c2e3301e = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).state;
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_pushState_38917fb88b4add30 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) {
|
||||
getObject(arg0).pushState(getObject(arg1), getStringFromWasm0(arg2, arg3), arg4 === 0 ? undefined : getStringFromWasm0(arg4, arg5));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_instanceof_Response_eaa426220848a39e = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof Response;
|
||||
} catch {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_status_c4ef3dd591e63435 = function(arg0) {
|
||||
const ret = getObject(arg0).status;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_headers_fd64ad685cf22e5d = function(arg0) {
|
||||
const ret = getObject(arg0).headers;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_json_eb16b12f372e850c = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).json();
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_text_1169d752cc697903 = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).text();
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_log_4b5638ad60bdc54a = function(arg0) {
|
||||
console.log(getObject(arg0));
|
||||
};
|
||||
imports.wbg.__wbg_instanceof_HtmlFormElement_1c489ff7e99e43d3 = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof HTMLFormElement;
|
||||
} catch {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_value_ccb32485ee1b3928 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).value;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
};
|
||||
imports.wbg.__wbg_setvalue_df64bc6794c098f2 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_instanceof_ShadowRoot_76b32ccdae10a710 = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof ShadowRoot;
|
||||
} catch {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_host_57eec05a2624bc1b = function(arg0) {
|
||||
const ret = getObject(arg0).host;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_getItem_845e475f85f593e4 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
|
||||
const ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3));
|
||||
var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
var len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_removeItem_9da69ede4eea3326 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).removeItem(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_setItem_9c469d634d0c321c = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_new_2d0053ee81e4dd2a = function() { return handleError(function () {
|
||||
const ret = new Headers();
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_get_31b57952dfc2c6cc = function() { return handleError(function (arg0, arg1, arg2, arg3) {
|
||||
const ret = getObject(arg1).get(getStringFromWasm0(arg2, arg3));
|
||||
var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
var len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_set_992c1d31586b2957 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).set(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_href_9b462d09b5f8b378 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).href;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
};
|
||||
imports.wbg.__wbg_pathname_78a642e573bf8169 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).pathname;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
};
|
||||
imports.wbg.__wbg_search_afb25c63fe262036 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).search;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
};
|
||||
imports.wbg.__wbg_setsearch_40007c2a91333011 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).search = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_hash_5ca9e2d439e2b3e1 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).hash;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
};
|
||||
imports.wbg.__wbg_sethash_d35570df091aa47e = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).hash = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_new_7d95b89914e4d377 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = new URL(getStringFromWasm0(arg0, arg1));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_newwithbase_41b4a8c94dd8c467 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
|
||||
const ret = new URL(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_new_ca4d3a3eca340210 = function() { return handleError(function () {
|
||||
const ret = new URLSearchParams();
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_add_89a4f3b0846cf0aa = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).add(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_remove_1a26eb5d822902ed = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).remove(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_instanceof_HtmlInputElement_970e4026de0fccff = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof HTMLInputElement;
|
||||
} catch {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_checked_f0b666100ef39e44 = function(arg0) {
|
||||
const ret = getObject(arg0).checked;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_setchecked_f1e1f3e62cdca8e7 = function(arg0, arg1) {
|
||||
getObject(arg0).checked = arg1 !== 0;
|
||||
};
|
||||
imports.wbg.__wbg_value_b2a620d34c663701 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).value;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
};
|
||||
imports.wbg.__wbg_setvalue_e5b519cca37d82a7 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_url_1c013f0875e97715 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).url;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
};
|
||||
imports.wbg.__wbg_headers_85824e993aa739bf = function(arg0) {
|
||||
const ret = getObject(arg0).headers;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_newwithstr_fdce36db91ec5f92 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = new Request(getStringFromWasm0(arg0, arg1));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_newwithstrandinit_05d7180788420c40 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
const ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_instanceof_Element_33bd126d58f2021b = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof Element;
|
||||
} catch {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_namespaceURI_e19c7be2c60e5b5c = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).namespaceURI;
|
||||
var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
var len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
};
|
||||
imports.wbg.__wbg_classList_8a97f5e2e1bc3fa9 = function(arg0) {
|
||||
const ret = getObject(arg0).classList;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_setinnerHTML_32081d8a164e6dc4 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).innerHTML = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_outerHTML_bf662bdff92e5910 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).outerHTML;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
};
|
||||
imports.wbg.__wbg_children_67776b4810f38b6a = function(arg0) {
|
||||
const ret = getObject(arg0).children;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_removeAttribute_beaed7727852af78 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).removeAttribute(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_setAttribute_d8436c14a59ab1af = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).setAttribute(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_instanceof_HtmlElement_eff00d16af7bd6e7 = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof HTMLElement;
|
||||
} catch {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_focus_adfe4cc61e2c09bc = function() { return handleError(function (arg0) {
|
||||
getObject(arg0).focus();
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_create_53c6ddb068a22172 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg0).create(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_get_da97585bbb5a63bb = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg0).get(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_href_90ff36b5040e3b76 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).href;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
};
|
||||
imports.wbg.__wbg_instanceof_Event_1009dd203d9055ee = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof Event;
|
||||
} catch {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_target_bf704b7db7ad1387 = function(arg0) {
|
||||
const ret = getObject(arg0).target;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_bubbles_03eed164b4feeaf1 = function(arg0) {
|
||||
const ret = getObject(arg0).bubbles;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_cancelBubble_8c0bdf21c08f1717 = function(arg0) {
|
||||
const ret = getObject(arg0).cancelBubble;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_composedPath_160ed014dc4d787f = function(arg0) {
|
||||
const ret = getObject(arg0).composedPath();
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_preventDefault_3209279b490de583 = function(arg0) {
|
||||
getObject(arg0).preventDefault();
|
||||
};
|
||||
imports.wbg.__wbg_newwithform_6b545e9ddaccc455 = function() { return handleError(function (arg0) {
|
||||
const ret = new FormData(getObject(arg0));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_get_f1d748260e3dfd1f = function(arg0, arg1, arg2) {
|
||||
const ret = getObject(arg0).get(getStringFromWasm0(arg1, arg2));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_credentials_eab5c0bffc3e9cc5 = function(arg0) {
|
||||
const ret = getObject(arg0).credentials;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_getClientExtensionResults_0381c2792f96b9fa = function(arg0) {
|
||||
const ret = getObject(arg0).getClientExtensionResults();
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_addEventListener_1fc744729ac6dc27 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), getObject(arg4));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_removeEventListener_b10f1a66647f3aa0 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_instanceof_WorkerGlobalScope_16bb97a4549a3f21 = function(arg0) {
|
||||
imports.wbg.__wbg_instanceof_WorkerGlobalScope_88015ad1ebb92b29 = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof WorkerGlobalScope;
|
||||
|
@ -940,10 +556,394 @@ function getImports() {
|
|||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_fetch_749a56934f95c96c = function(arg0, arg1) {
|
||||
imports.wbg.__wbg_fetch_661ffba2a4f2519c = function(arg0, arg1) {
|
||||
const ret = getObject(arg0).fetch(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_state_4fd10484b354a97d = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).state;
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_pushState_429f091d389407b4 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4, arg5) {
|
||||
getObject(arg0).pushState(getObject(arg1), getStringFromWasm0(arg2, arg3), arg4 === 0 ? undefined : getStringFromWasm0(arg4, arg5));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_instanceof_Response_fb3a4df648c1859b = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof Response;
|
||||
} catch {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_status_d483a4ac847f380a = function(arg0) {
|
||||
const ret = getObject(arg0).status;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_headers_6093927dc359903e = function(arg0) {
|
||||
const ret = getObject(arg0).headers;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_json_b9414eb18cb751d0 = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).json();
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_text_f61464d781b099f0 = function() { return handleError(function (arg0) {
|
||||
const ret = getObject(arg0).text();
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_log_7bb108d119bafbc1 = function(arg0) {
|
||||
console.log(getObject(arg0));
|
||||
};
|
||||
imports.wbg.__wbg_instanceof_HtmlFormElement_04e7484e36bd99d6 = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof HTMLFormElement;
|
||||
} catch {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_value_00fb0fdc46959169 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).value;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
};
|
||||
imports.wbg.__wbg_setvalue_f92ff20dd33356a8 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_instanceof_ShadowRoot_7088dfa874f5499c = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof ShadowRoot;
|
||||
} catch {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_host_33f0224f975dc46a = function(arg0) {
|
||||
const ret = getObject(arg0).host;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_getItem_f0d43fc4e780b652 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
|
||||
const ret = getObject(arg1).getItem(getStringFromWasm0(arg2, arg3));
|
||||
var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
var len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_removeItem_793faa7edf21ad57 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).removeItem(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_setItem_f645824d6eface62 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_new_f1c3a9c2533a55b8 = function() { return handleError(function () {
|
||||
const ret = new Headers();
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_get_b883881571048aa2 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
|
||||
const ret = getObject(arg1).get(getStringFromWasm0(arg2, arg3));
|
||||
var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
var len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_set_a5d34c36a1a4ebd1 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).set(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_href_337141180d3d9dc0 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).href;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
};
|
||||
imports.wbg.__wbg_pathname_188be9b0ca3ddf22 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).pathname;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
};
|
||||
imports.wbg.__wbg_search_8b081e18a33be3ec = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).search;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
};
|
||||
imports.wbg.__wbg_setsearch_c5edb3dd1ea7f11f = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).search = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_hash_5f41a2c79884b4e0 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).hash;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
};
|
||||
imports.wbg.__wbg_sethash_d8da8491cb9e7af4 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).hash = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_new_2f2799a1c9c648e4 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = new URL(getStringFromWasm0(arg0, arg1));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_newwithbase_5541ad423d71a320 = function() { return handleError(function (arg0, arg1, arg2, arg3) {
|
||||
const ret = new URL(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_new_13cda049130ea17b = function() { return handleError(function () {
|
||||
const ret = new URLSearchParams();
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_add_73f794d491a0e44f = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).add(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_remove_f021903057d23f5e = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).remove(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_instanceof_HtmlInputElement_5c9d54338207f061 = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof HTMLInputElement;
|
||||
} catch {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_checked_44c09d0c819e33ad = function(arg0) {
|
||||
const ret = getObject(arg0).checked;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_setchecked_cbd6f423c4deba69 = function(arg0, arg1) {
|
||||
getObject(arg0).checked = arg1 !== 0;
|
||||
};
|
||||
imports.wbg.__wbg_value_1f2c9e357d18d3ea = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).value;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
};
|
||||
imports.wbg.__wbg_setvalue_a706abe70dab1b65 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_url_bd2775644ef804ec = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).url;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
};
|
||||
imports.wbg.__wbg_headers_ab5251d2727ac41e = function(arg0) {
|
||||
const ret = getObject(arg0).headers;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_newwithstr_533a2b691cd87b92 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = new Request(getStringFromWasm0(arg0, arg1));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_newwithstrandinit_c45f0dc6da26fd03 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
const ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_instanceof_Element_cb847a3fc7b1b1a4 = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof Element;
|
||||
} catch {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_namespaceURI_436d78f0f18e05c1 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).namespaceURI;
|
||||
var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
var len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
};
|
||||
imports.wbg.__wbg_classList_c4ebb3813d3a2f5d = function(arg0) {
|
||||
const ret = getObject(arg0).classList;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_setinnerHTML_76167cda24d9b96b = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).innerHTML = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_outerHTML_e29ac244117c6543 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).outerHTML;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
};
|
||||
imports.wbg.__wbg_children_93bcc921a4904ad4 = function(arg0) {
|
||||
const ret = getObject(arg0).children;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_removeAttribute_ad7a5bf2eed30373 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).removeAttribute(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_setAttribute_79c9562d32d05e66 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).setAttribute(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_instanceof_HtmlElement_9e442d53bb553421 = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof HTMLElement;
|
||||
} catch {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_focus_6497e1b44dabfb24 = function() { return handleError(function (arg0) {
|
||||
getObject(arg0).focus();
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_create_62091559dff76947 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg0).create(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_get_8a931180b8b2f81c = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg0).get(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_href_e7e4e286ccd6b390 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).href;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
};
|
||||
imports.wbg.__wbg_instanceof_Event_4637acc4ed1080b8 = function(arg0) {
|
||||
let result;
|
||||
try {
|
||||
result = getObject(arg0) instanceof Event;
|
||||
} catch {
|
||||
result = false;
|
||||
}
|
||||
const ret = result;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_target_b629c177f9bee3da = function(arg0) {
|
||||
const ret = getObject(arg0).target;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_bubbles_80a0700df9c59aee = function(arg0) {
|
||||
const ret = getObject(arg0).bubbles;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_cancelBubble_c9a8182589205d54 = function(arg0) {
|
||||
const ret = getObject(arg0).cancelBubble;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_composedPath_d4428cc409ddd3e6 = function(arg0) {
|
||||
const ret = getObject(arg0).composedPath();
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_preventDefault_16b2170b12f56317 = function(arg0) {
|
||||
getObject(arg0).preventDefault();
|
||||
};
|
||||
imports.wbg.__wbg_newwithform_3bddcbb6564115e4 = function() { return handleError(function (arg0) {
|
||||
const ret = new FormData(getObject(arg0));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_get_5f1a91f013de2311 = function(arg0, arg1, arg2) {
|
||||
const ret = getObject(arg0).get(getStringFromWasm0(arg1, arg2));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_credentials_09ff63679d98fa1a = function(arg0) {
|
||||
const ret = getObject(arg0).credentials;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_getClientExtensionResults_cfd034586dac1bf4 = function(arg0) {
|
||||
const ret = getObject(arg0).getClientExtensionResults();
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_addEventListener_cf5b03cd29763277 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), getObject(arg4));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_removeEventListener_b25f5db74f767386 = function() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_href_bb86bb94d1c6861b = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg1).href;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_pathname_7b2f7ba43a0fdd6e = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg1).pathname;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_search_23418f9752ba7ba6 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg1).search;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_hash_03f283be75af7a56 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg1).hash;
|
||||
const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
const len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_replace_eacc9fc818c999c1 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
getObject(arg0).replace(getStringFromWasm0(arg1, arg2));
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_parentNode_e81e6d5dc2fc35b0 = function(arg0) {
|
||||
const ret = getObject(arg0).parentNode;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_parentElement_0e8c9afce5cb9d6e = function(arg0) {
|
||||
const ret = getObject(arg0).parentElement;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_lastChild_e0fcecf63df5f824 = function(arg0) {
|
||||
const ret = getObject(arg0).lastChild;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_nextSibling_653f43ab9380175f = function(arg0) {
|
||||
const ret = getObject(arg0).nextSibling;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_setnodeValue_10d5890cd7e3f998 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).nodeValue = arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_textContent_dff59ad5e030bb86 = function(arg0, arg1) {
|
||||
const ret = getObject(arg1).textContent;
|
||||
var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
|
||||
var len0 = WASM_VECTOR_LEN;
|
||||
getInt32Memory0()[arg0 / 4 + 1] = len0;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = ptr0;
|
||||
};
|
||||
imports.wbg.__wbg_appendChild_b8199dc1655c852d = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg0).appendChild(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_insertBefore_77a7d032a91abf86 = function() { return handleError(function (arg0, arg1, arg2) {
|
||||
const ret = getObject(arg0).insertBefore(getObject(arg1), getObject(arg2));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_removeChild_794db72cbb6f21d3 = function() { return handleError(function (arg0, arg1) {
|
||||
const ret = getObject(arg0).removeChild(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
}, arguments) };
|
||||
imports.wbg.__wbg_get_27fe3dac1c4d0224 = function(arg0, arg1) {
|
||||
const ret = getObject(arg0)[arg1 >>> 0];
|
||||
return addHeapObject(ret);
|
||||
|
@ -1148,16 +1148,16 @@ function getImports() {
|
|||
const ret = wasm.memory;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_closure_wrapper4739 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 1096, __wbg_adapter_48);
|
||||
imports.wbg.__wbindgen_closure_wrapper4728 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 1095, __wbg_adapter_48);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_closure_wrapper5606 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 1436, __wbg_adapter_51);
|
||||
imports.wbg.__wbindgen_closure_wrapper5583 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 1426, __wbg_adapter_51);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_closure_wrapper5684 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 1466, __wbg_adapter_54);
|
||||
imports.wbg.__wbindgen_closure_wrapper5661 = function(arg0, arg1, arg2) {
|
||||
const ret = makeMutClosure(arg0, arg1, 1456, __wbg_adapter_54);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
|
||||
|
|
Binary file not shown.
|
@ -1 +0,0 @@
|
|||
../../../artwork/kani-waving.svg
|
0
kanidmd_web_ui/src/img/kani-waving.svg
Normal file
0
kanidmd_web_ui/src/img/kani-waving.svg
Normal file
|
@ -1 +0,0 @@
|
|||
../../../artwork/logo-square.svg
|
0
kanidmd_web_ui/src/img/logo-square.svg
Normal file
0
kanidmd_web_ui/src/img/logo-square.svg
Normal file
|
@ -1 +0,0 @@
|
|||
../README.md
|
0
pykanidm/docs/README.md
Normal file
0
pykanidm/docs/README.md
Normal file
Loading…
Reference in a new issue