spec-3nweb-server 1.8.5 → 1.8.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitlab-ci-linux.yml +50 -0
- package/.gitlab-ci-mac.yml +29 -0
- package/.gitlab-ci-windows.yml +29 -0
- package/.gitlab-ci.yml +63 -0
- package/build/3nstorage/resources/store.d.ts +2 -2
- package/build/3nstorage/resources/store.js +1 -1
- package/build/3nstorage/resources/users.d.ts +3 -3
- package/build/3nstorage/resources/users.js +1 -1
- package/build/3nstorage/resources/utils.d.ts +6 -0
- package/build/3nstorage/resources/utils.js +41 -0
- package/build/3nstorage/routes/owner/archive-obj-version.js +8 -10
- package/build/3nstorage/routes/owner/cancel-trans.js +5 -4
- package/build/3nstorage/routes/owner/delete-obj.js +7 -8
- package/build/3nstorage/routes/owner/get-archived-obj-ver.js +11 -13
- package/build/3nstorage/routes/owner/get-current-obj.js +7 -6
- package/build/3nstorage/routes/owner/get-obj-status.js +8 -8
- package/build/3nstorage/routes/owner/put-current-obj.js +25 -55
- package/build/3nstorage/routes/owner/session-params.js +2 -0
- package/build/asmail/resources/utils.d.ts +6 -0
- package/build/asmail/resources/utils.js +36 -0
- package/build/asmail/routes/delivery/finalize-delivery.js +3 -2
- package/build/asmail/routes/delivery/pre-flight.js +9 -26
- package/build/asmail/routes/delivery/provide-recipient-pubkey.js +4 -3
- package/build/asmail/routes/delivery/put-metadata.js +13 -21
- package/build/asmail/routes/delivery/put-obj.js +19 -25
- package/build/asmail/routes/delivery/restart-session.d.ts +4 -8
- package/build/asmail/routes/delivery/restart-session.js +10 -23
- package/build/asmail/routes/delivery/sender-authorization.js +5 -5
- package/build/asmail/routes/delivery/start-session.js +9 -24
- package/build/asmail/routes/retrieval/get-message-meta.js +4 -7
- package/build/asmail/routes/retrieval/get-message-obj.js +10 -7
- package/build/asmail/routes/retrieval/list-messages.js +4 -4
- package/build/asmail/routes/retrieval/remove-message.js +3 -2
- package/build/mock/tls-options.js +46 -44
- package/build/tests/admin-proto/signup.d.ts +1 -0
- package/build/tests/admin-proto/signup.js +235 -0
- package/build/tests/jasmine.d.ts +1 -0
- package/build/tests/jasmine.js +32 -0
- package/build/tests/libs-for-tests/3nstorage.d.ts +22 -0
- package/build/tests/libs-for-tests/3nstorage.js +123 -0
- package/build/tests/libs-for-tests/asmail.d.ts +22 -0
- package/build/tests/libs-for-tests/asmail.js +179 -0
- package/build/tests/libs-for-tests/assert.d.ts +1 -0
- package/build/tests/libs-for-tests/assert.js +26 -0
- package/build/tests/libs-for-tests/async-jasmine.d.ts +7 -0
- package/build/tests/libs-for-tests/async-jasmine.js +77 -0
- package/build/tests/libs-for-tests/bytes-equal.d.ts +1 -0
- package/build/tests/libs-for-tests/bytes-equal.js +34 -0
- package/build/tests/libs-for-tests/json-copy.d.ts +1 -0
- package/build/tests/libs-for-tests/json-copy.js +45 -0
- package/build/tests/libs-for-tests/json-equal.d.ts +4 -0
- package/build/tests/libs-for-tests/json-equal.js +67 -0
- package/build/tests/libs-for-tests/mailerid.d.ts +13 -0
- package/build/tests/libs-for-tests/mailerid.js +114 -0
- package/build/tests/libs-for-tests/pkl.d.ts +28 -0
- package/build/tests/libs-for-tests/pkl.js +89 -0
- package/build/tests/libs-for-tests/server-components/3nstorage.d.ts +20 -0
- package/build/tests/libs-for-tests/server-components/3nstorage.js +200 -0
- package/build/tests/libs-for-tests/server-components/admin.d.ts +6 -0
- package/build/tests/libs-for-tests/server-components/admin.js +43 -0
- package/build/tests/libs-for-tests/server-components/asmail.d.ts +16 -0
- package/build/tests/libs-for-tests/server-components/asmail.js +143 -0
- package/build/tests/libs-for-tests/server-components/component.d.ts +13 -0
- package/build/tests/libs-for-tests/server-components/component.js +77 -0
- package/build/tests/libs-for-tests/server-components/mailerid.d.ts +10 -0
- package/build/tests/libs-for-tests/server-components/mailerid.js +103 -0
- package/build/tests/libs-for-tests/server-runner.d.ts +15 -0
- package/build/tests/libs-for-tests/server-runner.js +69 -0
- package/build/tests/libs-for-tests/spec-assembly.d.ts +6 -0
- package/build/tests/libs-for-tests/spec-assembly.js +55 -0
- package/build/tests/libs-for-tests/ws-utils.d.ts +3 -0
- package/build/tests/libs-for-tests/ws-utils.js +59 -0
- package/build/tests/libs-for-tests/xhr-utils.d.ts +61 -0
- package/build/tests/libs-for-tests/xhr-utils.js +154 -0
- package/build/tests/protocols/3nstorage/owner/specs/archive-obj-ver.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/archive-obj-ver.js +84 -0
- package/build/tests/protocols/3nstorage/owner/specs/archive-root-ver.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/archive-root-ver.js +78 -0
- package/build/tests/protocols/3nstorage/owner/specs/delete-archive-obj-ver.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/delete-archive-obj-ver.js +83 -0
- package/build/tests/protocols/3nstorage/owner/specs/delete-archive-root-ver.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/delete-archive-root-ver.js +77 -0
- package/build/tests/protocols/3nstorage/owner/specs/delete-obj.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/delete-obj.js +75 -0
- package/build/tests/protocols/3nstorage/owner/specs/events.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/events.js +91 -0
- package/build/tests/protocols/3nstorage/owner/specs/get-current-obj.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/get-current-obj.js +269 -0
- package/build/tests/protocols/3nstorage/owner/specs/get-current-root.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/get-current-root.js +262 -0
- package/build/tests/protocols/3nstorage/owner/specs/get-obj-status.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/get-obj-status.js +79 -0
- package/build/tests/protocols/3nstorage/owner/specs/get-root-status.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/get-root-status.js +72 -0
- package/build/tests/protocols/3nstorage/owner/specs/put-current-obj.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/put-current-obj.js +287 -0
- package/build/tests/protocols/3nstorage/owner/specs/put-current-root.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/put-current-root.js +274 -0
- package/build/tests/protocols/3nstorage/owner/specs/trans-cancel-root.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/trans-cancel-root.js +73 -0
- package/build/tests/protocols/3nstorage/owner/specs/trans-cancel.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/trans-cancel.js +72 -0
- package/build/tests/protocols/3nstorage/owner/test-utils.d.ts +14 -0
- package/build/tests/protocols/3nstorage/owner/test-utils.js +54 -0
- package/build/tests/protocols/3nstorage/owner.d.ts +1 -0
- package/build/tests/protocols/3nstorage/owner.js +138 -0
- package/build/tests/protocols/asmail/config.d.ts +1 -0
- package/build/tests/protocols/asmail/config.js +117 -0
- package/build/tests/protocols/asmail/delivery/specs/finalize-delivery.d.ts +2 -0
- package/build/tests/protocols/asmail/delivery/specs/finalize-delivery.js +60 -0
- package/build/tests/protocols/asmail/delivery/specs/provide-recipient-pubkey.d.ts +2 -0
- package/build/tests/protocols/asmail/delivery/specs/provide-recipient-pubkey.js +68 -0
- package/build/tests/protocols/asmail/delivery/specs/put-metadata.d.ts +2 -0
- package/build/tests/protocols/asmail/delivery/specs/put-metadata.js +83 -0
- package/build/tests/protocols/asmail/delivery/specs/put-obj.d.ts +2 -0
- package/build/tests/protocols/asmail/delivery/specs/put-obj.js +123 -0
- package/build/tests/protocols/asmail/delivery/specs/restart-session.d.ts +2 -0
- package/build/tests/protocols/asmail/delivery/specs/restart-session.js +79 -0
- package/build/tests/protocols/asmail/delivery/specs/start-session.d.ts +2 -0
- package/build/tests/protocols/asmail/delivery/specs/start-session.js +64 -0
- package/build/tests/protocols/asmail/delivery/test-utils.d.ts +16 -0
- package/build/tests/protocols/asmail/delivery/test-utils.js +46 -0
- package/build/tests/protocols/asmail/delivery.d.ts +1 -0
- package/build/tests/protocols/asmail/delivery.js +46 -0
- package/build/tests/protocols/asmail/retrieval/specs/events.d.ts +2 -0
- package/build/tests/protocols/asmail/retrieval/specs/events.js +62 -0
- package/build/tests/protocols/asmail/retrieval/specs/get-message-meta.d.ts +2 -0
- package/build/tests/protocols/asmail/retrieval/specs/get-message-meta.js +70 -0
- package/build/tests/protocols/asmail/retrieval/specs/get-message-obj.d.ts +2 -0
- package/build/tests/protocols/asmail/retrieval/specs/get-message-obj.js +166 -0
- package/build/tests/protocols/asmail/retrieval/specs/list-messages.d.ts +2 -0
- package/build/tests/protocols/asmail/retrieval/specs/list-messages.js +96 -0
- package/build/tests/protocols/asmail/retrieval/specs/remove-message.d.ts +2 -0
- package/build/tests/protocols/asmail/retrieval/specs/remove-message.js +66 -0
- package/build/tests/protocols/asmail/retrieval/test-utils.d.ts +17 -0
- package/build/tests/protocols/asmail/retrieval/test-utils.js +46 -0
- package/build/tests/protocols/asmail/retrieval.d.ts +1 -0
- package/build/tests/protocols/asmail/retrieval.js +92 -0
- package/build/tests/protocols/mailerid.d.ts +1 -0
- package/build/tests/protocols/mailerid.js +210 -0
- package/build/tests/shared-checks/check-mid-login.d.ts +2 -0
- package/build/tests/shared-checks/check-mid-login.js +131 -0
- package/build/tests/shared-checks/requests.d.ts +20 -0
- package/build/tests/shared-checks/requests.js +123 -0
- package/package.json +1 -1
- package/packing/create-deb.sh +57 -0
- package/packing/deb/lib/systemd/system/3nweb.service +11 -0
- package/packing/deb/postinst +44 -0
- package/packing/deb/usr/share/doc/3nweb-server/conf-for-postinstall.yaml +19 -0
- package/packing/deb/usr/share/doc/3nweb-server/copyright +22 -0
- package/publish-task.sh +10 -0
- package/push-to-github.sh +105 -0
- package/ts-code/3nstorage/3nstorage-app.ts +99 -0
- package/ts-code/3nstorage/owner.ts +178 -0
- package/ts-code/3nstorage/resources/sessions.ts +37 -0
- package/ts-code/3nstorage/resources/store.ts +896 -0
- package/ts-code/3nstorage/resources/users.ts +258 -0
- package/ts-code/3nstorage/resources/utils.ts +45 -0
- package/ts-code/3nstorage/routes/owner/archive-obj-version.ts +71 -0
- package/ts-code/3nstorage/routes/owner/cancel-trans.ts +60 -0
- package/ts-code/3nstorage/routes/owner/delete-obj.ts +99 -0
- package/ts-code/3nstorage/routes/owner/get-archived-obj-ver.ts +109 -0
- package/ts-code/3nstorage/routes/owner/get-current-obj.ts +124 -0
- package/ts-code/3nstorage/routes/owner/get-obj-status.ts +55 -0
- package/ts-code/3nstorage/routes/owner/param-getter.ts +51 -0
- package/ts-code/3nstorage/routes/owner/param-setter.ts +50 -0
- package/ts-code/3nstorage/routes/owner/put-current-obj.ts +257 -0
- package/ts-code/3nstorage/routes/owner/session-params.ts +50 -0
- package/ts-code/3nstorage/shared.ts +43 -0
- package/ts-code/asmail/asmail-app.ts +91 -0
- package/ts-code/asmail/config.ts +96 -0
- package/ts-code/asmail/delivery.ts +94 -0
- package/ts-code/asmail/resources/delivery-sessions.ts +118 -0
- package/ts-code/asmail/resources/inbox.ts +696 -0
- package/ts-code/asmail/resources/recipients.ts +495 -0
- package/ts-code/asmail/resources/sessions.ts +37 -0
- package/ts-code/asmail/resources/utils.ts +41 -0
- package/ts-code/asmail/retrieval.ts +96 -0
- package/ts-code/asmail/routes/config/param-getter.ts +49 -0
- package/ts-code/asmail/routes/config/param-setter.ts +49 -0
- package/ts-code/asmail/routes/delivery/finalize-delivery.ts +51 -0
- package/ts-code/asmail/routes/delivery/pre-flight.ts +118 -0
- package/ts-code/asmail/routes/delivery/provide-recipient-pubkey.ts +58 -0
- package/ts-code/asmail/routes/delivery/put-metadata.ts +85 -0
- package/ts-code/asmail/routes/delivery/put-obj.ts +152 -0
- package/ts-code/asmail/routes/delivery/restart-session.ts +117 -0
- package/ts-code/asmail/routes/delivery/sender-authorization.ts +81 -0
- package/ts-code/asmail/routes/delivery/start-session.ts +136 -0
- package/ts-code/asmail/routes/retrieval/get-message-meta.ts +50 -0
- package/ts-code/asmail/routes/retrieval/get-message-obj.ts +106 -0
- package/ts-code/asmail/routes/retrieval/list-messages.ts +68 -0
- package/ts-code/asmail/routes/retrieval/remove-message.ts +48 -0
- package/ts-code/cli/index.ts +82 -0
- package/ts-code/cli/run-cmd.ts +81 -0
- package/ts-code/cli/show-sample-config.ts +78 -0
- package/ts-code/cli/signup-cmd.ts +229 -0
- package/ts-code/cli/user-cmd.ts +68 -0
- package/ts-code/cli/utils.ts +105 -0
- package/ts-code/config/default-confs.ts +22 -0
- package/ts-code/config/from-yaml.ts +35 -0
- package/ts-code/config/letsencrypt.ts +77 -0
- package/ts-code/config/signup.ts +137 -0
- package/ts-code/lib-common/admin-api/signup.ts +120 -0
- package/ts-code/lib-common/assert.ts +22 -0
- package/ts-code/lib-common/async-fs-node.ts +656 -0
- package/ts-code/lib-common/buffer-utils.ts +124 -0
- package/ts-code/lib-common/byte-streaming/common.ts +166 -0
- package/ts-code/lib-common/bytes-equal.ts +25 -0
- package/ts-code/lib-common/canonical-address.ts +92 -0
- package/ts-code/lib-common/exceptions/error.ts +44 -0
- package/ts-code/lib-common/exceptions/file.ts +84 -0
- package/ts-code/lib-common/exceptions/http.ts +69 -0
- package/ts-code/lib-common/ipc/generic-ipc.ts +750 -0
- package/ts-code/lib-common/ipc/ws-ipc.ts +117 -0
- package/ts-code/lib-common/json-equal.ts +55 -0
- package/ts-code/lib-common/json-utils.ts +130 -0
- package/ts-code/lib-common/jwkeys.ts +246 -0
- package/ts-code/lib-common/map-of-sets.ts +60 -0
- package/ts-code/lib-common/mid-sigs-NaCl-Ed.ts +677 -0
- package/ts-code/lib-common/objs-on-disk/file-layout.ts +480 -0
- package/ts-code/lib-common/objs-on-disk/obj-file.ts +325 -0
- package/ts-code/lib-common/objs-on-disk/utils.ts +201 -0
- package/ts-code/lib-common/objs-on-disk/v1-obj-file-format.ts +329 -0
- package/ts-code/lib-common/processes.ts +501 -0
- package/ts-code/lib-common/random-node.ts +79 -0
- package/ts-code/lib-common/service-api/3nstorage/owner.ts +559 -0
- package/ts-code/lib-common/service-api/3nstorage/root-route.ts +22 -0
- package/ts-code/lib-common/service-api/asmail/config.ts +144 -0
- package/ts-code/lib-common/service-api/asmail/delivery.ts +250 -0
- package/ts-code/lib-common/service-api/asmail/retrieval.ts +238 -0
- package/ts-code/lib-common/service-api/asmail/root-route.ts +22 -0
- package/ts-code/lib-common/service-api/ipc-api.ts +44 -0
- package/ts-code/lib-common/service-api/locker.ts +44 -0
- package/ts-code/lib-common/service-api/mailer-id/login.ts +80 -0
- package/ts-code/lib-common/service-api/mailer-id/provisioning.ts +64 -0
- package/ts-code/lib-common/service-api/mailer-id/root-route.ts +25 -0
- package/ts-code/lib-common/service-api/pub-key-login.ts +75 -0
- package/ts-code/lib-common/service-api/web-socket-base.ts +87 -0
- package/ts-code/lib-common/session-encryptor.ts +54 -0
- package/ts-code/lib-common/time-window-cache.ts +74 -0
- package/ts-code/lib-common/transferable.d.ts +30 -0
- package/ts-code/lib-server/conf-util.ts +35 -0
- package/ts-code/lib-server/mid-access.ts +45 -0
- package/ts-code/lib-server/middleware/body-parsers.ts +248 -0
- package/ts-code/lib-server/middleware/error-handler.ts +79 -0
- package/ts-code/lib-server/pkl-access.ts +46 -0
- package/ts-code/lib-server/resources/dns.ts +151 -0
- package/ts-code/lib-server/resources/mailerid-authorizer.ts +115 -0
- package/ts-code/lib-server/resources/mem-backed-sessions-factory.ts +132 -0
- package/ts-code/lib-server/resources/server-data-folders.ts +160 -0
- package/ts-code/lib-server/resources/server-key-for-pkl-challenge.ts +41 -0
- package/ts-code/lib-server/resources/sessions.ts +232 -0
- package/ts-code/lib-server/resources/user-files.ts +147 -0
- package/ts-code/lib-server/routes/pub-key-login/complete-exchange.ts +63 -0
- package/ts-code/lib-server/routes/pub-key-login/start-exchange.ts +189 -0
- package/ts-code/lib-server/routes/sessions/close.ts +27 -0
- package/ts-code/lib-server/routes/sessions/mid-auth.ts +77 -0
- package/ts-code/lib-server/routes/sessions/start.ts +116 -0
- package/ts-code/lib-server/web-sockets/app.ts +339 -0
- package/ts-code/lib-server/web-sockets/server-events.ts +63 -0
- package/ts-code/lib.ts +29 -0
- package/ts-code/locker/locker-app.ts +60 -0
- package/ts-code/locker/resources/lockers.ts +17 -0
- package/ts-code/locker/resources/sessions.ts +37 -0
- package/ts-code/locker/routes/create-locker.ts +47 -0
- package/ts-code/mailerId/mailerId-app.ts +107 -0
- package/ts-code/mailerId/resources/certifier.ts +181 -0
- package/ts-code/mailerId/resources/sessions.ts +44 -0
- package/ts-code/mailerId/resources/users.ts +88 -0
- package/ts-code/mailerId/routes/certify.ts +68 -0
- package/ts-code/main.ts +304 -0
- package/ts-code/mock/dns.ts +106 -0
- package/ts-code/mock/mock-as-child-proc.ts +130 -0
- package/ts-code/mock/node-child-ipc.ts +69 -0
- package/ts-code/mock/run-in-proc.ts +111 -0
- package/ts-code/mock/tls-options.ts +73 -0
- package/ts-code/services.ts +138 -0
- package/ts-code/signup/resources/users.ts +429 -0
- package/ts-code/signup/routes/add.ts +65 -0
- package/ts-code/signup/routes/get-available-addresses.ts +49 -0
- package/ts-code/signup/routes/get-available-domains.ts +45 -0
- package/ts-code/signup/signup-app.ts +54 -0
- package/ts-code/signup/signup-tokens.ts +148 -0
- package/ts-code/tests/admin-proto/signup.ts +277 -0
- package/ts-code/tests/jasmine.ts +37 -0
- package/ts-code/tests/libs-for-tests/3nstorage.ts +144 -0
- package/ts-code/tests/libs-for-tests/asmail.ts +220 -0
- package/ts-code/tests/libs-for-tests/assert.ts +22 -0
- package/ts-code/tests/libs-for-tests/async-jasmine.ts +89 -0
- package/ts-code/tests/libs-for-tests/bytes-equal.ts +25 -0
- package/ts-code/tests/libs-for-tests/json-copy.ts +38 -0
- package/ts-code/tests/libs-for-tests/json-equal.ts +55 -0
- package/ts-code/tests/libs-for-tests/mailerid.ts +123 -0
- package/ts-code/tests/libs-for-tests/pkl.ts +127 -0
- package/ts-code/tests/libs-for-tests/server-components/3nstorage.ts +206 -0
- package/ts-code/tests/libs-for-tests/server-components/admin.ts +49 -0
- package/ts-code/tests/libs-for-tests/server-components/asmail.ts +152 -0
- package/ts-code/tests/libs-for-tests/server-components/component.ts +90 -0
- package/ts-code/tests/libs-for-tests/server-components/mailerid.ts +114 -0
- package/ts-code/tests/libs-for-tests/server-runner.ts +82 -0
- package/ts-code/tests/libs-for-tests/spec-assembly.ts +60 -0
- package/ts-code/tests/libs-for-tests/ws-utils.ts +61 -0
- package/ts-code/tests/libs-for-tests/xhr-utils.ts +179 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/archive-obj-ver.ts +100 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/archive-root-ver.ts +91 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/delete-archive-obj-ver.ts +99 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/delete-archive-root-ver.ts +90 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/delete-obj.ts +84 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/events.ts +125 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/get-current-obj.ts +298 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/get-current-root.ts +290 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/get-obj-status.ts +88 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/get-root-status.ts +80 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/put-current-obj.ts +366 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/put-current-root.ts +329 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/trans-cancel-root.ts +86 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/trans-cancel.ts +86 -0
- package/ts-code/tests/protocols/3nstorage/owner/test-utils.ts +72 -0
- package/ts-code/tests/protocols/3nstorage/owner.ts +198 -0
- package/ts-code/tests/protocols/asmail/config.ts +172 -0
- package/ts-code/tests/protocols/asmail/delivery/specs/finalize-delivery.ts +69 -0
- package/ts-code/tests/protocols/asmail/delivery/specs/provide-recipient-pubkey.ts +88 -0
- package/ts-code/tests/protocols/asmail/delivery/specs/put-metadata.ts +102 -0
- package/ts-code/tests/protocols/asmail/delivery/specs/put-obj.ts +156 -0
- package/ts-code/tests/protocols/asmail/delivery/specs/restart-session.ts +97 -0
- package/ts-code/tests/protocols/asmail/delivery/specs/start-session.ts +79 -0
- package/ts-code/tests/protocols/asmail/delivery/test-utils.ts +64 -0
- package/ts-code/tests/protocols/asmail/delivery.ts +56 -0
- package/ts-code/tests/protocols/asmail/retrieval/specs/events.ts +78 -0
- package/ts-code/tests/protocols/asmail/retrieval/specs/get-message-meta.ts +80 -0
- package/ts-code/tests/protocols/asmail/retrieval/specs/get-message-obj.ts +197 -0
- package/ts-code/tests/protocols/asmail/retrieval/specs/list-messages.ts +110 -0
- package/ts-code/tests/protocols/asmail/retrieval/specs/remove-message.ts +74 -0
- package/ts-code/tests/protocols/asmail/retrieval/test-utils.ts +60 -0
- package/ts-code/tests/protocols/asmail/retrieval.ts +115 -0
- package/ts-code/tests/protocols/mailerid.ts +271 -0
- package/ts-code/tests/shared-checks/check-mid-login.ts +164 -0
- package/ts-code/tests/shared-checks/requests.ts +135 -0
- package/ts-code/tsconfig.json +11 -0
- package/ts-code/web3n.d.ts +1068 -0
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright (C) 2016, 2025 3NSoft Inc.
|
|
3
|
+
|
|
4
|
+
This program is free software: you can redistribute it and/or modify it under
|
|
5
|
+
the terms of the GNU General Public License as published by the Free Software
|
|
6
|
+
Foundation, either version 3 of the License, or (at your option) any later
|
|
7
|
+
version.
|
|
8
|
+
|
|
9
|
+
This program is distributed in the hope that it will be useful, but
|
|
10
|
+
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
12
|
+
See the GNU General Public License for more details.
|
|
13
|
+
|
|
14
|
+
You should have received a copy of the GNU General Public License along with
|
|
15
|
+
this program. If not, see <http://www.gnu.org/licenses/>.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { afterAllAsync, beforeAllAsync, itAsync } from '../../libs-for-tests/async-jasmine';
|
|
19
|
+
import { StorageComponent } from '../../libs-for-tests/server-components/3nstorage';
|
|
20
|
+
import { User, doMailerIdLogin } from '../../libs-for-tests/mailerid';
|
|
21
|
+
import { midLoginSpecs } from '../../shared-checks/check-mid-login';
|
|
22
|
+
import { resolve as resolveUrl } from 'url';
|
|
23
|
+
import * as api from '../../../lib-common/service-api/3nstorage/owner';
|
|
24
|
+
import { RequestOpts, doBodylessRequest, doJsonRequest } from '../../libs-for-tests/xhr-utils';
|
|
25
|
+
import { expectNonAcceptanceOfBadSessionId, expectNonAcceptanceOfNonEmptyBody, expectNonAcceptanceOfBadJsonRequest } from '../../shared-checks/requests';
|
|
26
|
+
import { startSession } from './owner/test-utils';
|
|
27
|
+
import { join as joinPaths } from 'path';
|
|
28
|
+
import { addSpecsFrom } from '../../libs-for-tests/spec-assembly';
|
|
29
|
+
import { deepEqual } from '../../libs-for-tests/json-equal';
|
|
30
|
+
|
|
31
|
+
const SPECS_FOLDER = joinPaths(__dirname, './owner/specs');
|
|
32
|
+
|
|
33
|
+
describe('3NStorage owner service', () => {
|
|
34
|
+
|
|
35
|
+
let storageServer: StorageComponent;
|
|
36
|
+
const midServiceDomain = 'localhost';
|
|
37
|
+
const signupDomains = [ 'company.inc', 'personal.net' ];
|
|
38
|
+
let user: User;
|
|
39
|
+
|
|
40
|
+
beforeAllAsync(async () => {
|
|
41
|
+
storageServer = new StorageComponent(signupDomains, midServiceDomain);
|
|
42
|
+
await storageServer.start();
|
|
43
|
+
user = await storageServer.addUser(
|
|
44
|
+
`Bob Johnson @${signupDomains[0]}`);
|
|
45
|
+
await storageServer.stop(false);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
afterAllAsync(async () => {
|
|
49
|
+
if (storageServer.isRunning()) {
|
|
50
|
+
await storageServer.stop();
|
|
51
|
+
} else {
|
|
52
|
+
await storageServer.clean();
|
|
53
|
+
}
|
|
54
|
+
storageServer = (undefined as any);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
describe('session', () => {
|
|
58
|
+
|
|
59
|
+
beforeAllAsync(async () => {
|
|
60
|
+
await storageServer.restart();
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
describe('MailerId login', midLoginSpecs(
|
|
64
|
+
() => resolveUrl(user.storageOwnerUrl, api.midLogin.URL_PART),
|
|
65
|
+
() => user
|
|
66
|
+
));
|
|
67
|
+
|
|
68
|
+
itAsync('closing', async () => {
|
|
69
|
+
const sessionId = await startSession(user);
|
|
70
|
+
|
|
71
|
+
const reqOpts: RequestOpts = {
|
|
72
|
+
url: resolveUrl(user.storageOwnerUrl, api.closeSession.URL_END),
|
|
73
|
+
method: 'POST',
|
|
74
|
+
sessionId
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
// normal closing of a session
|
|
78
|
+
let rep = await doBodylessRequest<void>(reqOpts);
|
|
79
|
+
expect(rep.status).withContext('status for successful closing of session').toBe(200);
|
|
80
|
+
|
|
81
|
+
// repeated call should see invalid session respose
|
|
82
|
+
rep = await doBodylessRequest<void>(reqOpts);
|
|
83
|
+
expect(rep.status).toBe(api.ERR_SC.needAuth);
|
|
84
|
+
|
|
85
|
+
reqOpts.sessionId = await doMailerIdLogin(
|
|
86
|
+
resolveUrl(user.storageOwnerUrl, api.midLogin.URL_PART),
|
|
87
|
+
user
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
await expectNonAcceptanceOfNonEmptyBody(reqOpts);
|
|
91
|
+
|
|
92
|
+
await expectNonAcceptanceOfBadSessionId(reqOpts);
|
|
93
|
+
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
itAsync('dictates parameters to client side', async () => {
|
|
97
|
+
const ownerUrl = user.storageOwnerUrl;
|
|
98
|
+
const sessionId = await startSession(user);
|
|
99
|
+
|
|
100
|
+
const reqOpts: RequestOpts = {
|
|
101
|
+
url: resolveUrl(ownerUrl, api.sessionParams.URL_END),
|
|
102
|
+
method: 'GET',
|
|
103
|
+
responseType: 'json',
|
|
104
|
+
sessionId
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
const rep = await doBodylessRequest<api.sessionParams.Reply>(reqOpts);
|
|
108
|
+
expect(rep.status).withContext('for successful getting of session parameters').toBe(200);
|
|
109
|
+
expect(typeof rep.data.maxChunkSize).toBe('number');
|
|
110
|
+
expect(rep.data.maxChunkSize).not.toBeLessThan(64*1024);
|
|
111
|
+
|
|
112
|
+
await expectNonAcceptanceOfBadSessionId(reqOpts);
|
|
113
|
+
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
function checkParamRoutes(
|
|
119
|
+
paramUrlPart: string, goodValues: any[], badValues: any[],
|
|
120
|
+
maxBodyLen: number
|
|
121
|
+
): () => void {
|
|
122
|
+
return () => {
|
|
123
|
+
|
|
124
|
+
let sessionId: string;
|
|
125
|
+
|
|
126
|
+
beforeAllAsync(async () => {
|
|
127
|
+
sessionId = await startSession(user);
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
itAsync('is readable', async () => {
|
|
131
|
+
|
|
132
|
+
const reqOpts: RequestOpts = {
|
|
133
|
+
url: resolveUrl(user.storageOwnerUrl, paramUrlPart),
|
|
134
|
+
method: 'GET',
|
|
135
|
+
responseType: 'json',
|
|
136
|
+
sessionId
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
const rep = await doBodylessRequest<any>(reqOpts);
|
|
140
|
+
expect(rep.status).withContext('status for reading parameter').toBe(api.PARAM_SC.ok);
|
|
141
|
+
|
|
142
|
+
await expectNonAcceptanceOfBadSessionId(reqOpts);
|
|
143
|
+
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
async function getParam(): Promise<any> {
|
|
147
|
+
const reqOpts: RequestOpts = {
|
|
148
|
+
url: resolveUrl(user.storageOwnerUrl, paramUrlPart),
|
|
149
|
+
method: 'GET',
|
|
150
|
+
responseType: 'json',
|
|
151
|
+
sessionId
|
|
152
|
+
};
|
|
153
|
+
const rep = await doBodylessRequest<any>(reqOpts);
|
|
154
|
+
expect(rep.status).toBe(api.PARAM_SC.ok);
|
|
155
|
+
return rep.data;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
itAsync('is writable', async () => {
|
|
159
|
+
|
|
160
|
+
const initValue = await getParam();
|
|
161
|
+
|
|
162
|
+
const reqOpts: RequestOpts = {
|
|
163
|
+
url: resolveUrl(user.storageOwnerUrl, paramUrlPart),
|
|
164
|
+
method: 'PUT',
|
|
165
|
+
sessionId
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
for (const paramVal of goodValues) {
|
|
169
|
+
|
|
170
|
+
const rep = await doJsonRequest<void>(reqOpts, paramVal);
|
|
171
|
+
expect(rep.status).withContext('status for successful parameter value update').toBe(api.PARAM_SC.ok);
|
|
172
|
+
|
|
173
|
+
const paramOnServer = await getParam();
|
|
174
|
+
expect(deepEqual(paramVal, paramOnServer)).withContext('parameter value on the server should be set to new value').toBe(true);
|
|
175
|
+
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
await expectNonAcceptanceOfBadJsonRequest(
|
|
179
|
+
reqOpts, maxBodyLen, badValues
|
|
180
|
+
);
|
|
181
|
+
|
|
182
|
+
await expectNonAcceptanceOfBadSessionId(reqOpts);
|
|
183
|
+
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
describe(`user's key derivation parameters`, checkParamRoutes(
|
|
190
|
+
api.keyDerivParams.URL_END,
|
|
191
|
+
[],
|
|
192
|
+
[ 1, undefined, 'string', [ 1, 2 ], [] ],
|
|
193
|
+
1024
|
|
194
|
+
));
|
|
195
|
+
|
|
196
|
+
addSpecsFrom(SPECS_FOLDER, () => ({ user, storageServer }));
|
|
197
|
+
|
|
198
|
+
});
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright (C) 2016, 2020, 2025 3NSoft Inc.
|
|
3
|
+
|
|
4
|
+
This program is free software: you can redistribute it and/or modify it under
|
|
5
|
+
the terms of the GNU General Public License as published by the Free Software
|
|
6
|
+
Foundation, either version 3 of the License, or (at your option) any later
|
|
7
|
+
version.
|
|
8
|
+
|
|
9
|
+
This program is distributed in the hope that it will be useful, but
|
|
10
|
+
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
12
|
+
See the GNU General Public License for more details.
|
|
13
|
+
|
|
14
|
+
You should have received a copy of the GNU General Public License along with
|
|
15
|
+
this program. If not, see <http://www.gnu.org/licenses/>.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { afterAllAsync, beforeAllAsync, itAsync } from '../../libs-for-tests/async-jasmine';
|
|
19
|
+
import { ASMailComponent } from '../../libs-for-tests/server-components/asmail';
|
|
20
|
+
import { User, doMailerIdLogin } from '../../libs-for-tests/mailerid';
|
|
21
|
+
import { midLoginSpecs } from '../../shared-checks/check-mid-login';
|
|
22
|
+
import * as api from '../../../lib-common/service-api/asmail/config';
|
|
23
|
+
import { doJsonRequest, RequestOpts, doBodylessRequest } from '../../libs-for-tests/xhr-utils';
|
|
24
|
+
import { expectNonAcceptanceOfBadJsonRequest, expectNonAcceptanceOfNonEmptyBody, expectNonAcceptanceOfBadSessionId } from '../../shared-checks/requests';
|
|
25
|
+
import { resolve as resolveUrl } from 'url';
|
|
26
|
+
import { deepEqual } from '../../libs-for-tests/json-equal';
|
|
27
|
+
|
|
28
|
+
describe('ASMail configuration', () => {
|
|
29
|
+
|
|
30
|
+
let asmailServer: ASMailComponent;
|
|
31
|
+
const midServiceDomain = 'localhost';
|
|
32
|
+
const signupDomains = [ 'company.inc', 'personal.net' ];
|
|
33
|
+
let user1: User;
|
|
34
|
+
let confUrl: string;
|
|
35
|
+
|
|
36
|
+
beforeAllAsync(async () => {
|
|
37
|
+
asmailServer = new ASMailComponent(signupDomains, midServiceDomain);
|
|
38
|
+
await asmailServer.start();
|
|
39
|
+
confUrl = await asmailServer.getConfUrl();
|
|
40
|
+
if (!confUrl.endsWith('/')) { confUrl += '/'; }
|
|
41
|
+
user1 = await asmailServer.addUser(`Bob Johnson @${signupDomains[0]}`);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
afterAllAsync(async () => {
|
|
45
|
+
await asmailServer.stop();
|
|
46
|
+
asmailServer = (undefined as any);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
describe('MailerId login', midLoginSpecs(
|
|
50
|
+
() => resolveUrl(confUrl, api.midLogin.URL_PART),
|
|
51
|
+
() => user1
|
|
52
|
+
));
|
|
53
|
+
|
|
54
|
+
async function startSession(user: User): Promise<string> {
|
|
55
|
+
return await doMailerIdLogin(
|
|
56
|
+
resolveUrl(confUrl, api.midLogin.URL_PART),
|
|
57
|
+
user
|
|
58
|
+
);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function checkParamRoutes(
|
|
62
|
+
paramUrlPart: string, goodValues: any[], badValues: any[],
|
|
63
|
+
maxBodyLen: number
|
|
64
|
+
): () => void {
|
|
65
|
+
return () => {
|
|
66
|
+
|
|
67
|
+
let sessionId: string;
|
|
68
|
+
|
|
69
|
+
beforeAllAsync(async () => {
|
|
70
|
+
sessionId = await startSession(user1);
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
itAsync('is readable', async () => {
|
|
74
|
+
|
|
75
|
+
const reqOpts: RequestOpts = {
|
|
76
|
+
url: resolveUrl(confUrl, paramUrlPart),
|
|
77
|
+
method: 'GET',
|
|
78
|
+
responseType: 'json',
|
|
79
|
+
sessionId
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const rep = await doBodylessRequest<any>(reqOpts);
|
|
83
|
+
expect(rep.status).withContext('status for reading parameter').toBe(api.PARAM_SC.ok);
|
|
84
|
+
|
|
85
|
+
await expectNonAcceptanceOfBadSessionId(reqOpts);
|
|
86
|
+
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
async function getParam(): Promise<any> {
|
|
90
|
+
const reqOpts: RequestOpts = {
|
|
91
|
+
url: resolveUrl(confUrl, paramUrlPart),
|
|
92
|
+
method: 'GET',
|
|
93
|
+
responseType: 'json',
|
|
94
|
+
sessionId
|
|
95
|
+
};
|
|
96
|
+
const rep = await doBodylessRequest<any>(reqOpts);
|
|
97
|
+
expect(rep.status).toBe(api.PARAM_SC.ok);
|
|
98
|
+
return rep.data;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
itAsync('is writable', async () => {
|
|
102
|
+
|
|
103
|
+
const reqOpts: RequestOpts = {
|
|
104
|
+
url: resolveUrl(confUrl, paramUrlPart),
|
|
105
|
+
method: 'PUT',
|
|
106
|
+
sessionId
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
for (const paramVal of goodValues) {
|
|
110
|
+
|
|
111
|
+
const rep = await doJsonRequest<void>(reqOpts, paramVal);
|
|
112
|
+
expect(rep.status).withContext('status for successful parameter value update').toBe(api.PARAM_SC.ok);
|
|
113
|
+
|
|
114
|
+
const paramOnServer = await getParam();
|
|
115
|
+
expect(deepEqual(paramVal, paramOnServer)).withContext('parameter value on the server should be set to new value').toBe(true);
|
|
116
|
+
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
await expectNonAcceptanceOfBadJsonRequest(
|
|
120
|
+
reqOpts, maxBodyLen, badValues
|
|
121
|
+
);
|
|
122
|
+
|
|
123
|
+
await expectNonAcceptanceOfBadSessionId(reqOpts);
|
|
124
|
+
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// TODO add route checking for other parameters,
|
|
131
|
+
// write stricter good/bad values that go into the check
|
|
132
|
+
|
|
133
|
+
describe(`user's initial public key`, checkParamRoutes(
|
|
134
|
+
api.p.initPubKey.URL_END,
|
|
135
|
+
[],
|
|
136
|
+
[ 1, undefined, 'string', [ 1, 2 ], [] ],
|
|
137
|
+
4*1024
|
|
138
|
+
));
|
|
139
|
+
|
|
140
|
+
describe(`invites for anonymous senders`, checkParamRoutes(
|
|
141
|
+
api.p.anonSenderInvites.URL_END,
|
|
142
|
+
[ {} ],
|
|
143
|
+
[ 1, null, undefined, 'string' ],
|
|
144
|
+
40*1024
|
|
145
|
+
));
|
|
146
|
+
|
|
147
|
+
itAsync(`closing session`, async () => {
|
|
148
|
+
const sessionId = await startSession(user1);
|
|
149
|
+
|
|
150
|
+
const reqOpts: RequestOpts = {
|
|
151
|
+
url: resolveUrl(confUrl, api.closeSession.URL_END),
|
|
152
|
+
method: 'POST',
|
|
153
|
+
sessionId
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
// normal closing of a session
|
|
157
|
+
let rep = await doBodylessRequest<void>(reqOpts);
|
|
158
|
+
expect(rep.status).withContext('status for successful closing of session').toBe(200);
|
|
159
|
+
|
|
160
|
+
// repeated call should see invalid session respose
|
|
161
|
+
rep = await doBodylessRequest<void>(reqOpts);
|
|
162
|
+
expect(rep.status).toBe(api.ERR_SC.needAuth);
|
|
163
|
+
|
|
164
|
+
reqOpts.sessionId = await startSession(user1);
|
|
165
|
+
|
|
166
|
+
await expectNonAcceptanceOfNonEmptyBody(reqOpts);
|
|
167
|
+
|
|
168
|
+
await expectNonAcceptanceOfBadSessionId(reqOpts);
|
|
169
|
+
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
});
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright (C) 2016 - 2017, 2025 3NSoft Inc.
|
|
3
|
+
|
|
4
|
+
This program is free software: you can redistribute it and/or modify it under
|
|
5
|
+
the terms of the GNU General Public License as published by the Free Software
|
|
6
|
+
Foundation, either version 3 of the License, or (at your option) any later
|
|
7
|
+
version.
|
|
8
|
+
|
|
9
|
+
This program is distributed in the hope that it will be useful, but
|
|
10
|
+
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
12
|
+
See the GNU General Public License for more details.
|
|
13
|
+
|
|
14
|
+
You should have received a copy of the GNU General Public License along with
|
|
15
|
+
this program. If not, see <http://www.gnu.org/licenses/>.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { beforeEachAsync, itAsync } from '../../../../libs-for-tests/async-jasmine';
|
|
19
|
+
import { SpecDescribe, TestSetup, User, msg, ASMailComponent, startSessionAndSendMsgObjs } from '../test-utils';
|
|
20
|
+
import { doBodylessRequest, RequestOpts } from '../../../../libs-for-tests/xhr-utils';
|
|
21
|
+
import { resolve as resolveUrl } from 'url';
|
|
22
|
+
import { completion as api } from '../../../../../lib-common/service-api/asmail/delivery';
|
|
23
|
+
import { expectNonAcceptanceOfBadSessionId, expectNonAcceptanceOfNonEmptyBody, UNAUTHORIZED_STATUS } from '../../../../shared-checks/requests';
|
|
24
|
+
import { DeliveryInfo } from '../../../../libs-for-tests/asmail';
|
|
25
|
+
|
|
26
|
+
export const specs: SpecDescribe = {
|
|
27
|
+
description: `Request to complete message delivery`
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
specs.definition = (setup: () => TestSetup) => (() => {
|
|
31
|
+
|
|
32
|
+
let user2: User;
|
|
33
|
+
let deliveryUrl: string;
|
|
34
|
+
let asmailServer: ASMailComponent;
|
|
35
|
+
let sessInfo: DeliveryInfo;
|
|
36
|
+
let reqOpts: RequestOpts;
|
|
37
|
+
|
|
38
|
+
beforeEachAsync(async () => {
|
|
39
|
+
user2 = setup().user2;
|
|
40
|
+
asmailServer = setup().asmailServer;
|
|
41
|
+
deliveryUrl = await asmailServer.getDeliveryUrl();
|
|
42
|
+
sessInfo = await startSessionAndSendMsgObjs(deliveryUrl, user2.id, msg);
|
|
43
|
+
reqOpts = {
|
|
44
|
+
url: resolveUrl(deliveryUrl, api.URL_END),
|
|
45
|
+
method: 'POST',
|
|
46
|
+
sessionId: sessInfo.sessionId
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
itAsync(`marks message as completely delivered`, async () => {
|
|
51
|
+
expect(await asmailServer.msgExists(user2.id, sessInfo.msgId, false)).withContext('message is known to be in delivery').toBeTruthy();
|
|
52
|
+
|
|
53
|
+
let rep = await doBodylessRequest<void>(reqOpts);
|
|
54
|
+
expect(rep.status).withContext('normal end of message delivering session').toBe(api.SC.ok);
|
|
55
|
+
expect(await asmailServer.msgExists(user2.id, sessInfo.msgId, true, msg)).withContext('message must now be delivered').toBeTruthy();
|
|
56
|
+
|
|
57
|
+
// duplicate should not work, as session is already closed
|
|
58
|
+
rep = await doBodylessRequest<void>(reqOpts);
|
|
59
|
+
expect(rep.status).toBe(UNAUTHORIZED_STATUS);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
itAsync('adequately responds to fuzzing', async () => {
|
|
63
|
+
await expectNonAcceptanceOfNonEmptyBody(reqOpts);
|
|
64
|
+
await expectNonAcceptanceOfBadSessionId(reqOpts);
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
Object.freeze(exports);
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright (C) 2016 - 2017, 2025 3NSoft Inc.
|
|
3
|
+
|
|
4
|
+
This program is free software: you can redistribute it and/or modify it under
|
|
5
|
+
the terms of the GNU General Public License as published by the Free Software
|
|
6
|
+
Foundation, either version 3 of the License, or (at your option) any later
|
|
7
|
+
version.
|
|
8
|
+
|
|
9
|
+
This program is distributed in the hope that it will be useful, but
|
|
10
|
+
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
12
|
+
See the GNU General Public License for more details.
|
|
13
|
+
|
|
14
|
+
You should have received a copy of the GNU General Public License along with
|
|
15
|
+
this program. If not, see <http://www.gnu.org/licenses/>.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { beforeAllAsync, itAsync } from '../../../../libs-for-tests/async-jasmine';
|
|
19
|
+
import { SpecDescribe, TestSetup, User } from '../test-utils';
|
|
20
|
+
import { doBodylessRequest, RequestOpts } from '../../../../libs-for-tests/xhr-utils';
|
|
21
|
+
import { resolve as resolveUrl } from 'url';
|
|
22
|
+
import { initPubKey as api } from '../../../../../lib-common/service-api/asmail/delivery';
|
|
23
|
+
import { expectNonAcceptanceOfBadSessionId, UNAUTHORIZED_STATUS } from '../../../../shared-checks/requests';
|
|
24
|
+
import { startMsgDeliverySession } from '../../../../libs-for-tests/asmail';
|
|
25
|
+
import { copy } from '../../../../libs-for-tests/json-copy';
|
|
26
|
+
|
|
27
|
+
export const specs: SpecDescribe = {
|
|
28
|
+
description: `Request to get recipient's registered initial key`
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
specs.definition = (setup: () => TestSetup) => (() => {
|
|
32
|
+
|
|
33
|
+
let deliveryUrl: string;
|
|
34
|
+
let user1: User;
|
|
35
|
+
let user2: User;
|
|
36
|
+
let baseReqOpts: RequestOpts;
|
|
37
|
+
|
|
38
|
+
beforeAllAsync(async () => {
|
|
39
|
+
user1 = setup().user1;
|
|
40
|
+
user2 = setup().user2;
|
|
41
|
+
deliveryUrl = await setup().asmailServer.getDeliveryUrl();
|
|
42
|
+
baseReqOpts = {
|
|
43
|
+
url: resolveUrl(deliveryUrl, api.URL_END),
|
|
44
|
+
method: 'GET',
|
|
45
|
+
responseType: 'json'
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
itAsync(`returns certificates, registered by recipient`, async () => {
|
|
50
|
+
|
|
51
|
+
const sessInfo = await startMsgDeliverySession(
|
|
52
|
+
deliveryUrl, { recipient: user2.id });
|
|
53
|
+
const reqOpts = copy(baseReqOpts);
|
|
54
|
+
reqOpts.sessionId = sessInfo.sessionId;
|
|
55
|
+
|
|
56
|
+
const rep = await doBodylessRequest<api.Reply>(reqOpts);
|
|
57
|
+
expect(rep.status).withContext('status for successfully getting a key').toBe(api.SC.ok);
|
|
58
|
+
|
|
59
|
+
// TODO add check of certs, together with adding check in setting pkey
|
|
60
|
+
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
itAsync(`returns error, when recipient registered no certs`, async () => {
|
|
64
|
+
|
|
65
|
+
// recipient doesn't have initial public key registered
|
|
66
|
+
const sessInfo = await startMsgDeliverySession(
|
|
67
|
+
deliveryUrl, { recipient: user1.id });
|
|
68
|
+
const reqOpts = copy(baseReqOpts);
|
|
69
|
+
reqOpts.sessionId = sessInfo.sessionId;
|
|
70
|
+
|
|
71
|
+
let rep = await doBodylessRequest<api.Reply>(reqOpts);
|
|
72
|
+
expect(rep.status).withContext('status for no key registered with server').toBe(api.SC.pkeyNotRegistered);
|
|
73
|
+
|
|
74
|
+
// session is closed, when there is no key, so repeat request is denied
|
|
75
|
+
rep = await doBodylessRequest<api.Reply>(reqOpts);
|
|
76
|
+
expect(rep.status).withContext('status for closed session').toBe(UNAUTHORIZED_STATUS);
|
|
77
|
+
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
itAsync('adequately responds to fuzzing', async () => {
|
|
81
|
+
|
|
82
|
+
await expectNonAcceptanceOfBadSessionId(baseReqOpts);
|
|
83
|
+
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
Object.freeze(exports);
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright (C) 2016 - 2017, 2025 3NSoft Inc.
|
|
3
|
+
|
|
4
|
+
This program is free software: you can redistribute it and/or modify it under
|
|
5
|
+
the terms of the GNU General Public License as published by the Free Software
|
|
6
|
+
Foundation, either version 3 of the License, or (at your option) any later
|
|
7
|
+
version.
|
|
8
|
+
|
|
9
|
+
This program is distributed in the hope that it will be useful, but
|
|
10
|
+
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
12
|
+
See the GNU General Public License for more details.
|
|
13
|
+
|
|
14
|
+
You should have received a copy of the GNU General Public License along with
|
|
15
|
+
this program. If not, see <http://www.gnu.org/licenses/>.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { beforeEachAsync, itAsync } from '../../../../libs-for-tests/async-jasmine';
|
|
19
|
+
import { SpecDescribe, ASMailComponent, TestSetup, User, msg } from '../test-utils';
|
|
20
|
+
import { doJsonRequest, RequestOpts } from '../../../../libs-for-tests/xhr-utils';
|
|
21
|
+
import { resolve as resolveUrl } from 'url';
|
|
22
|
+
import { msgMeta as api, ERR_SC } from '../../../../../lib-common/service-api/asmail/delivery';
|
|
23
|
+
import { expectNonAcceptanceOfBadSessionId, expectNonAcceptanceOfBadJsonRequest } from '../../../../shared-checks/requests';
|
|
24
|
+
import { startMsgDeliverySession } from '../../../../libs-for-tests/asmail';
|
|
25
|
+
|
|
26
|
+
export const specs: SpecDescribe = {
|
|
27
|
+
description: `Request to put message's metadata`
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
specs.definition = (setup: () => TestSetup) => (() => {
|
|
31
|
+
|
|
32
|
+
let user2: User;
|
|
33
|
+
let reqOpts: RequestOpts;
|
|
34
|
+
let asmailServer: ASMailComponent;
|
|
35
|
+
|
|
36
|
+
beforeEachAsync(async () => {
|
|
37
|
+
user2 = setup().user2;
|
|
38
|
+
asmailServer = setup().asmailServer;
|
|
39
|
+
const deliveryUrl = await asmailServer.getDeliveryUrl();
|
|
40
|
+
const sessInfo = await startMsgDeliverySession(
|
|
41
|
+
deliveryUrl, { recipient: user2.id });
|
|
42
|
+
reqOpts = {
|
|
43
|
+
url: resolveUrl(deliveryUrl, api.URL_END),
|
|
44
|
+
method: 'PUT',
|
|
45
|
+
responseType: 'json',
|
|
46
|
+
sessionId: sessInfo.sessionId
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
itAsync('starts actual message delivery, returning message id', async () => {
|
|
51
|
+
|
|
52
|
+
const req: api.Request = {
|
|
53
|
+
pid: msg.cryptoMeta.pid,
|
|
54
|
+
objIds: [ msg.msgObjs[0].objId, msg.msgObjs[1].objId ]
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const rep = await doJsonRequest<api.Reply>(reqOpts, req);
|
|
58
|
+
expect(rep.status).withContext('status for normal meta acceptance and issue of a corresponding message id').toBe(api.SC.ok);
|
|
59
|
+
expect(typeof rep.data.msgId).toBe('string');
|
|
60
|
+
const msgId = rep.data.msgId;
|
|
61
|
+
expect(msgId.length).toBeGreaterThan(0);
|
|
62
|
+
expect(typeof rep.data.maxChunkSize).toBe('number');
|
|
63
|
+
expect(rep.data.maxChunkSize).not.toBeLessThan(64*1024);
|
|
64
|
+
expect(await asmailServer.msgExists(user2.id, msgId, false)).withContext('message is known to be in delivery').toBeTruthy();
|
|
65
|
+
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
itAsync('is not allowing message with object ids that are either same, or have chars not from base64 url-safe alphabet', async () => {
|
|
69
|
+
|
|
70
|
+
// request with object ids, exact to letter case
|
|
71
|
+
const req: api.Request = {
|
|
72
|
+
pid: msg.cryptoMeta.pid,
|
|
73
|
+
objIds: [ msg.msgObjs[0].objId, msg.msgObjs[0].objId.toLowerCase() ]
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
let rep = await doJsonRequest<api.Reply>(reqOpts, req);
|
|
77
|
+
expect(rep.status).withContext('same object ids are not allowed').toBe(ERR_SC.malformed);
|
|
78
|
+
|
|
79
|
+
req.objIds = [ msg.msgObjs[0].objId, msg.msgObjs[0].objId+'+as' ];
|
|
80
|
+
rep = await doJsonRequest<api.Reply>(reqOpts, req);
|
|
81
|
+
expect(rep.status).withContext('object ids, equal to letter case, are not allowed').toBe(ERR_SC.malformed);
|
|
82
|
+
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
itAsync('adequately responds to fuzzing', async () => {
|
|
86
|
+
|
|
87
|
+
// bad JSON's
|
|
88
|
+
const REQ_SIZE_LIMIT = 16*1024;
|
|
89
|
+
const badJSONs: any[] = [ null, undefined, 1, 'string',
|
|
90
|
+
// XXX add meta checks to screen out these
|
|
91
|
+
// [1,2], [], { a:1, b:2 }
|
|
92
|
+
];
|
|
93
|
+
await expectNonAcceptanceOfBadJsonRequest(reqOpts, REQ_SIZE_LIMIT,
|
|
94
|
+
badJSONs);
|
|
95
|
+
|
|
96
|
+
await expectNonAcceptanceOfBadSessionId(reqOpts, true);
|
|
97
|
+
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
Object.freeze(exports);
|