mirror of
https://github.com/kanidm/kanidm.git
synced 2025-02-23 20:47:01 +01:00
Rough working login page (#417)
This commit is contained in:
parent
f97a3bf596
commit
8da89613e3
119
Cargo.lock
generated
119
Cargo.lock
generated
|
@ -175,19 +175,19 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "async-io"
|
||||
version = "1.3.1"
|
||||
version = "1.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9315f8f07556761c3e48fec2e6b276004acf426e6dc068b2c2251854d65ee0fd"
|
||||
checksum = "fcb9af4888a70ad78ecb5efcb0ba95d66a3cf54a88b62ae81559954c7588c7a2"
|
||||
dependencies = [
|
||||
"concurrent-queue",
|
||||
"fastrand",
|
||||
"futures-lite",
|
||||
"libc",
|
||||
"log",
|
||||
"nb-connect",
|
||||
"once_cell",
|
||||
"parking",
|
||||
"polling",
|
||||
"socket2",
|
||||
"vec-arena",
|
||||
"waker-fn",
|
||||
"winapi",
|
||||
|
@ -195,9 +195,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "async-lock"
|
||||
version = "2.3.0"
|
||||
version = "2.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1996609732bde4a9988bc42125f55f2af5f3c36370e27c778d5191a4a1b63bfb"
|
||||
checksum = "e6a8ea61bf9947a1007c5cada31e647dbc77b103c679858150003ba697ea798b"
|
||||
dependencies = [
|
||||
"event-listener",
|
||||
]
|
||||
|
@ -309,9 +309,9 @@ checksum = "e91831deabf0d6d7ec49552e489aed63b7456a7a3c46cff62adad428110b0af0"
|
|||
|
||||
[[package]]
|
||||
name = "async-trait"
|
||||
version = "0.1.48"
|
||||
version = "0.1.50"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "36ea56748e10732c49404c153638a15ec3d6211ec5ff35d9bb20e13b93576adf"
|
||||
checksum = "0b98e84bbb4cbcdd97da190ba0c58a1bb0de2c1fdf67d159e192ed766aeca722"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
@ -549,9 +549,9 @@ checksum = "7b02b629252fe8ef6460461409564e2c21d0c8e77e0944f3d189ff06c4e932ad"
|
|||
|
||||
[[package]]
|
||||
name = "cast"
|
||||
version = "0.2.3"
|
||||
version = "0.2.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4b9434b9a5aa1450faa3f9cb14ea0e8c53bb5d2b3c1bfd1ab4fc03e9f33fbfb0"
|
||||
checksum = "cc38c385bfd7e444464011bb24820f40dd1c76bcdfa1b78611cb7c2e5cafab75"
|
||||
dependencies = [
|
||||
"rustc_version",
|
||||
]
|
||||
|
@ -659,9 +659,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "const_fn"
|
||||
version = "0.4.6"
|
||||
version = "0.4.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "076a6803b0dacd6a88cfe64deba628b01533ff5ef265687e6938280c1afd0a28"
|
||||
checksum = "402da840495de3f976eaefc3485b7f5eb5b0bf9761f9a47be27fe975b3b8c2ec"
|
||||
|
||||
[[package]]
|
||||
name = "constant_time_eq"
|
||||
|
@ -1523,9 +1523,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "http-types"
|
||||
version = "2.10.0"
|
||||
version = "2.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "32613ebb139d1d430ef5783676f84abfa06fc5f2b4b5a25220cdeeff7e16ef5c"
|
||||
checksum = "686f600cccfb9d96c45550bac47b592bc88191a0dd965e9d55848880c2c5a45f"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-channel",
|
||||
|
@ -1545,15 +1545,15 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "httparse"
|
||||
version = "1.3.6"
|
||||
version = "1.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bc35c995b9d93ec174cf9a27d425c7892722101e14993cd227fdb51d70cf9589"
|
||||
checksum = "4a1ce40d6fc9764887c2fdc7305c3dcc429ba11ff981c1509416afd5697e4437"
|
||||
|
||||
[[package]]
|
||||
name = "httpdate"
|
||||
version = "0.3.2"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47"
|
||||
checksum = "05842d0d43232b23ccb7060ecb0f0626922c21f30012e97b767b30afd4a5d4b9"
|
||||
|
||||
[[package]]
|
||||
name = "humantime"
|
||||
|
@ -1563,9 +1563,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
|
|||
|
||||
[[package]]
|
||||
name = "hyper"
|
||||
version = "0.14.5"
|
||||
version = "0.14.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8bf09f61b52cfcf4c00de50df88ae423d6c02354e385a86341133b5338630ad1"
|
||||
checksum = "5f006b8784cfb01fe7aa9c46f5f5cd4cf5c85a8c612a0653ec97642979062665"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"futures-channel",
|
||||
|
@ -1617,9 +1617,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "idna"
|
||||
version = "0.2.2"
|
||||
version = "0.2.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "89829a5d69c23d348314a7ac337fe39173b61149a9864deabd260983aed48c21"
|
||||
checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
|
||||
dependencies = [
|
||||
"matches",
|
||||
"unicode-bidi",
|
||||
|
@ -1856,9 +1856,12 @@ name = "kanidmd_web_ui"
|
|||
version = "1.1.0-alpha.4"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"js-sys",
|
||||
"kanidm_proto",
|
||||
"wasm-bindgen",
|
||||
"wasm-bindgen-futures",
|
||||
"web-sys",
|
||||
"webauthn-rs",
|
||||
"yew",
|
||||
]
|
||||
|
||||
|
@ -1901,9 +1904,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "lexical-core"
|
||||
version = "0.7.5"
|
||||
version = "0.7.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "21f866863575d0e1d654fbeeabdc927292fdf862873dc3c96c6f753357e13374"
|
||||
checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe"
|
||||
dependencies = [
|
||||
"arrayvec",
|
||||
"bitflags",
|
||||
|
@ -1937,9 +1940,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "libsqlite3-sys"
|
||||
version = "0.22.0"
|
||||
version = "0.22.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2f6332d94daa84478d55a6aa9dbb3b305ed6500fb0cb9400cb9e1525d0e0e188"
|
||||
checksum = "19cb1effde5f834799ac5e5ef0e40d45027cd74f271b1de786ba8abb30e2164d"
|
||||
dependencies = [
|
||||
"pkg-config",
|
||||
"vcpkg",
|
||||
|
@ -2060,16 +2063,6 @@ dependencies = [
|
|||
"tempfile",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nb-connect"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a19900e7eee95eb2b3c2e26d12a874cc80aaf750e31be6fcbe743ead369fa45d"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"socket2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nom"
|
||||
version = "2.2.1"
|
||||
|
@ -2297,18 +2290,18 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
|
|||
|
||||
[[package]]
|
||||
name = "pin-project"
|
||||
version = "1.0.6"
|
||||
version = "1.0.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bc174859768806e91ae575187ada95c91a29e96a98dc5d2cd9a1fed039501ba6"
|
||||
checksum = "c7509cc106041c40a4518d2af7a61530e1eed0e6285296a3d8c5472806ccc4a4"
|
||||
dependencies = [
|
||||
"pin-project-internal",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pin-project-internal"
|
||||
version = "1.0.6"
|
||||
version = "1.0.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a490329918e856ed1b083f244e3bfe2d8c4f336407e4ea9e1a9f479ff09049e5"
|
||||
checksum = "48c950132583b500556b1efd71d45b319029f2b71518d979fcc208e16b42426f"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
@ -2611,9 +2604,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.2.5"
|
||||
version = "0.2.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "94341e4e44e24f6b591b59e47a8a027df12e008d73fd5672dbea9cc22f4507d9"
|
||||
checksum = "8270314b5ccceb518e7e578952f0b72b88222d02e8f77f5ecf7abbb673539041"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
]
|
||||
|
@ -2665,9 +2658,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "reqwest"
|
||||
version = "0.11.2"
|
||||
version = "0.11.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bf12057f289428dbf5c591c74bf10392e4a8003f993405a902f20117019022d4"
|
||||
checksum = "2296f2fac53979e8ccbc4a1136b25dcefd37be9ed7e4a1f6b05a6029c84ff124"
|
||||
dependencies = [
|
||||
"base64 0.13.0",
|
||||
"bytes",
|
||||
|
@ -2740,9 +2733,9 @@ checksum = "5d79b4b604167921892e84afbbaad9d5ad74e091bf6c511d9dbfb0593f09fabd"
|
|||
|
||||
[[package]]
|
||||
name = "rusqlite"
|
||||
version = "0.25.0"
|
||||
version = "0.25.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "48381bf52627e7b0e02c4c0e4c0c88fc1cf2228a2eb7461d9499b1372399f1da"
|
||||
checksum = "fbc783b7ddae608338003bac1fa00b6786a75a9675fbd8e87243ecfdea3f6ed2"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"fallible-iterator",
|
||||
|
@ -2764,9 +2757,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "rustls"
|
||||
version = "0.19.0"
|
||||
version = "0.19.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "064fd21ff87c6e87ed4506e68beb42459caa4a0e2eb144932e6776768556980b"
|
||||
checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7"
|
||||
dependencies = [
|
||||
"base64 0.13.0",
|
||||
"log",
|
||||
|
@ -3007,9 +3000,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "slab"
|
||||
version = "0.4.2"
|
||||
version = "0.4.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
|
||||
checksum = "f173ac3d1a7e3b28003f40de0b5ce7fe2710f9b9dc3fc38664cebee46b3b6527"
|
||||
|
||||
[[package]]
|
||||
name = "smallvec"
|
||||
|
@ -3171,9 +3164,9 @@ checksum = "45f6ee7c7b87caf59549e9fe45d6a69c75c8019e79e212a835c5da0e92f0ba08"
|
|||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "1.0.69"
|
||||
version = "1.0.70"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "48fe99c6bd8b1cc636890bcc071842de909d902c81ac7dab53ba33c421ab8ffb"
|
||||
checksum = "b9505f307c872bab8eb46f77ae357c8eba1fdacead58ee5a850116b1d7f82883"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
@ -3363,9 +3356,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
|
|||
|
||||
[[package]]
|
||||
name = "tokio"
|
||||
version = "1.4.0"
|
||||
version = "1.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "134af885d758d645f0f0505c9a8b3f9bf8a348fd822e112ab5248138348f1722"
|
||||
checksum = "83f0c8e7c0addab50b663055baf787d0af7f413a46e6e7fb9559a4e4db7137a5"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"bytes",
|
||||
|
@ -3416,9 +3409,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "tokio-util"
|
||||
version = "0.6.5"
|
||||
version = "0.6.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5143d049e85af7fbc36f5454d990e62c2df705b3589f123b71f441b6b59f443f"
|
||||
checksum = "940a12c99365c31ea8dd9ba04ec1be183ffe4920102bb7122c2f515437601e8e"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"futures-core",
|
||||
|
@ -3572,9 +3565,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "vcpkg"
|
||||
version = "0.2.11"
|
||||
version = "0.2.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b00bca6106a5e23f3eee943593759b7fcddb00554332e856d990c893966879fb"
|
||||
checksum = "cbdbff6266a24120518560b5dc983096efb98462e51d0d68169895b237be3e5d"
|
||||
|
||||
[[package]]
|
||||
name = "vec-arena"
|
||||
|
@ -3713,9 +3706,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "webauthn-authenticator-rs"
|
||||
version = "0.3.0-alpha.7"
|
||||
version = "0.3.0-alpha.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "03ef444688ad36c65b46b31b095982ed027f67cc4181582f67a0d78c6defa87b"
|
||||
checksum = "5fea4cabcc05835a309f938c4699a820a4f11c228d94d466e60fd95c7bf57d4e"
|
||||
dependencies = [
|
||||
"authenticator",
|
||||
"log",
|
||||
|
@ -3861,18 +3854,18 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "zeroize"
|
||||
version = "1.2.0"
|
||||
version = "1.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "81a974bcdd357f0dca4d41677db03436324d45a4c9ed2d0b873a5a360ce41c36"
|
||||
checksum = "4756f7db3f7b5574938c3eb1c117038b8e07f95ee6718c0efad4ac21508f1efd"
|
||||
dependencies = [
|
||||
"zeroize_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zeroize_derive"
|
||||
version = "1.0.1"
|
||||
version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c3f369ddb18862aba61aa49bf31e74d29f0f162dec753063200e1dc084345d16"
|
||||
checksum = "a2c1e130bebaeab2f23886bf9acbaca14b092408c452543c857f66399cd6dab1"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
|
|
@ -149,8 +149,10 @@ You will also need a config file in the volume named `server.toml` (Within the c
|
|||
# Defaults to "default"
|
||||
# log_level = "default"
|
||||
#
|
||||
# The origin for webauthn. This is the url to the server minus port information
|
||||
origin = "https://idm.example.com"
|
||||
# The origin for webauthn. This is the url to the server, with the port included if
|
||||
# it is non-standard (any port except 443)
|
||||
# origin = "https://idm.example.com"
|
||||
origin = "https://idm.example.com:8443"
|
||||
|
||||
Then you can setup the initial admin account and initialise the database into your volume.
|
||||
|
||||
|
|
|
@ -29,4 +29,4 @@ kanidm = { path = "../kanidmd" }
|
|||
futures = "0.3"
|
||||
async-std = "1.6"
|
||||
|
||||
webauthn-authenticator-rs = "0.3.0-alpha.7"
|
||||
webauthn-authenticator-rs = "0.3.0-alpha.8"
|
||||
|
|
|
@ -281,10 +281,7 @@ impl KanidmClientBuilder {
|
|||
let uri = Url::parse(&address).expect("can not fail");
|
||||
|
||||
#[allow(clippy::expect_used)]
|
||||
let origin = uri
|
||||
.host_str()
|
||||
.map(|h| format!("{}://{}", uri.scheme(), h))
|
||||
.expect("can not fail");
|
||||
let origin = uri.origin().unicode_serialization();
|
||||
|
||||
Ok(KanidmAsyncClient {
|
||||
client,
|
||||
|
|
|
@ -43,7 +43,8 @@ qrcode = { version = "0.12", default-features = false }
|
|||
|
||||
zxcvbn = "2.0"
|
||||
|
||||
webauthn-authenticator-rs = "^0.3.0-alpha.7"
|
||||
webauthn-authenticator-rs = "^0.3.0-alpha.8"
|
||||
# webauthn-authenticator-rs = { path = "../../webauthn-authenticator-rs/" }
|
||||
|
||||
[build-dependencies]
|
||||
structopt = { version = "0.3", default-features = false }
|
||||
|
|
|
@ -92,7 +92,7 @@ simd_support = [ "concread/simd_support" ]
|
|||
[dev-dependencies]
|
||||
criterion = { version = "0.3", features = ["html_reports"] }
|
||||
# For testing webauthn
|
||||
webauthn-authenticator-rs = "0.3.0-alpha.7"
|
||||
webauthn-authenticator-rs = "0.3.0-alpha.8"
|
||||
|
||||
[dev-dependencies.cargo-husky]
|
||||
version = "1"
|
||||
|
|
|
@ -6,4 +6,4 @@ tls_chain = "../insecure/chain.pem"
|
|||
tls_key = "../insecure/key.pem"
|
||||
# log_level = "fulltrace"
|
||||
log_level = "perffull"
|
||||
origin = "https://idm.example.com"
|
||||
origin = "https://idm.example.com:8443"
|
||||
|
|
|
@ -171,6 +171,7 @@ async fn index_view(_req: tide::Request<AppState>) -> tide::Result {
|
|||
<script src="/pkg/external/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"></script>
|
||||
<script src="/pkg/external/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1"></script>
|
||||
<script src="/pkg/external/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"></script>
|
||||
<script src="/pkg/external/confetti.js"></script>
|
||||
<script src="/pkg/bundle.js" defer></script>
|
||||
</head>
|
||||
|
||||
|
@ -1125,12 +1126,12 @@ pub async fn auth(mut req: tide::Request<AppState>) -> tide::Result {
|
|||
})
|
||||
.map_err(|_| OperationError::InvalidSessionState)
|
||||
}
|
||||
AuthState::Denied(_) => {
|
||||
AuthState::Denied(reason) => {
|
||||
debug!("🧩 -> AuthState::Denied");
|
||||
let msession = req.session_mut();
|
||||
// Remove the auth-session-id
|
||||
msession.remove("auth-session-id");
|
||||
Err(OperationError::AccessDenied)
|
||||
Ok(ProtoAuthState::Denied(reason))
|
||||
}
|
||||
}
|
||||
.map(|state| AuthResponse { state, sessionid })
|
||||
|
|
|
@ -218,6 +218,16 @@ impl Account {
|
|||
self.uuid == *UUID_ANONYMOUS
|
||||
}
|
||||
|
||||
pub(crate) fn gen_password_recover_mod(
|
||||
&self,
|
||||
cleartext: &str,
|
||||
crypto_policy: &CryptoPolicy,
|
||||
) -> Result<ModifyList<ModifyInvalid>, OperationError> {
|
||||
let ncred = Credential::new_password_only(crypto_policy, cleartext)?;
|
||||
let vcred = Value::new_credential("primary", ncred);
|
||||
Ok(ModifyList::new_purge_and_set("primary_credential", vcred))
|
||||
}
|
||||
|
||||
pub(crate) fn gen_password_mod(
|
||||
&self,
|
||||
cleartext: &str,
|
||||
|
|
|
@ -1077,10 +1077,30 @@ impl<'a> IdmServerProxyWriteTransaction<'a> {
|
|||
ladmin_error!(au, "name to uuid failed {:?}", e);
|
||||
e
|
||||
})?;
|
||||
// internal pce.
|
||||
let pce = PasswordChangeEvent::new_internal(&target, cleartext, None);
|
||||
// now set_account_password.
|
||||
self.set_account_password(au, &pce)
|
||||
|
||||
let account = self.target_to_account(au, &target)?;
|
||||
|
||||
let modlist = account
|
||||
.gen_password_recover_mod(cleartext, self.crypto_policy)
|
||||
.map_err(|e| {
|
||||
ladmin_error!(au, "Failed to generate password mod {:?}", e);
|
||||
e
|
||||
})?;
|
||||
ltrace!(au, "processing change {:?}", modlist);
|
||||
|
||||
self.qs_write
|
||||
.internal_modify(
|
||||
au,
|
||||
// Filter as executed
|
||||
&filter!(f_eq("uuid", PartialValue::new_uuidr(&target))),
|
||||
&modlist,
|
||||
)
|
||||
.map_err(|e| {
|
||||
lrequest_error!(au, "error -> {:?}", e);
|
||||
e
|
||||
})?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub fn generate_account_password(
|
||||
|
|
|
@ -18,3 +18,9 @@ wasm-bindgen-futures = { version = "0.4" }
|
|||
yew = "0.17"
|
||||
kanidm_proto = { path = "../kanidm_proto", version = "1.1.0-alpha" }
|
||||
anyhow = "1"
|
||||
|
||||
webauthn-rs = { version = "0.3.0-alpha.7", default-features = false, features = ["wasm"] }
|
||||
web-sys = { version = "0.3", features = ["PublicKeyCredentialUserEntity", "CredentialCreationOptions", "Navigator", "Window", "CredentialsContainer", "PublicKeyCredentialRpEntity", "PublicKeyCredentialCreationOptions", "PublicKeyCredential", "AuthenticatorResponse", "AuthenticationExtensionsClientOutputs", "CredentialRequestOptions"] }
|
||||
js-sys = "0.3"
|
||||
|
||||
|
||||
|
|
|
@ -2,3 +2,4 @@
|
|||
wasm-pack build --no-typescript --release --target web && \
|
||||
rollup ./src/main.js --format iife --file ./pkg/bundle.js && \
|
||||
rm ./pkg/.gitignore
|
||||
|
||||
|
|
|
@ -48,6 +48,26 @@
|
|||
return idx;
|
||||
}
|
||||
|
||||
function isLikeNone(x) {
|
||||
return x === undefined || x === null;
|
||||
}
|
||||
|
||||
let cachegetFloat64Memory0 = null;
|
||||
function getFloat64Memory0() {
|
||||
if (cachegetFloat64Memory0 === null || cachegetFloat64Memory0.buffer !== wasm.memory.buffer) {
|
||||
cachegetFloat64Memory0 = new Float64Array(wasm.memory.buffer);
|
||||
}
|
||||
return cachegetFloat64Memory0;
|
||||
}
|
||||
|
||||
let cachegetInt32Memory0 = null;
|
||||
function getInt32Memory0() {
|
||||
if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {
|
||||
cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);
|
||||
}
|
||||
return cachegetInt32Memory0;
|
||||
}
|
||||
|
||||
let WASM_VECTOR_LEN = 0;
|
||||
|
||||
let cachedTextEncoder = new TextEncoder('utf-8');
|
||||
|
@ -103,18 +123,6 @@
|
|||
return ptr;
|
||||
}
|
||||
|
||||
function isLikeNone(x) {
|
||||
return x === undefined || x === null;
|
||||
}
|
||||
|
||||
let cachegetInt32Memory0 = null;
|
||||
function getInt32Memory0() {
|
||||
if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {
|
||||
cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);
|
||||
}
|
||||
return cachegetInt32Memory0;
|
||||
}
|
||||
|
||||
function debugString(val) {
|
||||
// primitive types
|
||||
const type = typeof val;
|
||||
|
@ -212,18 +220,19 @@
|
|||
heap[--stack_pointer] = obj;
|
||||
return stack_pointer;
|
||||
}
|
||||
function __wbg_adapter_24(arg0, arg1, arg2) {
|
||||
function __wbg_adapter_28(arg0, arg1, arg2) {
|
||||
try {
|
||||
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h7ed9c14451e9c663(arg0, arg1, addBorrowedObject(arg2));
|
||||
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h932b7022027653c1(arg0, arg1, addBorrowedObject(arg2));
|
||||
} finally {
|
||||
heap[stack_pointer++] = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
function __wbg_adapter_27(arg0, arg1, arg2) {
|
||||
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1409b27d5a10e953(arg0, arg1, addHeapObject(arg2));
|
||||
function __wbg_adapter_31(arg0, arg1, arg2) {
|
||||
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hc5a7090637073a80(arg0, arg1, addHeapObject(arg2));
|
||||
}
|
||||
|
||||
function notDefined(what) { return () => { throw new Error(`${what} is not defined`); }; }
|
||||
/**
|
||||
*/
|
||||
function run_login_app() {
|
||||
|
@ -281,6 +290,7 @@
|
|||
imports.wbg.__wbindgen_object_drop_ref = function(arg0) {
|
||||
takeObject(arg0);
|
||||
};
|
||||
imports.wbg.__wbg_startConfetti_1e3412426d93bcf0 = typeof startConfetti == 'function' ? startConfetti : notDefined('startConfetti');
|
||||
imports.wbg.__wbindgen_cb_drop = function(arg0) {
|
||||
const obj = takeObject(arg0).original;
|
||||
if (obj.cnt-- == 1) {
|
||||
|
@ -298,6 +308,10 @@
|
|||
var ret = getObject(arg0) === undefined;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbindgen_json_parse = function(arg0, arg1) {
|
||||
var ret = JSON.parse(getStringFromWasm0(arg0, arg1));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
|
||||
var ret = getObject(arg0);
|
||||
return addHeapObject(ret);
|
||||
|
@ -328,171 +342,201 @@
|
|||
wasm.__wbindgen_free(arg0, arg1);
|
||||
}
|
||||
};
|
||||
imports.wbg.__wbg_instanceof_Window_5993230e7331f098 = function(arg0) {
|
||||
imports.wbg.__wbg_instanceof_Window_9c4fd26090e1d029 = function(arg0) {
|
||||
var ret = getObject(arg0) instanceof Window;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_document_85584f745133c6ad = function(arg0) {
|
||||
imports.wbg.__wbg_document_249e9cf340780f93 = function(arg0) {
|
||||
var ret = getObject(arg0).document;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_localStorage_17cc4197ac61d472 = handleError(function(arg0) {
|
||||
imports.wbg.__wbg_navigator_fdf3521d0e190a9b = function(arg0) {
|
||||
var ret = getObject(arg0).navigator;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_innerWidth_2bb09626230de7ba = handleError(function(arg0) {
|
||||
var ret = getObject(arg0).innerWidth;
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_innerHeight_e73b06bc6aaff2f6 = handleError(function(arg0) {
|
||||
var ret = getObject(arg0).innerHeight;
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_localStorage_884d77b5cedf820a = handleError(function(arg0) {
|
||||
var ret = getObject(arg0).localStorage;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_sessionStorage_eb79149ddca2015c = handleError(function(arg0) {
|
||||
imports.wbg.__wbg_sessionStorage_8a3472de40e5b08f = handleError(function(arg0) {
|
||||
var ret = getObject(arg0).sessionStorage;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_fetch_a830023d79222b35 = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_fetch_4889502a30fcf1be = function(arg0, arg1, arg2) {
|
||||
var ret = getObject(arg0).fetch(getObject(arg1), getObject(arg2));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_createElement_9291c0306f179f1e = handleError(function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_createElement_ba61aad8af6be7f4 = handleError(function(arg0, arg1, arg2) {
|
||||
var ret = getObject(arg0).createElement(getStringFromWasm0(arg1, arg2));
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_createElementNS_ecbbee6419005089 = handleError(function(arg0, arg1, arg2, arg3, arg4) {
|
||||
imports.wbg.__wbg_createElementNS_c951238dc260501e = handleError(function(arg0, arg1, arg2, arg3, arg4) {
|
||||
var ret = getObject(arg0).createElementNS(arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_createTextNode_cd0249d33c7e5c4a = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_createTextNode_278b625a43390ab0 = function(arg0, arg1, arg2) {
|
||||
var ret = getObject(arg0).createTextNode(getStringFromWasm0(arg1, arg2));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_querySelector_8ff6e717f918ac47 = handleError(function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_querySelector_db4d492deb40e771 = handleError(function(arg0, arg1, arg2) {
|
||||
var ret = getObject(arg0).querySelector(getStringFromWasm0(arg1, arg2));
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_status_42d679a063e3f40c = function(arg0) {
|
||||
imports.wbg.__wbg_status_5580a898717a7097 = function(arg0) {
|
||||
var ret = getObject(arg0).status;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_headers_92965033102a703d = function(arg0) {
|
||||
imports.wbg.__wbg_headers_f36154094992b8f5 = function(arg0) {
|
||||
var ret = getObject(arg0).headers;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_arrayBuffer_aeff0aaf9aec857d = handleError(function(arg0) {
|
||||
imports.wbg.__wbg_arrayBuffer_a98df6d58bb5ea26 = handleError(function(arg0) {
|
||||
var ret = getObject(arg0).arrayBuffer();
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_text_4b57f36d42790087 = handleError(function(arg0) {
|
||||
imports.wbg.__wbg_text_b2095448993eb3f0 = handleError(function(arg0) {
|
||||
var ret = getObject(arg0).text();
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_instanceof_HtmlTextAreaElement_85330633857ee50e = function(arg0) {
|
||||
imports.wbg.__wbg_instanceof_HtmlTextAreaElement_aefe0cf650ce9a0c = function(arg0) {
|
||||
var ret = getObject(arg0) instanceof HTMLTextAreaElement;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_value_4797b74b15a0bc19 = function(arg0, arg1) {
|
||||
imports.wbg.__wbg_value_ad57e46044f59979 = function(arg0, arg1) {
|
||||
var ret = getObject(arg1).value;
|
||||
var ptr0 = 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_setvalue_3ee783318a1b301d = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_setvalue_790f4e4951947e33 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_newwithstrandinit_814c15649f6924a8 = handleError(function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_newwithstrandinit_a58924208f457f33 = handleError(function(arg0, arg1, arg2) {
|
||||
var ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2));
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_instanceof_HtmlButtonElement_87846abf00da2deb = function(arg0) {
|
||||
imports.wbg.__wbg_get_e8e3b929210def3e = handleError(function(arg0, arg1) {
|
||||
var ret = getObject(arg0).get(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_instanceof_HtmlButtonElement_98ac0dc8a5eb6f4e = function(arg0) {
|
||||
var ret = getObject(arg0) instanceof HTMLButtonElement;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_settype_1772a824336d2b26 = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_settype_b8aa4d6f9b00c6f9 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).type = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_addEventListener_c11a938b8469ab06 = handleError(function(arg0, arg1, arg2, arg3, arg4) {
|
||||
imports.wbg.__wbg_signal_b959b4cb8b279328 = function(arg0) {
|
||||
var ret = getObject(arg0).signal;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_new_94647a205b427932 = handleError(function() {
|
||||
var ret = new AbortController();
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_abort_13132a8ca4c8ac09 = function(arg0) {
|
||||
getObject(arg0).abort();
|
||||
};
|
||||
imports.wbg.__wbg_addEventListener_502683a26945b1a5 = handleError(function(arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), getObject(arg4));
|
||||
});
|
||||
imports.wbg.__wbg_removeEventListener_992337883d25d832 = handleError(function(arg0, arg1, arg2, arg3, arg4) {
|
||||
imports.wbg.__wbg_removeEventListener_1f30d3e3ef4ee58e = handleError(function(arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0);
|
||||
});
|
||||
imports.wbg.__wbg_instanceof_HtmlInputElement_631f8bb677bb0897 = function(arg0) {
|
||||
imports.wbg.__wbg_instanceof_HtmlInputElement_6dfc5638bc87076f = function(arg0) {
|
||||
var ret = getObject(arg0) instanceof HTMLInputElement;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_setchecked_e9a4b8ce0e28b973 = function(arg0, arg1) {
|
||||
imports.wbg.__wbg_setchecked_0033386107edc6f2 = function(arg0, arg1) {
|
||||
getObject(arg0).checked = arg1 !== 0;
|
||||
};
|
||||
imports.wbg.__wbg_settype_dfbbea62b5fa060d = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_settype_6d9bbd4e5c5e8fc9 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).type = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_value_98044d455b0093f7 = function(arg0, arg1) {
|
||||
imports.wbg.__wbg_value_2577d9319a38ca2e = function(arg0, arg1) {
|
||||
var ret = getObject(arg1).value;
|
||||
var ptr0 = 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_setvalue_2924913056a0a03c = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_setvalue_7adbd4552719bd8e = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_signal_fbd119dce1c909d1 = function(arg0) {
|
||||
var ret = getObject(arg0).signal;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_new_049faf1b539ba534 = handleError(function() {
|
||||
var ret = new AbortController();
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_abort_fa1dfe1534bb7a3a = function(arg0) {
|
||||
getObject(arg0).abort();
|
||||
};
|
||||
imports.wbg.__wbg_namespaceURI_ba0083a6b53a9753 = function(arg0, arg1) {
|
||||
imports.wbg.__wbg_namespaceURI_09075ee9acb8b2d7 = function(arg0, arg1) {
|
||||
var 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_removeAttribute_ab52d40b0c7386a7 = handleError(function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_removeAttribute_3b4ea946697b7cea = handleError(function(arg0, arg1, arg2) {
|
||||
getObject(arg0).removeAttribute(getStringFromWasm0(arg1, arg2));
|
||||
});
|
||||
imports.wbg.__wbg_setAttribute_5349d84c3833cecd = handleError(function(arg0, arg1, arg2, arg3, arg4) {
|
||||
imports.wbg.__wbg_setAttribute_0b50656f1ccc45bf = handleError(function(arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).setAttribute(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
|
||||
});
|
||||
imports.wbg.__wbg_log_be5faf67a2e8b869 = function(arg0) {
|
||||
imports.wbg.__wbg_log_386a8115a84a780d = function(arg0) {
|
||||
console.log(getObject(arg0));
|
||||
};
|
||||
imports.wbg.__wbg_fetch_2740e801a1c8d511 = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_fetch_75f2bada7009e7f1 = function(arg0, arg1, arg2) {
|
||||
var ret = getObject(arg0).fetch(getObject(arg1), getObject(arg2));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_lastChild_d4077e79715ffef3 = function(arg0) {
|
||||
imports.wbg.__wbg_credentials_ba45779b49de67a8 = function(arg0) {
|
||||
var ret = getObject(arg0).credentials;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_lastChild_41f6d41cb58f88d3 = function(arg0) {
|
||||
var ret = getObject(arg0).lastChild;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_setnodeValue_83c9aa40c199e1ba = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_setnodeValue_eb7b7f2b1e879eec = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).nodeValue = arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_textContent_06c1d06e1d69ea68 = function(arg0, arg1) {
|
||||
imports.wbg.__wbg_textContent_62903c35b99b5ca3 = function(arg0, arg1) {
|
||||
var 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_57f30a01b30ec33c = handleError(function(arg0, arg1) {
|
||||
imports.wbg.__wbg_appendChild_6ae001e6d3556190 = handleError(function(arg0, arg1) {
|
||||
var ret = getObject(arg0).appendChild(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_insertBefore_30d17168293fa763 = handleError(function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_insertBefore_f2ee50372a21309c = handleError(function(arg0, arg1, arg2) {
|
||||
var ret = getObject(arg0).insertBefore(getObject(arg1), getObject(arg2));
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_removeChild_77c0b65b7396e214 = handleError(function(arg0, arg1) {
|
||||
imports.wbg.__wbg_removeChild_d76a38e31f7ffdcb = handleError(function(arg0, arg1) {
|
||||
var ret = getObject(arg0).removeChild(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_newwithstrsequencesequence_856c86f363c8a3d6 = handleError(function(arg0) {
|
||||
imports.wbg.__wbg_getItem_ccdedac90f432f9a = handleError(function(arg0, arg1, arg2, arg3) {
|
||||
var 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;
|
||||
});
|
||||
imports.wbg.__wbg_setItem_79aa1709a35f859c = handleError(function(arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
|
||||
});
|
||||
imports.wbg.__wbg_newwithstrsequencesequence_fb596b2afa3a5079 = handleError(function(arg0) {
|
||||
var ret = new Headers(getObject(arg0));
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_get_47bf656299aac357 = function(arg0, arg1) {
|
||||
imports.wbg.__wbg_get_f099d98ea7d68360 = function(arg0, arg1) {
|
||||
var ret = getObject(arg0)[arg1 >>> 0];
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
|
@ -505,113 +549,119 @@
|
|||
var ret = typeof(val) === 'object' && val !== null;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_next_f613b44647788059 = function(arg0) {
|
||||
imports.wbg.__wbg_next_af8c20b8c0d81345 = function(arg0) {
|
||||
var ret = getObject(arg0).next;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_next_cf4ec627a2e85bac = handleError(function(arg0) {
|
||||
imports.wbg.__wbg_next_9d10ccb28a5fd327 = handleError(function(arg0) {
|
||||
var ret = getObject(arg0).next();
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_done_4e046ac6e3b595e0 = function(arg0) {
|
||||
imports.wbg.__wbg_done_faa42c8d1dd8ca9e = function(arg0) {
|
||||
var ret = getObject(arg0).done;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_value_6fa14ba8ee7b7c3d = function(arg0) {
|
||||
imports.wbg.__wbg_value_9befa7ab4a7326bf = function(arg0) {
|
||||
var ret = getObject(arg0).value;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_iterator_7d4f7917ab7aeca0 = function() {
|
||||
imports.wbg.__wbg_iterator_de2adb40693c8c47 = function() {
|
||||
var ret = Symbol.iterator;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_get_4e90ba4e3de362de = handleError(function(arg0, arg1) {
|
||||
imports.wbg.__wbg_get_0c6963cbab34fbb6 = handleError(function(arg0, arg1) {
|
||||
var ret = Reflect.get(getObject(arg0), getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_call_e5847d15cc228e4f = handleError(function(arg0, arg1) {
|
||||
imports.wbg.__wbg_call_cb478d88f3068c91 = handleError(function(arg0, arg1) {
|
||||
var ret = getObject(arg0).call(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_new_7c995f2adeba6fb5 = function() {
|
||||
imports.wbg.__wbg_new_8528c110a833413f = function() {
|
||||
var ret = new Array();
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_from_badf9c2620e47d5a = function(arg0) {
|
||||
imports.wbg.__wbg_from_c9968c40e2da92d7 = function(arg0) {
|
||||
var ret = Array.from(getObject(arg0));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_push_3f7c76b58919ce0d = function(arg0, arg1) {
|
||||
imports.wbg.__wbg_push_17a514d8ab666103 = function(arg0, arg1) {
|
||||
var ret = getObject(arg0).push(getObject(arg1));
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_toString_ebb2190bcbb2fdfe = function(arg0) {
|
||||
imports.wbg.__wbg_toString_24c414b45ffa40fa = function(arg0) {
|
||||
var ret = getObject(arg0).toString();
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_newnoargs_2349ba6aefe72376 = function(arg0, arg1) {
|
||||
imports.wbg.__wbg_newnoargs_3efc7bfa69a681f9 = function(arg0, arg1) {
|
||||
var ret = new Function(getStringFromWasm0(arg0, arg1));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_is_ff18d90ee51cb4a6 = function(arg0, arg1) {
|
||||
imports.wbg.__wbg_is_573b30cf06a763fb = function(arg0, arg1) {
|
||||
var ret = Object.is(getObject(arg0), getObject(arg1));
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_new_59986c8731bebaa1 = function() {
|
||||
imports.wbg.__wbg_new_d14bf16e62c6b3d5 = function() {
|
||||
var ret = new Object();
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_resolve_e0690143406c88cb = function(arg0) {
|
||||
imports.wbg.__wbg_resolve_778af3f90b8e2b59 = function(arg0) {
|
||||
var ret = Promise.resolve(getObject(arg0));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_then_9caf23122e4fd5d3 = function(arg0, arg1) {
|
||||
imports.wbg.__wbg_then_367b3e718069cfb9 = function(arg0, arg1) {
|
||||
var ret = getObject(arg0).then(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_then_16663faf60ffbe95 = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_then_ac66ca61394bfd21 = function(arg0, arg1, arg2) {
|
||||
var ret = getObject(arg0).then(getObject(arg1), getObject(arg2));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_self_35a0fda3eb965abe = handleError(function() {
|
||||
imports.wbg.__wbg_self_05c54dcacb623b9a = handleError(function() {
|
||||
var ret = self.self;
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_window_88a6f88dd3a474f1 = handleError(function() {
|
||||
imports.wbg.__wbg_window_9777ce446d12989f = handleError(function() {
|
||||
var ret = window.window;
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_globalThis_1d843c4ad7b6a1f5 = handleError(function() {
|
||||
imports.wbg.__wbg_globalThis_f0ca0bbb0149cf3d = handleError(function() {
|
||||
var ret = globalThis.globalThis;
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_global_294ce70448e8fbbf = handleError(function() {
|
||||
imports.wbg.__wbg_global_c3c8325ae8c7f1a9 = handleError(function() {
|
||||
var ret = global.global;
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_buffer_0be9fb426f2dd82b = function(arg0) {
|
||||
imports.wbg.__wbg_buffer_ebc6c8e75510eae3 = function(arg0) {
|
||||
var ret = getObject(arg0).buffer;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_newwithbyteoffsetandlength_85b7ce82b001ea08 = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_newwithbyteoffsetandlength_ca3d3d8811ecb569 = function(arg0, arg1, arg2) {
|
||||
var ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_length_3a5138f465b971ad = function(arg0) {
|
||||
imports.wbg.__wbg_length_317f0dd77f7a6673 = function(arg0) {
|
||||
var ret = getObject(arg0).length;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_new_4e8d18dbf9cd5240 = function(arg0) {
|
||||
imports.wbg.__wbg_new_135e963dedf67b22 = function(arg0) {
|
||||
var ret = new Uint8Array(getObject(arg0));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_set_4769de301eb521d7 = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_set_4a5072a31008e0cb = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).set(getObject(arg1), arg2 >>> 0);
|
||||
};
|
||||
imports.wbg.__wbg_set_7e15d36563072b19 = handleError(function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_set_61642586f7156f4a = handleError(function(arg0, arg1, arg2) {
|
||||
var ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2));
|
||||
return ret;
|
||||
});
|
||||
imports.wbg.__wbindgen_number_get = function(arg0, arg1) {
|
||||
const obj = getObject(arg1);
|
||||
var ret = typeof(obj) === 'number' ? obj : undefined;
|
||||
getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_string_get = function(arg0, arg1) {
|
||||
const obj = getObject(arg1);
|
||||
var ret = typeof(obj) === 'string' ? obj : undefined;
|
||||
|
@ -634,12 +684,12 @@
|
|||
var ret = wasm.memory;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_closure_wrapper487 = function(arg0, arg1, arg2) {
|
||||
var ret = makeMutClosure(arg0, arg1, 173, __wbg_adapter_24);
|
||||
imports.wbg.__wbindgen_closure_wrapper605 = function(arg0, arg1, arg2) {
|
||||
var ret = makeMutClosure(arg0, arg1, 237, __wbg_adapter_28);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_closure_wrapper560 = function(arg0, arg1, arg2) {
|
||||
var ret = makeMutClosure(arg0, arg1, 202, __wbg_adapter_27);
|
||||
imports.wbg.__wbindgen_closure_wrapper1492 = function(arg0, arg1, arg2) {
|
||||
var ret = makeMutClosure(arg0, arg1, 330, __wbg_adapter_31);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
|
||||
|
|
16
kanidmd_web_ui/pkg/external/confetti.js
vendored
Normal file
16
kanidmd_web_ui/pkg/external/confetti.js
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
var maxParticleCount=150;var particleSpeed=2;var startConfetti;var stopConfetti;var toggleConfetti;var removeConfetti;(function(){startConfetti=startConfettiInner;stopConfetti=stopConfettiInner;toggleConfetti=toggleConfettiInner;removeConfetti=removeConfettiInner;var colors=["DodgerBlue","OliveDrab","Gold","Pink","SlateBlue","LightBlue","Violet","PaleGreen","SteelBlue","SandyBrown","Chocolate","Crimson"]
|
||||
var streamingConfetti=false;var animationTimer=null;var particles=[];var waveAngle=0;function resetParticle(particle,width,height){particle.color=colors[(Math.random()*colors.length)|0];particle.x=Math.random()*width;particle.y=Math.random()*height-height;particle.diameter=Math.random()*10+5;particle.tilt=Math.random()*10-10;particle.tiltAngleIncrement=Math.random()*0.07+0.05;particle.tiltAngle=0;return particle;}
|
||||
function startConfettiInner(){var width=window.innerWidth;var height=window.innerHeight;window.requestAnimFrame=(function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(callback){return window.setTimeout(callback,16.6666667);};})();var canvas=document.getElementById("confetti-canvas");if(canvas===null){canvas=document.createElement("canvas");canvas.setAttribute("id","confetti-canvas");canvas.setAttribute("style","display:block;z-index:999999;pointer-events:none");document.body.appendChild(canvas);canvas.width=width;canvas.height=height;window.addEventListener("resize",function(){canvas.width=window.innerWidth;canvas.height=window.innerHeight;},true);}
|
||||
var context=canvas.getContext("2d");while(particles.length<maxParticleCount)
|
||||
particles.push(resetParticle({},width,height));streamingConfetti=true;if(animationTimer===null){(function runAnimation(){context.clearRect(0,0,window.innerWidth,window.innerHeight);if(particles.length===0)
|
||||
animationTimer=null;else{updateParticles();drawParticles(context);animationTimer=requestAnimFrame(runAnimation);}})();}}
|
||||
function stopConfettiInner(){streamingConfetti=false;}
|
||||
function removeConfettiInner(){stopConfetti();particles=[];}
|
||||
function toggleConfettiInner(){if(streamingConfetti)
|
||||
stopConfettiInner();else
|
||||
startConfettiInner();}
|
||||
function drawParticles(context){var particle;var x;for(var i=0;i<particles.length;i++){particle=particles[i];context.beginPath();context.lineWidth=particle.diameter;context.strokeStyle=particle.color;x=particle.x+particle.tilt;context.moveTo(x+particle.diameter/2,particle.y);context.lineTo(x,particle.y+particle.tilt+particle.diameter/2);context.stroke();}}
|
||||
function updateParticles(){var width=window.innerWidth;var height=window.innerHeight;var particle;waveAngle+=0.01;for(var i=0;i<particles.length;i++){particle=particles[i];if(!streamingConfetti&&particle.y<-15)
|
||||
particle.y=height+100;else{particle.tiltAngle+=particle.tiltAngleIncrement;particle.x+=Math.sin(waveAngle);particle.y+=(Math.cos(waveAngle)+particle.diameter+particleSpeed)*0.5;particle.tilt=Math.sin(particle.tiltAngle)*15;}
|
||||
if(particle.x>width+20||particle.x<-20||particle.y>height){if(streamingConfetti&&particles.length<=maxParticleCount)
|
||||
resetParticle(particle,width,height);else{particles.splice(i,1);i--;}}}}})();
|
|
@ -46,6 +46,26 @@ function addHeapObject(obj) {
|
|||
return idx;
|
||||
}
|
||||
|
||||
function isLikeNone(x) {
|
||||
return x === undefined || x === null;
|
||||
}
|
||||
|
||||
let cachegetFloat64Memory0 = null;
|
||||
function getFloat64Memory0() {
|
||||
if (cachegetFloat64Memory0 === null || cachegetFloat64Memory0.buffer !== wasm.memory.buffer) {
|
||||
cachegetFloat64Memory0 = new Float64Array(wasm.memory.buffer);
|
||||
}
|
||||
return cachegetFloat64Memory0;
|
||||
}
|
||||
|
||||
let cachegetInt32Memory0 = null;
|
||||
function getInt32Memory0() {
|
||||
if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {
|
||||
cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);
|
||||
}
|
||||
return cachegetInt32Memory0;
|
||||
}
|
||||
|
||||
let WASM_VECTOR_LEN = 0;
|
||||
|
||||
let cachedTextEncoder = new TextEncoder('utf-8');
|
||||
|
@ -101,18 +121,6 @@ function passStringToWasm0(arg, malloc, realloc) {
|
|||
return ptr;
|
||||
}
|
||||
|
||||
function isLikeNone(x) {
|
||||
return x === undefined || x === null;
|
||||
}
|
||||
|
||||
let cachegetInt32Memory0 = null;
|
||||
function getInt32Memory0() {
|
||||
if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {
|
||||
cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);
|
||||
}
|
||||
return cachegetInt32Memory0;
|
||||
}
|
||||
|
||||
function debugString(val) {
|
||||
// primitive types
|
||||
const type = typeof val;
|
||||
|
@ -210,18 +218,19 @@ function addBorrowedObject(obj) {
|
|||
heap[--stack_pointer] = obj;
|
||||
return stack_pointer;
|
||||
}
|
||||
function __wbg_adapter_24(arg0, arg1, arg2) {
|
||||
function __wbg_adapter_28(arg0, arg1, arg2) {
|
||||
try {
|
||||
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h7ed9c14451e9c663(arg0, arg1, addBorrowedObject(arg2));
|
||||
wasm._dyn_core__ops__function__FnMut___A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h932b7022027653c1(arg0, arg1, addBorrowedObject(arg2));
|
||||
} finally {
|
||||
heap[stack_pointer++] = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
function __wbg_adapter_27(arg0, arg1, arg2) {
|
||||
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h1409b27d5a10e953(arg0, arg1, addHeapObject(arg2));
|
||||
function __wbg_adapter_31(arg0, arg1, arg2) {
|
||||
wasm._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hc5a7090637073a80(arg0, arg1, addHeapObject(arg2));
|
||||
}
|
||||
|
||||
function notDefined(what) { return () => { throw new Error(`${what} is not defined`); }; }
|
||||
/**
|
||||
*/
|
||||
export function run_login_app() {
|
||||
|
@ -279,6 +288,7 @@ async function init(input) {
|
|||
imports.wbg.__wbindgen_object_drop_ref = function(arg0) {
|
||||
takeObject(arg0);
|
||||
};
|
||||
imports.wbg.__wbg_startConfetti_1e3412426d93bcf0 = typeof startConfetti == 'function' ? startConfetti : notDefined('startConfetti');
|
||||
imports.wbg.__wbindgen_cb_drop = function(arg0) {
|
||||
const obj = takeObject(arg0).original;
|
||||
if (obj.cnt-- == 1) {
|
||||
|
@ -296,6 +306,10 @@ async function init(input) {
|
|||
var ret = getObject(arg0) === undefined;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbindgen_json_parse = function(arg0, arg1) {
|
||||
var ret = JSON.parse(getStringFromWasm0(arg0, arg1));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
|
||||
var ret = getObject(arg0);
|
||||
return addHeapObject(ret);
|
||||
|
@ -326,171 +340,201 @@ async function init(input) {
|
|||
wasm.__wbindgen_free(arg0, arg1);
|
||||
}
|
||||
};
|
||||
imports.wbg.__wbg_instanceof_Window_5993230e7331f098 = function(arg0) {
|
||||
imports.wbg.__wbg_instanceof_Window_9c4fd26090e1d029 = function(arg0) {
|
||||
var ret = getObject(arg0) instanceof Window;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_document_85584f745133c6ad = function(arg0) {
|
||||
imports.wbg.__wbg_document_249e9cf340780f93 = function(arg0) {
|
||||
var ret = getObject(arg0).document;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_localStorage_17cc4197ac61d472 = handleError(function(arg0) {
|
||||
imports.wbg.__wbg_navigator_fdf3521d0e190a9b = function(arg0) {
|
||||
var ret = getObject(arg0).navigator;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_innerWidth_2bb09626230de7ba = handleError(function(arg0) {
|
||||
var ret = getObject(arg0).innerWidth;
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_innerHeight_e73b06bc6aaff2f6 = handleError(function(arg0) {
|
||||
var ret = getObject(arg0).innerHeight;
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_localStorage_884d77b5cedf820a = handleError(function(arg0) {
|
||||
var ret = getObject(arg0).localStorage;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_sessionStorage_eb79149ddca2015c = handleError(function(arg0) {
|
||||
imports.wbg.__wbg_sessionStorage_8a3472de40e5b08f = handleError(function(arg0) {
|
||||
var ret = getObject(arg0).sessionStorage;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_fetch_a830023d79222b35 = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_fetch_4889502a30fcf1be = function(arg0, arg1, arg2) {
|
||||
var ret = getObject(arg0).fetch(getObject(arg1), getObject(arg2));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_createElement_9291c0306f179f1e = handleError(function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_createElement_ba61aad8af6be7f4 = handleError(function(arg0, arg1, arg2) {
|
||||
var ret = getObject(arg0).createElement(getStringFromWasm0(arg1, arg2));
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_createElementNS_ecbbee6419005089 = handleError(function(arg0, arg1, arg2, arg3, arg4) {
|
||||
imports.wbg.__wbg_createElementNS_c951238dc260501e = handleError(function(arg0, arg1, arg2, arg3, arg4) {
|
||||
var ret = getObject(arg0).createElementNS(arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_createTextNode_cd0249d33c7e5c4a = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_createTextNode_278b625a43390ab0 = function(arg0, arg1, arg2) {
|
||||
var ret = getObject(arg0).createTextNode(getStringFromWasm0(arg1, arg2));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_querySelector_8ff6e717f918ac47 = handleError(function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_querySelector_db4d492deb40e771 = handleError(function(arg0, arg1, arg2) {
|
||||
var ret = getObject(arg0).querySelector(getStringFromWasm0(arg1, arg2));
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_status_42d679a063e3f40c = function(arg0) {
|
||||
imports.wbg.__wbg_status_5580a898717a7097 = function(arg0) {
|
||||
var ret = getObject(arg0).status;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_headers_92965033102a703d = function(arg0) {
|
||||
imports.wbg.__wbg_headers_f36154094992b8f5 = function(arg0) {
|
||||
var ret = getObject(arg0).headers;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_arrayBuffer_aeff0aaf9aec857d = handleError(function(arg0) {
|
||||
imports.wbg.__wbg_arrayBuffer_a98df6d58bb5ea26 = handleError(function(arg0) {
|
||||
var ret = getObject(arg0).arrayBuffer();
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_text_4b57f36d42790087 = handleError(function(arg0) {
|
||||
imports.wbg.__wbg_text_b2095448993eb3f0 = handleError(function(arg0) {
|
||||
var ret = getObject(arg0).text();
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_instanceof_HtmlTextAreaElement_85330633857ee50e = function(arg0) {
|
||||
imports.wbg.__wbg_instanceof_HtmlTextAreaElement_aefe0cf650ce9a0c = function(arg0) {
|
||||
var ret = getObject(arg0) instanceof HTMLTextAreaElement;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_value_4797b74b15a0bc19 = function(arg0, arg1) {
|
||||
imports.wbg.__wbg_value_ad57e46044f59979 = function(arg0, arg1) {
|
||||
var ret = getObject(arg1).value;
|
||||
var ptr0 = 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_setvalue_3ee783318a1b301d = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_setvalue_790f4e4951947e33 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_newwithstrandinit_814c15649f6924a8 = handleError(function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_newwithstrandinit_a58924208f457f33 = handleError(function(arg0, arg1, arg2) {
|
||||
var ret = new Request(getStringFromWasm0(arg0, arg1), getObject(arg2));
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_instanceof_HtmlButtonElement_87846abf00da2deb = function(arg0) {
|
||||
imports.wbg.__wbg_get_e8e3b929210def3e = handleError(function(arg0, arg1) {
|
||||
var ret = getObject(arg0).get(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_instanceof_HtmlButtonElement_98ac0dc8a5eb6f4e = function(arg0) {
|
||||
var ret = getObject(arg0) instanceof HTMLButtonElement;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_settype_1772a824336d2b26 = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_settype_b8aa4d6f9b00c6f9 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).type = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_addEventListener_c11a938b8469ab06 = handleError(function(arg0, arg1, arg2, arg3, arg4) {
|
||||
imports.wbg.__wbg_signal_b959b4cb8b279328 = function(arg0) {
|
||||
var ret = getObject(arg0).signal;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_new_94647a205b427932 = handleError(function() {
|
||||
var ret = new AbortController();
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_abort_13132a8ca4c8ac09 = function(arg0) {
|
||||
getObject(arg0).abort();
|
||||
};
|
||||
imports.wbg.__wbg_addEventListener_502683a26945b1a5 = handleError(function(arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).addEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), getObject(arg4));
|
||||
});
|
||||
imports.wbg.__wbg_removeEventListener_992337883d25d832 = handleError(function(arg0, arg1, arg2, arg3, arg4) {
|
||||
imports.wbg.__wbg_removeEventListener_1f30d3e3ef4ee58e = handleError(function(arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).removeEventListener(getStringFromWasm0(arg1, arg2), getObject(arg3), arg4 !== 0);
|
||||
});
|
||||
imports.wbg.__wbg_instanceof_HtmlInputElement_631f8bb677bb0897 = function(arg0) {
|
||||
imports.wbg.__wbg_instanceof_HtmlInputElement_6dfc5638bc87076f = function(arg0) {
|
||||
var ret = getObject(arg0) instanceof HTMLInputElement;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_setchecked_e9a4b8ce0e28b973 = function(arg0, arg1) {
|
||||
imports.wbg.__wbg_setchecked_0033386107edc6f2 = function(arg0, arg1) {
|
||||
getObject(arg0).checked = arg1 !== 0;
|
||||
};
|
||||
imports.wbg.__wbg_settype_dfbbea62b5fa060d = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_settype_6d9bbd4e5c5e8fc9 = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).type = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_value_98044d455b0093f7 = function(arg0, arg1) {
|
||||
imports.wbg.__wbg_value_2577d9319a38ca2e = function(arg0, arg1) {
|
||||
var ret = getObject(arg1).value;
|
||||
var ptr0 = 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_setvalue_2924913056a0a03c = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_setvalue_7adbd4552719bd8e = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).value = getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_signal_fbd119dce1c909d1 = function(arg0) {
|
||||
var ret = getObject(arg0).signal;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_new_049faf1b539ba534 = handleError(function() {
|
||||
var ret = new AbortController();
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_abort_fa1dfe1534bb7a3a = function(arg0) {
|
||||
getObject(arg0).abort();
|
||||
};
|
||||
imports.wbg.__wbg_namespaceURI_ba0083a6b53a9753 = function(arg0, arg1) {
|
||||
imports.wbg.__wbg_namespaceURI_09075ee9acb8b2d7 = function(arg0, arg1) {
|
||||
var 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_removeAttribute_ab52d40b0c7386a7 = handleError(function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_removeAttribute_3b4ea946697b7cea = handleError(function(arg0, arg1, arg2) {
|
||||
getObject(arg0).removeAttribute(getStringFromWasm0(arg1, arg2));
|
||||
});
|
||||
imports.wbg.__wbg_setAttribute_5349d84c3833cecd = handleError(function(arg0, arg1, arg2, arg3, arg4) {
|
||||
imports.wbg.__wbg_setAttribute_0b50656f1ccc45bf = handleError(function(arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).setAttribute(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
|
||||
});
|
||||
imports.wbg.__wbg_log_be5faf67a2e8b869 = function(arg0) {
|
||||
imports.wbg.__wbg_log_386a8115a84a780d = function(arg0) {
|
||||
console.log(getObject(arg0));
|
||||
};
|
||||
imports.wbg.__wbg_fetch_2740e801a1c8d511 = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_fetch_75f2bada7009e7f1 = function(arg0, arg1, arg2) {
|
||||
var ret = getObject(arg0).fetch(getObject(arg1), getObject(arg2));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_lastChild_d4077e79715ffef3 = function(arg0) {
|
||||
imports.wbg.__wbg_credentials_ba45779b49de67a8 = function(arg0) {
|
||||
var ret = getObject(arg0).credentials;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_lastChild_41f6d41cb58f88d3 = function(arg0) {
|
||||
var ret = getObject(arg0).lastChild;
|
||||
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_setnodeValue_83c9aa40c199e1ba = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_setnodeValue_eb7b7f2b1e879eec = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).nodeValue = arg1 === 0 ? undefined : getStringFromWasm0(arg1, arg2);
|
||||
};
|
||||
imports.wbg.__wbg_textContent_06c1d06e1d69ea68 = function(arg0, arg1) {
|
||||
imports.wbg.__wbg_textContent_62903c35b99b5ca3 = function(arg0, arg1) {
|
||||
var 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_57f30a01b30ec33c = handleError(function(arg0, arg1) {
|
||||
imports.wbg.__wbg_appendChild_6ae001e6d3556190 = handleError(function(arg0, arg1) {
|
||||
var ret = getObject(arg0).appendChild(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_insertBefore_30d17168293fa763 = handleError(function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_insertBefore_f2ee50372a21309c = handleError(function(arg0, arg1, arg2) {
|
||||
var ret = getObject(arg0).insertBefore(getObject(arg1), getObject(arg2));
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_removeChild_77c0b65b7396e214 = handleError(function(arg0, arg1) {
|
||||
imports.wbg.__wbg_removeChild_d76a38e31f7ffdcb = handleError(function(arg0, arg1) {
|
||||
var ret = getObject(arg0).removeChild(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_newwithstrsequencesequence_856c86f363c8a3d6 = handleError(function(arg0) {
|
||||
imports.wbg.__wbg_getItem_ccdedac90f432f9a = handleError(function(arg0, arg1, arg2, arg3) {
|
||||
var 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;
|
||||
});
|
||||
imports.wbg.__wbg_setItem_79aa1709a35f859c = handleError(function(arg0, arg1, arg2, arg3, arg4) {
|
||||
getObject(arg0).setItem(getStringFromWasm0(arg1, arg2), getStringFromWasm0(arg3, arg4));
|
||||
});
|
||||
imports.wbg.__wbg_newwithstrsequencesequence_fb596b2afa3a5079 = handleError(function(arg0) {
|
||||
var ret = new Headers(getObject(arg0));
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_get_47bf656299aac357 = function(arg0, arg1) {
|
||||
imports.wbg.__wbg_get_f099d98ea7d68360 = function(arg0, arg1) {
|
||||
var ret = getObject(arg0)[arg1 >>> 0];
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
|
@ -503,113 +547,119 @@ async function init(input) {
|
|||
var ret = typeof(val) === 'object' && val !== null;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_next_f613b44647788059 = function(arg0) {
|
||||
imports.wbg.__wbg_next_af8c20b8c0d81345 = function(arg0) {
|
||||
var ret = getObject(arg0).next;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_next_cf4ec627a2e85bac = handleError(function(arg0) {
|
||||
imports.wbg.__wbg_next_9d10ccb28a5fd327 = handleError(function(arg0) {
|
||||
var ret = getObject(arg0).next();
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_done_4e046ac6e3b595e0 = function(arg0) {
|
||||
imports.wbg.__wbg_done_faa42c8d1dd8ca9e = function(arg0) {
|
||||
var ret = getObject(arg0).done;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_value_6fa14ba8ee7b7c3d = function(arg0) {
|
||||
imports.wbg.__wbg_value_9befa7ab4a7326bf = function(arg0) {
|
||||
var ret = getObject(arg0).value;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_iterator_7d4f7917ab7aeca0 = function() {
|
||||
imports.wbg.__wbg_iterator_de2adb40693c8c47 = function() {
|
||||
var ret = Symbol.iterator;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_get_4e90ba4e3de362de = handleError(function(arg0, arg1) {
|
||||
imports.wbg.__wbg_get_0c6963cbab34fbb6 = handleError(function(arg0, arg1) {
|
||||
var ret = Reflect.get(getObject(arg0), getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_call_e5847d15cc228e4f = handleError(function(arg0, arg1) {
|
||||
imports.wbg.__wbg_call_cb478d88f3068c91 = handleError(function(arg0, arg1) {
|
||||
var ret = getObject(arg0).call(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_new_7c995f2adeba6fb5 = function() {
|
||||
imports.wbg.__wbg_new_8528c110a833413f = function() {
|
||||
var ret = new Array();
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_from_badf9c2620e47d5a = function(arg0) {
|
||||
imports.wbg.__wbg_from_c9968c40e2da92d7 = function(arg0) {
|
||||
var ret = Array.from(getObject(arg0));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_push_3f7c76b58919ce0d = function(arg0, arg1) {
|
||||
imports.wbg.__wbg_push_17a514d8ab666103 = function(arg0, arg1) {
|
||||
var ret = getObject(arg0).push(getObject(arg1));
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_toString_ebb2190bcbb2fdfe = function(arg0) {
|
||||
imports.wbg.__wbg_toString_24c414b45ffa40fa = function(arg0) {
|
||||
var ret = getObject(arg0).toString();
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_newnoargs_2349ba6aefe72376 = function(arg0, arg1) {
|
||||
imports.wbg.__wbg_newnoargs_3efc7bfa69a681f9 = function(arg0, arg1) {
|
||||
var ret = new Function(getStringFromWasm0(arg0, arg1));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_is_ff18d90ee51cb4a6 = function(arg0, arg1) {
|
||||
imports.wbg.__wbg_is_573b30cf06a763fb = function(arg0, arg1) {
|
||||
var ret = Object.is(getObject(arg0), getObject(arg1));
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_new_59986c8731bebaa1 = function() {
|
||||
imports.wbg.__wbg_new_d14bf16e62c6b3d5 = function() {
|
||||
var ret = new Object();
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_resolve_e0690143406c88cb = function(arg0) {
|
||||
imports.wbg.__wbg_resolve_778af3f90b8e2b59 = function(arg0) {
|
||||
var ret = Promise.resolve(getObject(arg0));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_then_9caf23122e4fd5d3 = function(arg0, arg1) {
|
||||
imports.wbg.__wbg_then_367b3e718069cfb9 = function(arg0, arg1) {
|
||||
var ret = getObject(arg0).then(getObject(arg1));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_then_16663faf60ffbe95 = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_then_ac66ca61394bfd21 = function(arg0, arg1, arg2) {
|
||||
var ret = getObject(arg0).then(getObject(arg1), getObject(arg2));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_self_35a0fda3eb965abe = handleError(function() {
|
||||
imports.wbg.__wbg_self_05c54dcacb623b9a = handleError(function() {
|
||||
var ret = self.self;
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_window_88a6f88dd3a474f1 = handleError(function() {
|
||||
imports.wbg.__wbg_window_9777ce446d12989f = handleError(function() {
|
||||
var ret = window.window;
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_globalThis_1d843c4ad7b6a1f5 = handleError(function() {
|
||||
imports.wbg.__wbg_globalThis_f0ca0bbb0149cf3d = handleError(function() {
|
||||
var ret = globalThis.globalThis;
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_global_294ce70448e8fbbf = handleError(function() {
|
||||
imports.wbg.__wbg_global_c3c8325ae8c7f1a9 = handleError(function() {
|
||||
var ret = global.global;
|
||||
return addHeapObject(ret);
|
||||
});
|
||||
imports.wbg.__wbg_buffer_0be9fb426f2dd82b = function(arg0) {
|
||||
imports.wbg.__wbg_buffer_ebc6c8e75510eae3 = function(arg0) {
|
||||
var ret = getObject(arg0).buffer;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_newwithbyteoffsetandlength_85b7ce82b001ea08 = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_newwithbyteoffsetandlength_ca3d3d8811ecb569 = function(arg0, arg1, arg2) {
|
||||
var ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_length_3a5138f465b971ad = function(arg0) {
|
||||
imports.wbg.__wbg_length_317f0dd77f7a6673 = function(arg0) {
|
||||
var ret = getObject(arg0).length;
|
||||
return ret;
|
||||
};
|
||||
imports.wbg.__wbg_new_4e8d18dbf9cd5240 = function(arg0) {
|
||||
imports.wbg.__wbg_new_135e963dedf67b22 = function(arg0) {
|
||||
var ret = new Uint8Array(getObject(arg0));
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbg_set_4769de301eb521d7 = function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_set_4a5072a31008e0cb = function(arg0, arg1, arg2) {
|
||||
getObject(arg0).set(getObject(arg1), arg2 >>> 0);
|
||||
};
|
||||
imports.wbg.__wbg_set_7e15d36563072b19 = handleError(function(arg0, arg1, arg2) {
|
||||
imports.wbg.__wbg_set_61642586f7156f4a = handleError(function(arg0, arg1, arg2) {
|
||||
var ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2));
|
||||
return ret;
|
||||
});
|
||||
imports.wbg.__wbindgen_number_get = function(arg0, arg1) {
|
||||
const obj = getObject(arg1);
|
||||
var ret = typeof(obj) === 'number' ? obj : undefined;
|
||||
getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret;
|
||||
getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_string_get = function(arg0, arg1) {
|
||||
const obj = getObject(arg1);
|
||||
var ret = typeof(obj) === 'string' ? obj : undefined;
|
||||
|
@ -632,12 +682,12 @@ async function init(input) {
|
|||
var ret = wasm.memory;
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_closure_wrapper487 = function(arg0, arg1, arg2) {
|
||||
var ret = makeMutClosure(arg0, arg1, 173, __wbg_adapter_24);
|
||||
imports.wbg.__wbindgen_closure_wrapper605 = function(arg0, arg1, arg2) {
|
||||
var ret = makeMutClosure(arg0, arg1, 237, __wbg_adapter_28);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
imports.wbg.__wbindgen_closure_wrapper560 = function(arg0, arg1, arg2) {
|
||||
var ret = makeMutClosure(arg0, arg1, 202, __wbg_adapter_27);
|
||||
imports.wbg.__wbindgen_closure_wrapper1492 = function(arg0, arg1, arg2) {
|
||||
var ret = makeMutClosure(arg0, arg1, 330, __wbg_adapter_31);
|
||||
return addHeapObject(ret);
|
||||
};
|
||||
|
||||
|
|
Binary file not shown.
|
@ -4,7 +4,7 @@
|
|||
"William Brown <william@blackhats.net.au>"
|
||||
],
|
||||
"description": "Kanidm Server Web User Interface",
|
||||
"version": "1.1.0-alpha.3",
|
||||
"version": "1.1.0-alpha.4",
|
||||
"license": "MPL-2.0",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#![recursion_limit = "256"]
|
||||
|
||||
use wasm_bindgen::prelude::*;
|
||||
use yew::prelude::*;
|
||||
// use yew::prelude::*;
|
||||
|
||||
mod login;
|
||||
|
||||
|
|
|
@ -1,42 +1,91 @@
|
|||
use anyhow::Error;
|
||||
use wasm_bindgen::prelude::*;
|
||||
use yew::format::{Json, Nothing};
|
||||
use wasm_bindgen_futures::{spawn_local, JsFuture};
|
||||
use yew::format::Json;
|
||||
use yew::prelude::*;
|
||||
use yew::services::fetch::{FetchService, FetchTask, Request, Response};
|
||||
use yew::services::{ConsoleService, StorageService};
|
||||
|
||||
use kanidm_proto::v1::{AuthRequest, AuthState, AuthStep};
|
||||
use kanidm_proto::v1::{
|
||||
AuthAllowed, AuthCredential, AuthRequest, AuthResponse, AuthState, AuthStep,
|
||||
};
|
||||
|
||||
use webauthn_rs::proto::PublicKeyCredential;
|
||||
|
||||
#[wasm_bindgen]
|
||||
extern "C" {
|
||||
fn startConfetti();
|
||||
}
|
||||
|
||||
pub struct LoginApp {
|
||||
link: ComponentLink<Self>,
|
||||
username: String,
|
||||
inputvalue: String,
|
||||
lstorage: StorageService,
|
||||
ft: Option<FetchTask>,
|
||||
session_id: String,
|
||||
state: LoginState,
|
||||
}
|
||||
|
||||
#[derive(PartialEq)]
|
||||
enum TotpState {
|
||||
Enabled,
|
||||
Disabled,
|
||||
Invalid,
|
||||
}
|
||||
|
||||
enum LoginState {
|
||||
Init(bool),
|
||||
|
||||
// MechChoice
|
||||
// CredChoice
|
||||
Password(bool),
|
||||
Totp(TotpState),
|
||||
Webauthn(web_sys::CredentialRequestOptions),
|
||||
Error(String, Option<String>),
|
||||
Denied(String),
|
||||
Authenticated,
|
||||
}
|
||||
|
||||
pub enum LoginAppMsg {
|
||||
UserNameInput(String),
|
||||
Input(String),
|
||||
Restart,
|
||||
Begin,
|
||||
Next(AuthState),
|
||||
DoNothing,
|
||||
PasswordSubmit,
|
||||
TotpSubmit,
|
||||
WebauthnSubmit(PublicKeyCredential),
|
||||
Start(String, AuthResponse),
|
||||
Next(AuthResponse),
|
||||
// DoNothing,
|
||||
Error(String, Option<String>),
|
||||
}
|
||||
|
||||
impl LoginApp {
|
||||
fn auth_begin(&mut self) {
|
||||
let username_copy = self.username.clone();
|
||||
let callback =
|
||||
self.link
|
||||
.callback(move |response: Response<Json<Result<AuthState, Error>>>| {
|
||||
let (parts, body) = response.into_parts();
|
||||
match body {
|
||||
Json(Ok(state)) => LoginAppMsg::Next(state),
|
||||
Json(Err(_)) => LoginAppMsg::DoNothing,
|
||||
}
|
||||
});
|
||||
fn auth_init(&mut self) {
|
||||
let callback = self.link.callback(
|
||||
move |response: Response<Json<Result<AuthResponse, Error>>>| {
|
||||
let (parts, body) = response.into_parts();
|
||||
|
||||
let session_id = parts
|
||||
.headers
|
||||
.get("x-kanidm-auth-session-id")
|
||||
.map(|session_id| session_id.to_str().unwrap().to_string())
|
||||
.unwrap_or_else(|| "".to_string());
|
||||
|
||||
match body {
|
||||
Json(Ok(state)) => LoginAppMsg::Start(session_id, state),
|
||||
Json(Err(e)) => LoginAppMsg::Error(
|
||||
format!("{:?}", e),
|
||||
parts
|
||||
.headers
|
||||
.get("x-kanidm-opid")
|
||||
.map(|id| id.to_str().unwrap().to_string()),
|
||||
),
|
||||
}
|
||||
},
|
||||
);
|
||||
let authreq = AuthRequest {
|
||||
step: AuthStep::Init(self.username.clone()),
|
||||
step: AuthStep::Init(self.inputvalue.clone()),
|
||||
};
|
||||
// Setup the auth step::init(username);
|
||||
self.ft = Request::post("/v1/auth")
|
||||
.header("Content-Type", "application/json")
|
||||
.body(Json(&authreq))
|
||||
|
@ -45,6 +94,167 @@ impl LoginApp {
|
|||
.map(|ft| Some(ft))
|
||||
.unwrap_or_else(|_e| None);
|
||||
}
|
||||
|
||||
fn auth_step(&mut self, authreq: AuthRequest) {
|
||||
let callback = self.link.callback(
|
||||
move |response: Response<Json<Result<AuthResponse, Error>>>| {
|
||||
let (parts, body) = response.into_parts();
|
||||
|
||||
match body {
|
||||
Json(Ok(state)) => LoginAppMsg::Next(state),
|
||||
Json(Err(e)) => LoginAppMsg::Error(
|
||||
format!("{:?}", e),
|
||||
parts
|
||||
.headers
|
||||
.get("x-kanidm-opid")
|
||||
.map(|id| id.to_str().unwrap().to_string()),
|
||||
),
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
self.ft = Request::post("/v1/auth")
|
||||
.header("Content-Type", "application/json")
|
||||
.header("x-kanidm-auth-session-id", &self.session_id)
|
||||
.body(Json(&authreq))
|
||||
.map_err(|_| ())
|
||||
.and_then(|request| FetchService::fetch_binary(request, callback).map_err(|_| ()))
|
||||
.map(|ft| Some(ft))
|
||||
.unwrap_or_else(|_e| None);
|
||||
}
|
||||
|
||||
fn view_state(&self) -> Html {
|
||||
match &self.state {
|
||||
LoginState::Init(enable) => {
|
||||
html! {
|
||||
<>
|
||||
<div class="container">
|
||||
<p>
|
||||
{" Username: "}
|
||||
</p>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div>
|
||||
<input id="username" type="text" class="form-control" value=self.inputvalue oninput=self.link.callback(|e: InputData| LoginAppMsg::Input(e.value)) disabled=!enable />
|
||||
<button type="button" class="btn btn-dark" onclick=self.link.callback(|_| LoginAppMsg::Begin) disabled=!enable >{" Begin "}</button>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
}
|
||||
}
|
||||
LoginState::Password(enable) => {
|
||||
html! {
|
||||
<>
|
||||
<div class="container">
|
||||
<p>
|
||||
{" Password: "}
|
||||
</p>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div>
|
||||
<input id="password" type="password" class="form-control" value=self.inputvalue oninput=self.link.callback(|e: InputData| LoginAppMsg::Input(e.value)) disabled=!enable />
|
||||
<button type="button" class="btn btn-dark" onclick=self.link.callback(|_| LoginAppMsg::PasswordSubmit) disabled=!enable >{" Submit "}</button>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
}
|
||||
}
|
||||
LoginState::Totp(state) => {
|
||||
html! {
|
||||
<>
|
||||
<div class="container">
|
||||
<p>
|
||||
{" TOTP: "}
|
||||
{ if state==&TotpState::Invalid { "can only contain numeric digits" } else { "" } }
|
||||
</p>
|
||||
</div>
|
||||
<div class="container">
|
||||
<div>
|
||||
<input id="totp" type="text" class="form-control" value=self.inputvalue oninput=self.link.callback(|e: InputData| LoginAppMsg::Input(e.value)) disabled=state==&TotpState::Disabled />
|
||||
<button type="button" class="btn btn-dark" onclick=self.link.callback(|_| LoginAppMsg::TotpSubmit) disabled=state==&TotpState::Disabled >{" Submit "}</button>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
}
|
||||
}
|
||||
LoginState::Webauthn(challenge) => {
|
||||
// Start the navigator parts.
|
||||
if let Some(win) = web_sys::window() {
|
||||
let promise = win
|
||||
.navigator()
|
||||
.credentials()
|
||||
.get_with_options(&challenge)
|
||||
.expect("Unable to create promise");
|
||||
let fut = JsFuture::from(promise);
|
||||
let linkc = self.link.clone();
|
||||
|
||||
spawn_local(async move {
|
||||
match fut.await {
|
||||
Ok(data) => {
|
||||
let data = PublicKeyCredential::from(
|
||||
web_sys::PublicKeyCredential::from(data),
|
||||
);
|
||||
linkc.send_message(LoginAppMsg::WebauthnSubmit(data));
|
||||
}
|
||||
Err(e) => {
|
||||
linkc.send_message(LoginAppMsg::Error(format!("{:?}", e), None));
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
self.link.send_message(LoginAppMsg::Error(
|
||||
"failed to access navigator credentials".to_string(),
|
||||
None,
|
||||
));
|
||||
};
|
||||
|
||||
html! {
|
||||
<div class="container">
|
||||
<p>
|
||||
{" Webauthn "}
|
||||
</p>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
LoginState::Authenticated => {
|
||||
html! {
|
||||
<div class="container">
|
||||
<p>
|
||||
{ "Login Success 🎉" }
|
||||
</p>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
LoginState::Denied(msg) => {
|
||||
html! {
|
||||
<div class="container">
|
||||
<p>
|
||||
{ "Authentication Denied" }
|
||||
</p>
|
||||
<p>
|
||||
{ msg.as_str() }
|
||||
</p>
|
||||
<button type="button" class="btn btn-dark" onclick=self.link.callback(|_| LoginAppMsg::Restart) >{" Start Again "}</button>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
LoginState::Error(msg, last_opid) => {
|
||||
html! {
|
||||
<div class="container">
|
||||
<p>
|
||||
{ "An error has occured 😔 " }
|
||||
</p>
|
||||
<p>
|
||||
{ msg.as_str() }
|
||||
</p>
|
||||
<p>
|
||||
{ if let Some(opid) = last_opid.as_ref() { opid.clone() } else { "Local Error".to_string() } }
|
||||
</p>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Component for LoginApp {
|
||||
|
@ -58,13 +268,19 @@ impl Component for LoginApp {
|
|||
let lstorage = StorageService::new(yew::services::storage::Area::Local).unwrap();
|
||||
|
||||
// Get any previous sessions?
|
||||
let prev_session: Result<String, _> = lstorage.restore("kanidm_bearer_token");
|
||||
|
||||
ConsoleService::log(format!("prev_session -> {:?}", prev_session).as_str());
|
||||
|
||||
// Are they still valid?
|
||||
|
||||
LoginApp {
|
||||
link,
|
||||
username: "".to_string(),
|
||||
inputvalue: "".to_string(),
|
||||
lstorage,
|
||||
ft: None,
|
||||
session_id: "".to_string(),
|
||||
state: LoginState::Init(true),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -74,46 +290,191 @@ impl Component for LoginApp {
|
|||
|
||||
fn update(&mut self, msg: Self::Message) -> ShouldRender {
|
||||
match msg {
|
||||
LoginAppMsg::UserNameInput(mut username) => {
|
||||
std::mem::swap(&mut self.username, &mut username);
|
||||
LoginAppMsg::Input(mut inputvalue) => {
|
||||
std::mem::swap(&mut self.inputvalue, &mut inputvalue);
|
||||
true
|
||||
}
|
||||
LoginAppMsg::Restart => {
|
||||
// Clear any leftover input
|
||||
self.inputvalue = "".to_string();
|
||||
self.ft = None;
|
||||
self.session_id = "".to_string();
|
||||
self.state = LoginState::Init(true);
|
||||
true
|
||||
}
|
||||
LoginAppMsg::Begin => {
|
||||
ConsoleService::log(format!("begin -> {:?}", self.username).as_str());
|
||||
ConsoleService::log(format!("begin -> {:?}", self.inputvalue).as_str());
|
||||
// Disable the button?
|
||||
self.auth_begin();
|
||||
self.state = LoginState::Init(false);
|
||||
self.auth_init();
|
||||
true
|
||||
}
|
||||
LoginAppMsg::Next(state) => {
|
||||
ConsoleService::log(format!("next -> {:?}", state).as_str());
|
||||
LoginAppMsg::PasswordSubmit => {
|
||||
ConsoleService::log("password");
|
||||
// Disable the button?
|
||||
self.state = LoginState::Password(false);
|
||||
let authreq = AuthRequest {
|
||||
step: AuthStep::Cred(AuthCredential::Password(self.inputvalue.clone())),
|
||||
};
|
||||
self.auth_step(authreq);
|
||||
// Clear the password from memory.
|
||||
self.inputvalue = "".to_string();
|
||||
true
|
||||
}
|
||||
LoginAppMsg::TotpSubmit => {
|
||||
ConsoleService::log("totp");
|
||||
// Disable the button?
|
||||
match u32::from_str_radix(&self.inputvalue, 10) {
|
||||
Ok(totp) => {
|
||||
self.state = LoginState::Totp(TotpState::Disabled);
|
||||
let authreq = AuthRequest {
|
||||
step: AuthStep::Cred(AuthCredential::TOTP(totp)),
|
||||
};
|
||||
self.auth_step(authreq);
|
||||
}
|
||||
Err(_) => {
|
||||
self.state = LoginState::Totp(TotpState::Invalid);
|
||||
}
|
||||
}
|
||||
|
||||
// Clear the totp from memory.
|
||||
self.inputvalue = "".to_string();
|
||||
|
||||
true
|
||||
}
|
||||
LoginAppMsg::WebauthnSubmit(resp) => {
|
||||
ConsoleService::log("webauthn");
|
||||
let authreq = AuthRequest {
|
||||
step: AuthStep::Cred(AuthCredential::Webauthn(resp.into())),
|
||||
};
|
||||
self.auth_step(authreq);
|
||||
// Do not submit here, we need to wait for the next ui transition.
|
||||
false
|
||||
}
|
||||
LoginAppMsg::Start(session_id, resp) => {
|
||||
// Clear any leftover input
|
||||
self.inputvalue = "".to_string();
|
||||
ConsoleService::log(format!("start -> {:?} : {:?}", resp, session_id).as_str());
|
||||
match resp.state {
|
||||
AuthState::Choose(mut mechs) => {
|
||||
self.session_id = session_id;
|
||||
if mechs.len() == 1 {
|
||||
// If it's only one mech, just submit that.
|
||||
let mech = mechs.pop().unwrap();
|
||||
|
||||
let authreq = AuthRequest {
|
||||
step: AuthStep::Begin(mech),
|
||||
};
|
||||
self.auth_step(authreq);
|
||||
// We do NOT need to change state or redraw
|
||||
false
|
||||
} else {
|
||||
// Offer the choices.
|
||||
ConsoleService::log(format!("unimplemented").as_str());
|
||||
self.state = LoginState::Error("Unimplemented".to_string(), None);
|
||||
true
|
||||
}
|
||||
}
|
||||
AuthState::Denied(reason) => {
|
||||
ConsoleService::log(format!("denied -> {:?}", reason).as_str());
|
||||
self.state = LoginState::Denied(reason);
|
||||
true
|
||||
}
|
||||
_ => {
|
||||
ConsoleService::log(format!("invalid state transition").as_str());
|
||||
self.state =
|
||||
LoginState::Error("Invalid UI State Transition".to_string(), None);
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
LoginAppMsg::Next(resp) => {
|
||||
// Clear any leftover input
|
||||
self.inputvalue = "".to_string();
|
||||
ConsoleService::log(format!("next -> {:?}", resp).as_str());
|
||||
// Based on the state we have, we need to chose our steps.
|
||||
match resp.state {
|
||||
AuthState::Choose(_mechs) => {
|
||||
ConsoleService::log(format!("invalid state transition").as_str());
|
||||
self.state =
|
||||
LoginState::Error("Invalid UI State Transition".to_string(), None);
|
||||
true
|
||||
}
|
||||
AuthState::Continue(mut allowed) => {
|
||||
if allowed.len() == 1 {
|
||||
// If there is only one, change our state for that input type.
|
||||
match allowed.pop().unwrap() {
|
||||
AuthAllowed::Anonymous => {
|
||||
// Just submit this.
|
||||
}
|
||||
AuthAllowed::Password => {
|
||||
// Go to the password view.
|
||||
self.state = LoginState::Password(true);
|
||||
}
|
||||
AuthAllowed::TOTP => {
|
||||
self.state = LoginState::Totp(TotpState::Enabled);
|
||||
}
|
||||
AuthAllowed::Webauthn(challenge) => {
|
||||
self.state = LoginState::Webauthn(challenge.into())
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Else, present the options in a choice.
|
||||
}
|
||||
true
|
||||
}
|
||||
AuthState::Denied(reason) => {
|
||||
ConsoleService::log(format!("denied -> {:?}", reason).as_str());
|
||||
self.state = LoginState::Denied(reason);
|
||||
true
|
||||
}
|
||||
AuthState::Success(bearer_token) => {
|
||||
// Store the bearer here!
|
||||
self.lstorage.store("kanidm_bearer_token", Ok(bearer_token));
|
||||
self.state = LoginState::Authenticated;
|
||||
startConfetti();
|
||||
true
|
||||
}
|
||||
}
|
||||
}
|
||||
LoginAppMsg::Error(msg, opid) => {
|
||||
// Clear any leftover input
|
||||
self.inputvalue = "".to_string();
|
||||
ConsoleService::log(format!("error -> {:?}, {:?}", msg, opid).as_str());
|
||||
self.state = LoginState::Error(msg, opid);
|
||||
true
|
||||
}
|
||||
LoginAppMsg::DoNothing => false,
|
||||
}
|
||||
}
|
||||
|
||||
fn view(&self) -> Html {
|
||||
// How do we add a top level theme?
|
||||
let (width, height): (u32, u32) = if let Some(win) = web_sys::window() {
|
||||
let w = win.inner_width().unwrap();
|
||||
let h = win.inner_height().unwrap();
|
||||
ConsoleService::log(format!("width {:?} {:?}", w, w.as_f64()).as_str());
|
||||
ConsoleService::log(format!("height {:?} {:?}", h, h.as_f64()).as_str());
|
||||
(w.as_f64().unwrap() as u32, h.as_f64().unwrap() as u32)
|
||||
} else {
|
||||
ConsoleService::log("Unable to access document window");
|
||||
(0, 0)
|
||||
};
|
||||
|
||||
html! {
|
||||
<div id="content" class="container">
|
||||
<div class="row d-flex justify-content-center align-items-center" style="min-height: 100vh;">
|
||||
<div class="col">
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<div class="container">
|
||||
<h2>{ "Kanidm Alpha 🦀 " }</h2>
|
||||
<p>
|
||||
{" Username: "}
|
||||
</p>
|
||||
<div>
|
||||
<canvas id="confetti-canvas" style="position:absolute" width=width height=height></canvas>
|
||||
<div id="content" class="container">
|
||||
<div class="row d-flex justify-content-center align-items-center" style="min-height: 100vh;">
|
||||
<div class="col">
|
||||
</div>
|
||||
<div class="container">
|
||||
<div>
|
||||
<input id="username" type="text" class="form-control" value=self.username oninput=self.link.callback(|e: InputData| LoginAppMsg::UserNameInput(e.value)) />
|
||||
<button type="button" class="btn btn-dark" onclick=self.link.callback(|_| LoginAppMsg::Begin)>{" Begin "}</button>
|
||||
<div class="col-sm-6">
|
||||
<div class="container">
|
||||
<h2>{ "Kanidm Alpha 🦀 " }</h2>
|
||||
</div>
|
||||
{ self.view_state() }
|
||||
</div>
|
||||
<div class="col">
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
Loading…
Reference in a new issue