├── .gitbook.yaml
├── .github
├── composite
│ ├── setup_entrypoints
│ │ └── action.yaml
│ └── verify_cli_tags
│ │ └── action.yaml
├── dependabot.yml
└── workflows
│ ├── autobug.yaml
│ ├── c_release.yml
│ ├── c_unit_tests.yaml
│ ├── codeql.yml
│ ├── cppcheck.yml
│ ├── dependency-review.yml
│ ├── dockerhub_e2e_all_base_runtime.yml
│ ├── dockerhub_sshnpd.yml
│ ├── e2e_all.yaml
│ ├── end2end_tests.yaml
│ ├── gitbook.yaml
│ ├── multibuild.yaml
│ ├── prod_tests.yaml
│ ├── promote_canary.yml
│ ├── scorecards.yml
│ └── unit_tests.yaml
├── .gitignore
├── .vscode
├── launch.json
└── settings.json
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── apps
└── admin
│ ├── admin_api
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── bin
│ │ └── np_admin.dart
│ ├── lib
│ │ └── src
│ │ │ └── expose_apis.dart
│ ├── pubspec.lock
│ ├── pubspec.yaml
│ └── test
│ │ └── policy_api_test.dart
│ └── webapp
│ ├── .gitignore
│ ├── .npmrc
│ ├── .vscode
│ └── extensions.json
│ ├── README.md
│ ├── index.html
│ ├── jsconfig.json
│ ├── package-lock.json
│ ├── package.json
│ ├── public
│ └── vite.svg
│ ├── src
│ ├── App.svelte
│ ├── app.css
│ ├── assets
│ │ ├── atsign.svg
│ │ ├── noports.avif
│ │ ├── noports.jpg
│ │ └── svelte.svg
│ ├── lib
│ │ ├── Child.svelte
│ │ ├── InPlaceEdit.svelte
│ │ └── PolicyUserGroups.svelte
│ ├── main.js
│ ├── routes
│ │ └── +layout.js
│ └── vite-env.d.ts
│ ├── svelte.config.js
│ └── vite.config.js
├── code_of_conduct.md
├── docs
├── .gitbook
│ ├── assets
│ │ ├── AWS_Advanced_details.PNG
│ │ ├── AWS_user_data.PNG
│ │ ├── Azure_Custom_data.PNG
│ │ ├── CleanShot 2024-12-16 at 14.24.10@2x.png
│ │ ├── CleanShot 2025-01-20 at 16.44.12@2x.png
│ │ ├── CleanShot 2025-01-20 at 16.44.39@2x.png
│ │ ├── CleanShot 2025-01-20 at 16.45.20@2x.png
│ │ ├── CleanShot 2025-01-20 at 16.45.45@2x.png
│ │ ├── CleanShot 2025-01-20 at 16.48.11@2x.png
│ │ ├── CleanShot 2025-01-20 at 16.48.41@2x.png
│ │ ├── CleanShot 2025-01-20 at 16.49.01@2x (1).png
│ │ ├── CleanShot 2025-01-20 at 16.49.01@2x.png
│ │ ├── CleanShot 2025-01-20 at 17.14.18@2x.png
│ │ ├── CleanShot 2025-01-20 at 17.14.52@2x.png
│ │ ├── CleanShot 2025-01-20 at 17.15.11@2x.png
│ │ ├── CleanShot 2025-01-20 at 17.21.16@2x.png
│ │ ├── CleanShot 2025-01-20 at 17.23.37@2x.png
│ │ ├── CleanShot 2025-01-20 at 17.24.43@2x.png
│ │ ├── CleanShot 2025-01-20 at 17.26.37@2x.png
│ │ ├── CleanShot 2025-01-20 at 17.27.40@2x.png
│ │ ├── CleanShot 2025-01-20 at 17.28.20@2x.png
│ │ ├── CleanShot 2025-01-20 at 17.29.22@2x.png
│ │ ├── CleanShot 2025-01-20 at 17.32.07@2x.png
│ │ ├── CleanShot 2025-01-20 at 17.33.42@2x.png
│ │ ├── CleanShot 2025-01-20 at 17.34.46@2x.png
│ │ ├── CleanShot 2025-01-20 at 17.43.42@2x.png
│ │ ├── CleanShot 2025-01-20 at 17.44.52@2x.png
│ │ ├── CleanShot 2025-01-20 at 17.46.42@2x.png
│ │ ├── CleanShot 2025-01-20 at 17.50.56@2x.png
│ │ ├── CleanShot 2025-01-20 at 17.51.22@2x.png
│ │ ├── CleanShot 2025-01-20 at 18.42.07@2x.png
│ │ ├── CleanShot 2025-01-20 at 18.42.40@2x.png
│ │ ├── CleanShot 2025-01-20 at 18.46.29@2x.png
│ │ ├── CleanShot 2025-03-11 at 16.31.23@2x (1).png
│ │ ├── CleanShot 2025-03-11 at 16.31.23@2x.png
│ │ ├── GCP_Advanced_options.PNG
│ │ ├── GCP_Management.PNG
│ │ ├── GCP_Startup_script.PNG
│ │ ├── NoPorts Policy Diagrams.png
│ │ ├── NoPorts-Connection-Diagram.png
│ │ ├── OCI_CloudInitScript.PNG
│ │ ├── OCI_PasteCloudInit.PNG
│ │ ├── OCI_ShowAdvancedOptions.PNG
│ │ ├── Screenshot 2024-03-12 at 12.57.14.png
│ │ ├── Screenshot 2024-07-03 at 19.52.04.png
│ │ ├── Screenshot from 2024-04-29 18-05-59.png
│ │ ├── Screenshot from 2024-04-29 18-09-27.png
│ │ ├── atPlanes.png
│ │ ├── atPlatform Diagram.png
│ │ ├── overview.png
│ │ ├── smb.png
│ │ └── smba.png
│ └── includes
│ │ ├── activate-cli-client-unix.md
│ │ ├── activate-cli-device-unix.md
│ │ ├── activate-cli-device-windows.md
│ │ ├── apkam-1-unix.md
│ │ ├── apkam-2-unix.md
│ │ ├── apkam-2-windows.md
│ │ ├── apkam-3-unix.md
│ │ ├── apkam-3-windows.md
│ │ ├── client-installation-complete.md
│ │ ├── dart-binary-releases-table.md
│ │ ├── desktop-app-release-table.md
│ │ ├── device-activate-preamble.md
│ │ ├── device-warning-setup-client-first.md
│ │ ├── full-install-overview.md
│ │ ├── get-atsigns-from-reg-warning.md
│ │ ├── if-youve-activated-your-cl....md
│ │ ├── installation-complete-visit-usage.md
│ │ ├── installation-legend.md
│ │ ├── linux-macos-release-table.md
│ │ ├── mac-linux-full-install-video.md
│ │ ├── universal.sh-download-command (1).md
│ │ ├── universal.sh-download-command.md
│ │ ├── universal.sh-execute (1).md
│ │ ├── universal.sh-execute-activate-only.md
│ │ ├── universal.sh-execute-device-detail.md
│ │ ├── universal.sh-execute.md
│ │ ├── universal.sh-preamble.md
│ │ ├── unversal.sh-execute-client-details.md
│ │ ├── windows-activate-1.md
│ │ ├── windows-activate-2.md
│ │ ├── windows-activate-3.md
│ │ ├── windows-activate-4.md
│ │ └── windows-download-installer.md
├── README.md
├── SUMMARY.md
├── developer-notes
│ └── AtsignDataPlane.png
├── installation-faq
│ ├── README.md
│ ├── activating-your-atsigns.md
│ ├── how-to-generate-ssh-keys.md
│ ├── installation-details.md
│ ├── reuse-your-client-atsign-on-another-machine
│ │ ├── README.md
│ │ ├── new-machine-activate-from-the-command-line.md
│ │ ├── new-machine-activate-from-the-windows-installer.md
│ │ ├── old-machine-activate-from-the-command-line.md
│ │ └── old-machine-activate-from-the-windows-installer.md
│ └── why-activate-the-device-atsign-on-the-client.md
├── installation
│ ├── README.md
│ ├── advanced-installation-guides
│ │ ├── README.md
│ │ ├── client-installation-sshnp.md
│ │ ├── client-upgrade-sshnp.md
│ │ ├── device-installation-sshnpd
│ │ │ ├── README.md
│ │ │ ├── headless.md
│ │ │ ├── standalone-binaries.md
│ │ │ ├── systemd-unit.md
│ │ │ └── tmux-session.md
│ │ ├── device-upgrade-sshnpd.md
│ │ └── installs-at-scale.md
│ ├── available-releases.md
│ ├── cloud-installation-guides
│ │ ├── README.md
│ │ ├── automated-installation-on-amazon-web-services-aws.md
│ │ ├── automated-installation-on-google-cloud-platform-gcp.md
│ │ ├── automated-installation-on-microsoft-azure.md
│ │ └── automated-installation-on-oracle-cloud-infrastructure-oci.md
│ ├── custom-os-device-installs
│ │ ├── README.md
│ │ └── ipfire.md
│ ├── linux
│ │ ├── README.md
│ │ ├── cli-client.md
│ │ ├── device-hidden.md
│ │ └── device.md
│ ├── macos
│ │ ├── README.md
│ │ ├── cli-client.md
│ │ ├── desktop.md
│ │ ├── device-hidden.md
│ │ └── device.md
│ ├── openwrt-installation-guide.md
│ ├── quick-start-for-macos-and-windows.md
│ └── windows
│ │ ├── README.md
│ │ ├── cli-client.md
│ │ ├── desktop.md
│ │ └── device.md
├── integrations
│ ├── README.md
│ ├── integrate-with-ssh-config.md
│ └── putty-config.md
├── reference
│ ├── faq.md
│ ├── how-it-works.md
│ ├── policy.md
│ ├── sequence-diagram.md
│ └── underthehood.md
├── usage
│ ├── README.md
│ ├── basic-usage-1
│ │ ├── README.md
│ │ └── additional-configuration.md
│ ├── basic-usage
│ │ ├── README.md
│ │ └── additional-configuration.md
│ └── sshnpd-configuration
│ │ ├── README.md
│ │ └── daemon-additional-configuration.md
└── use-cases
│ ├── be-your-own-vpn.md
│ ├── rdp.md
│ ├── sftp.md
│ ├── smb.md
│ ├── ssh.md
│ └── web-server.md
├── images
├── image1.png
├── image2.png
├── image3.png
├── image4.png
├── image5.png
├── image6.png
└── image7.png
├── melos.yaml
├── packages
├── c
│ ├── .clang-format
│ ├── .clang-tidy
│ ├── .clangd
│ ├── .gitignore
│ ├── 3rdparty
│ │ └── argparse
│ │ │ ├── CMakeLists.txt
│ │ │ ├── README.md
│ │ │ ├── include
│ │ │ └── argparse
│ │ │ │ ├── LICENSE
│ │ │ │ └── argparse.h
│ │ │ └── src
│ │ │ └── argparse.c
│ ├── CMakeLists.txt
│ ├── CMakePresets.json
│ ├── LICENSE
│ ├── cmake
│ │ ├── CPackSetup.cmake
│ │ ├── CPackSourceDeps.cmake
│ │ └── atsdk.cmake
│ ├── graceful-shutdown-tool
│ │ ├── CMakeLists.txt
│ │ ├── README.md
│ │ └── main.c
│ ├── just.template.env
│ ├── justfile
│ ├── srv
│ │ ├── CMakeLists.txt
│ │ ├── include
│ │ │ └── srv
│ │ │ │ ├── params.h
│ │ │ │ ├── side.h
│ │ │ │ └── srv.h
│ │ ├── src
│ │ │ ├── main.c
│ │ │ ├── params.c
│ │ │ ├── side.c
│ │ │ └── srv.c
│ │ └── tests
│ │ │ ├── CMakeLists.txt
│ │ │ └── test_stream_encrypt.c
│ ├── sshnpd
│ │ ├── CHANGELOG.md
│ │ ├── CMakeLists.txt
│ │ ├── README.md
│ │ ├── include
│ │ │ └── sshnpd
│ │ │ │ ├── daemon.h
│ │ │ │ ├── device_info.h
│ │ │ │ ├── file_utils.h
│ │ │ │ ├── handle_npt_request.h
│ │ │ │ ├── handle_ping.h
│ │ │ │ ├── handle_ssh_request.h
│ │ │ │ ├── handle_sshpublickey.h
│ │ │ │ ├── handler_commons.h
│ │ │ │ ├── params.h
│ │ │ │ ├── permitopen.h
│ │ │ │ ├── run_srv_process.h
│ │ │ │ ├── sshnpd.h
│ │ │ │ └── version.h
│ │ ├── src
│ │ │ ├── at_activate.c
│ │ │ ├── daemon.c
│ │ │ ├── daemon_utils.c
│ │ │ ├── device_info.c
│ │ │ ├── file_utils.c
│ │ │ ├── handle_npt_request.c
│ │ │ ├── handle_ping.c
│ │ │ ├── handle_ssh_request.c
│ │ │ ├── handle_sshpublickey.c
│ │ │ ├── handler_commons.c
│ │ │ ├── main.c
│ │ │ ├── params.c
│ │ │ ├── permitopen.c
│ │ │ └── run_srv_process.c
│ │ ├── tests
│ │ │ ├── CMakeLists.txt
│ │ │ ├── test_permit_open.c
│ │ │ └── test_sshnpd_params.c
│ │ └── tools
│ │ │ ├── Dockerfile.musl
│ │ │ ├── Dockerfile.package
│ │ │ └── debug_build.sh
│ └── valgrind-test-scenarios.md
├── dart
│ ├── noports_core
│ │ ├── .gitignore
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── analysis_options.yaml
│ │ ├── lib
│ │ │ ├── admin.dart
│ │ │ ├── npa.dart
│ │ │ ├── npt.dart
│ │ │ ├── src
│ │ │ │ ├── admin
│ │ │ │ │ ├── impl.dart
│ │ │ │ │ ├── interface.dart
│ │ │ │ │ ├── models.dart
│ │ │ │ │ └── models.g.dart
│ │ │ │ ├── common
│ │ │ │ │ ├── at_ssh_key_util
│ │ │ │ │ │ ├── at_ssh_key_util.dart
│ │ │ │ │ │ ├── dart_ssh_key_util.dart
│ │ │ │ │ │ └── local_ssh_key_util.dart
│ │ │ │ │ ├── default_args.dart
│ │ │ │ │ ├── features.dart
│ │ │ │ │ ├── handle_server_events.dart
│ │ │ │ │ ├── io_types.dart
│ │ │ │ │ ├── mixins
│ │ │ │ │ │ ├── async_completion.dart
│ │ │ │ │ │ └── async_initialization.dart
│ │ │ │ │ ├── noports_exception.dart
│ │ │ │ │ ├── openssh_binary_path.dart
│ │ │ │ │ ├── streaming_logging_handler.dart
│ │ │ │ │ ├── types.dart
│ │ │ │ │ └── validation_utils.dart
│ │ │ │ ├── npa
│ │ │ │ │ ├── npa.dart
│ │ │ │ │ ├── npa_impl.dart
│ │ │ │ │ ├── npa_params.dart
│ │ │ │ │ └── npa_rpcs.dart
│ │ │ │ ├── npt
│ │ │ │ │ └── npt.dart
│ │ │ │ ├── srv
│ │ │ │ │ ├── srv.dart
│ │ │ │ │ └── srv_impl.dart
│ │ │ │ ├── srvd
│ │ │ │ │ ├── build_env.dart
│ │ │ │ │ ├── signature_verifying_socket_authenticator.dart
│ │ │ │ │ ├── socket_connector.dart
│ │ │ │ │ ├── srvd.dart
│ │ │ │ │ ├── srvd_impl.dart
│ │ │ │ │ └── srvd_params.dart
│ │ │ │ ├── sshnp
│ │ │ │ │ ├── impl
│ │ │ │ │ │ ├── notification_request_message.dart
│ │ │ │ │ │ ├── sshnp_dart_pure_impl.dart
│ │ │ │ │ │ └── sshnp_openssh_local_impl.dart
│ │ │ │ │ ├── models
│ │ │ │ │ │ ├── config_file_repository.dart
│ │ │ │ │ │ ├── config_key_repository.dart
│ │ │ │ │ │ ├── sshnp_arg.dart
│ │ │ │ │ │ ├── sshnp_device_list.dart
│ │ │ │ │ │ ├── sshnp_params.dart
│ │ │ │ │ │ └── sshnp_result.dart
│ │ │ │ │ ├── sshnp.dart
│ │ │ │ │ ├── sshnp_core.dart
│ │ │ │ │ └── util
│ │ │ │ │ │ ├── ephemeral_port_binder.dart
│ │ │ │ │ │ ├── srvd_channel
│ │ │ │ │ │ ├── notification_request_message.dart
│ │ │ │ │ │ ├── srvd_channel.dart
│ │ │ │ │ │ ├── srvd_dart_channel.dart
│ │ │ │ │ │ └── srvd_exec_channel.dart
│ │ │ │ │ │ ├── ssh_session_handler
│ │ │ │ │ │ ├── dart_ssh_session_handler.dart
│ │ │ │ │ │ ├── openssh_ssh_session_handler.dart
│ │ │ │ │ │ └── ssh_session_handler.dart
│ │ │ │ │ │ ├── sshnp_ssh_key_handler
│ │ │ │ │ │ ├── sshnp_dart_ssh_key_handler.dart
│ │ │ │ │ │ ├── sshnp_local_ssh_key_handler.dart
│ │ │ │ │ │ └── sshnp_ssh_key_handler.dart
│ │ │ │ │ │ └── sshnpd_channel
│ │ │ │ │ │ ├── sshnpd_channel.dart
│ │ │ │ │ │ └── sshnpd_default_channel.dart
│ │ │ │ ├── sshnpd
│ │ │ │ │ ├── sshnpd.dart
│ │ │ │ │ ├── sshnpd_impl.dart
│ │ │ │ │ └── sshnpd_params.dart
│ │ │ │ └── version.dart
│ │ │ ├── srv.dart
│ │ │ ├── srvd.dart
│ │ │ ├── sshnp.dart
│ │ │ ├── sshnp_foundation.dart
│ │ │ ├── sshnp_params.dart
│ │ │ ├── sshnpd.dart
│ │ │ ├── utils.dart
│ │ │ └── version.dart
│ │ ├── pubspec.yaml
│ │ └── test
│ │ │ ├── srvd
│ │ │ ├── notification_subscription_test.dart
│ │ │ ├── signature_verifying_socket_authenticator_test.dart
│ │ │ └── srvdutil_test.dart
│ │ │ ├── sshnp
│ │ │ ├── models
│ │ │ │ ├── config_file_repository_test.dart
│ │ │ │ ├── config_key_repository_test.dart
│ │ │ │ ├── sshnp_arg_test.dart
│ │ │ │ ├── sshnp_device_list_test.dart
│ │ │ │ ├── sshnp_params_test.dart
│ │ │ │ └── sshnp_result_test.dart
│ │ │ ├── sshnp_core_constants.dart
│ │ │ ├── sshnp_core_mocks.dart
│ │ │ ├── sshnp_core_test.dart
│ │ │ ├── sshnp_mocks.dart
│ │ │ ├── sshnp_test.dart
│ │ │ └── util
│ │ │ │ ├── srvd_channel
│ │ │ │ ├── srvd_channel_mocks.dart
│ │ │ │ ├── srvd_channel_test.dart
│ │ │ │ ├── srvd_dart_channel_test.dart
│ │ │ │ └── srvd_exec_channel_test.dart
│ │ │ │ ├── ssh_session_handler
│ │ │ │ ├── openssh_ssh_session_handler_mocks.dart
│ │ │ │ ├── openssh_ssh_session_handler_test.dart
│ │ │ │ └── ssh_session_handler_test.dart
│ │ │ │ ├── sshnp_ssh_key_handler
│ │ │ │ ├── sshnp_dart_ssh_key_handler_test.dart
│ │ │ │ ├── sshnp_local_ssh_key_handler_test.dart
│ │ │ │ ├── sshnp_ssh_key_handler_mocks.dart
│ │ │ │ └── sshnp_ssh_key_handler_test.dart
│ │ │ │ └── sshnpd_channel
│ │ │ │ ├── sshnpd_channel_mocks.dart
│ │ │ │ ├── sshnpd_channel_test.dart
│ │ │ │ └── sshnpd_default_channel_test.dart
│ │ │ ├── sshnpd
│ │ │ └── sshnpd_params_test.dart
│ │ │ └── version_test.dart
│ ├── npt_flutter
│ │ ├── .gitignore
│ │ ├── .metadata
│ │ ├── README.md
│ │ ├── analysis_options.yaml
│ │ ├── android
│ │ │ ├── .gitignore
│ │ │ ├── app
│ │ │ │ ├── build.gradle
│ │ │ │ └── src
│ │ │ │ │ ├── debug
│ │ │ │ │ └── AndroidManifest.xml
│ │ │ │ │ ├── main
│ │ │ │ │ ├── AndroidManifest.xml
│ │ │ │ │ ├── kotlin
│ │ │ │ │ │ └── com
│ │ │ │ │ │ │ └── example
│ │ │ │ │ │ │ └── npt_flutter
│ │ │ │ │ │ │ └── MainActivity.kt
│ │ │ │ │ └── res
│ │ │ │ │ │ ├── drawable-v21
│ │ │ │ │ │ └── launch_background.xml
│ │ │ │ │ │ ├── drawable
│ │ │ │ │ │ └── launch_background.xml
│ │ │ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ │ │ └── launcher_icon.xml
│ │ │ │ │ │ ├── mipmap-hdpi
│ │ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ │ └── launcher_icon.png
│ │ │ │ │ │ ├── mipmap-mdpi
│ │ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ │ └── launcher_icon.png
│ │ │ │ │ │ ├── mipmap-xhdpi
│ │ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ │ └── launcher_icon.png
│ │ │ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ │ └── launcher_icon.png
│ │ │ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ │ └── launcher_icon.png
│ │ │ │ │ │ ├── values-night
│ │ │ │ │ │ └── styles.xml
│ │ │ │ │ │ └── values
│ │ │ │ │ │ └── styles.xml
│ │ │ │ │ └── profile
│ │ │ │ │ └── AndroidManifest.xml
│ │ │ ├── build.gradle
│ │ │ ├── gradle.properties
│ │ │ ├── gradle
│ │ │ │ └── wrapper
│ │ │ │ │ └── gradle-wrapper.properties
│ │ │ └── settings.gradle
│ │ ├── assets
│ │ │ ├── advance.svg
│ │ │ ├── at.png
│ │ │ ├── authenticator-approval-mockup.png
│ │ │ ├── authenticator-mockup.png
│ │ │ ├── empty_state_profile_bg.svg
│ │ │ ├── list_dashes.svg
│ │ │ ├── logo.png
│ │ │ ├── my_noports.svg
│ │ │ ├── my_noports_main.svg
│ │ │ ├── my_noports_sec.svg
│ │ │ ├── my_noports_sec_2.svg
│ │ │ ├── noports-icon64-dark.ico
│ │ │ ├── noports-icon64-dark.png
│ │ │ ├── noports-icon64-light.ico
│ │ │ ├── noports-icon64-light.png
│ │ │ ├── noports_logo.svg
│ │ │ ├── onboarding_bg.svg
│ │ │ ├── radio_button.svg
│ │ │ └── simple.svg
│ │ ├── changelog.md
│ │ ├── devtools_options.yaml
│ │ ├── ios
│ │ │ ├── .gitignore
│ │ │ ├── Flutter
│ │ │ │ ├── AppFrameworkInfo.plist
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ └── Release.xcconfig
│ │ │ ├── Podfile
│ │ │ ├── Podfile.lock
│ │ │ ├── Runner.xcodeproj
│ │ │ │ ├── project.pbxproj
│ │ │ │ ├── project.xcworkspace
│ │ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ │ └── xcshareddata
│ │ │ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ │ └── xcshareddata
│ │ │ │ │ └── xcschemes
│ │ │ │ │ └── Runner.xcscheme
│ │ │ ├── Runner.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ ├── Runner
│ │ │ │ ├── AppDelegate.swift
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ │ ├── Icon-App-50x50@1x.png
│ │ │ │ │ │ ├── Icon-App-50x50@2x.png
│ │ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ │ └── Icon-App-83.5x83.5@2x.png
│ │ │ │ │ └── LaunchImage.imageset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── LaunchImage.png
│ │ │ │ │ │ ├── LaunchImage@2x.png
│ │ │ │ │ │ ├── LaunchImage@3x.png
│ │ │ │ │ │ └── README.md
│ │ │ │ ├── Base.lproj
│ │ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ │ └── Main.storyboard
│ │ │ │ ├── Info.plist
│ │ │ │ └── Runner-Bridging-Header.h
│ │ │ └── RunnerTests
│ │ │ │ └── RunnerTests.swift
│ │ ├── l10n.yaml
│ │ ├── lib
│ │ │ ├── app.dart
│ │ │ ├── constants.dart
│ │ │ ├── features
│ │ │ │ ├── authorisation
│ │ │ │ │ ├── cubit
│ │ │ │ │ │ └── pending_requests_count_cubit.dart
│ │ │ │ │ ├── view
│ │ │ │ │ │ └── authorisation_view.dart
│ │ │ │ │ └── widgets
│ │ │ │ │ │ └── authorisation_app_bar_button.dart
│ │ │ │ ├── back_up_key
│ │ │ │ │ ├── cubit
│ │ │ │ │ │ └── backup_key_cubit.dart
│ │ │ │ │ ├── repository
│ │ │ │ │ │ └── backup_key_repository.dart
│ │ │ │ │ ├── util
│ │ │ │ │ │ └── backup_key_utils.dart
│ │ │ │ │ └── widgets
│ │ │ │ │ │ └── backup_key_alert_dialog.dart
│ │ │ │ ├── favorite
│ │ │ │ │ ├── bloc
│ │ │ │ │ │ ├── favorite_bloc.dart
│ │ │ │ │ │ ├── favorite_event.dart
│ │ │ │ │ │ └── favorite_state.dart
│ │ │ │ │ ├── favorite.dart
│ │ │ │ │ ├── models
│ │ │ │ │ │ ├── favoritable.dart
│ │ │ │ │ │ ├── favorite.dart
│ │ │ │ │ │ └── favorite.g.dart
│ │ │ │ │ └── repository
│ │ │ │ │ │ └── favorite_repository.dart
│ │ │ │ ├── features.dart
│ │ │ │ ├── logging
│ │ │ │ │ ├── cubit
│ │ │ │ │ │ ├── enable_logging_cubit.dart
│ │ │ │ │ │ ├── logs_cubit.dart
│ │ │ │ │ │ └── logs_state.dart
│ │ │ │ │ ├── logging.dart
│ │ │ │ │ ├── models
│ │ │ │ │ │ ├── equatable_date_time.dart
│ │ │ │ │ │ ├── log_entry.dart
│ │ │ │ │ │ ├── loggable.dart
│ │ │ │ │ │ ├── logging_bloc.dart
│ │ │ │ │ │ └── models.dart
│ │ │ │ │ └── widgets
│ │ │ │ │ │ ├── debug_dump_logs_button.dart
│ │ │ │ │ │ ├── enable_logs_box.dart
│ │ │ │ │ │ ├── export_logs_button.dart
│ │ │ │ │ │ └── widgets.dart
│ │ │ │ ├── onboarding
│ │ │ │ │ ├── cubit
│ │ │ │ │ │ └── onboarding_cubit.dart
│ │ │ │ │ ├── onboarding.dart
│ │ │ │ │ ├── util
│ │ │ │ │ │ ├── activate_util.dart
│ │ │ │ │ │ ├── atsign_manager.dart
│ │ │ │ │ │ ├── onboarding_util.dart
│ │ │ │ │ │ ├── post_onboard.dart
│ │ │ │ │ │ ├── pre_offboard.dart
│ │ │ │ │ │ └── profile_progress_listener.dart
│ │ │ │ │ ├── view
│ │ │ │ │ │ └── onboarding_view.dart
│ │ │ │ │ └── widgets
│ │ │ │ │ │ ├── activate_atsign_dialog.dart
│ │ │ │ │ │ ├── apkam_choice_dialog.dart
│ │ │ │ │ │ ├── at_directory_selector.dart
│ │ │ │ │ │ ├── atsign_selector.dart
│ │ │ │ │ │ ├── client_atsign_description_widget.dart
│ │ │ │ │ │ ├── enrollment_dialog.dart
│ │ │ │ │ │ ├── onboarding_apkam_dialog.dart
│ │ │ │ │ │ ├── onboarding_button.dart
│ │ │ │ │ │ └── onboarding_dialog.dart
│ │ │ │ ├── profile
│ │ │ │ │ ├── bloc
│ │ │ │ │ │ ├── profile_bloc.dart
│ │ │ │ │ │ ├── profile_event.dart
│ │ │ │ │ │ └── profile_state.dart
│ │ │ │ │ ├── cubit
│ │ │ │ │ │ ├── profile_cache_cubit.dart
│ │ │ │ │ │ └── profile_cache_state.dart
│ │ │ │ │ ├── models
│ │ │ │ │ │ ├── profile.dart
│ │ │ │ │ │ └── profile.g.dart
│ │ │ │ │ ├── profile.dart
│ │ │ │ │ ├── repository
│ │ │ │ │ │ └── profile_repository.dart
│ │ │ │ │ ├── view
│ │ │ │ │ │ ├── profile_header_view.dart
│ │ │ │ │ │ ├── profile_view.dart
│ │ │ │ │ │ ├── profile_view_minimal.dart
│ │ │ │ │ │ └── profile_view_ssh_style.dart
│ │ │ │ │ └── widgets
│ │ │ │ │ │ ├── profile_device_name.dart
│ │ │ │ │ │ ├── profile_display_name.dart
│ │ │ │ │ │ ├── profile_favorite_button.dart
│ │ │ │ │ │ ├── profile_header_column.dart
│ │ │ │ │ │ ├── profile_popup_menu_button.dart
│ │ │ │ │ │ ├── profile_refresh_button.dart
│ │ │ │ │ │ ├── profile_run_button.dart
│ │ │ │ │ │ ├── profile_select_box.dart
│ │ │ │ │ │ ├── profile_service_view.dart
│ │ │ │ │ │ ├── profile_status_indicator.dart
│ │ │ │ │ │ └── widgets.dart
│ │ │ │ ├── profile_form
│ │ │ │ │ ├── profile_form.dart
│ │ │ │ │ ├── view
│ │ │ │ │ │ └── profile_form_view.dart
│ │ │ │ │ └── widgets
│ │ │ │ │ │ ├── profile_device_at_sign_text_field.dart
│ │ │ │ │ │ ├── profile_device_name_text_field.dart
│ │ │ │ │ │ ├── profile_display_name_text_field.dart
│ │ │ │ │ │ ├── profile_local_port_selector.dart
│ │ │ │ │ │ ├── profile_relay_at_sign_text_field.dart
│ │ │ │ │ │ ├── profile_relay_quick_buttons.dart
│ │ │ │ │ │ ├── profile_remote_host_text_field.dart
│ │ │ │ │ │ ├── profile_remote_port_selector.dart
│ │ │ │ │ │ └── widgets.dart
│ │ │ │ ├── profile_list
│ │ │ │ │ ├── bloc
│ │ │ │ │ │ ├── profile_list_bloc.dart
│ │ │ │ │ │ ├── profile_list_event.dart
│ │ │ │ │ │ └── profile_list_state.dart
│ │ │ │ │ ├── cubit
│ │ │ │ │ │ ├── profiles_running_cubit.dart
│ │ │ │ │ │ ├── profiles_running_state.dart
│ │ │ │ │ │ ├── profiles_selected_cubit.dart
│ │ │ │ │ │ ├── profiles_selected_state.dart
│ │ │ │ │ │ └── sync_cubit.dart
│ │ │ │ │ ├── profile_list.dart
│ │ │ │ │ ├── view
│ │ │ │ │ │ └── profile_list_view.dart
│ │ │ │ │ └── widgets
│ │ │ │ │ │ ├── connected_profiles_dialog.dart
│ │ │ │ │ │ ├── demo_profile_info_widget.dart
│ │ │ │ │ │ ├── profile_list_add_button.dart
│ │ │ │ │ │ ├── profile_list_failed_load_content.dart
│ │ │ │ │ │ ├── profile_list_import_button.dart
│ │ │ │ │ │ ├── profile_list_refresh_button.dart
│ │ │ │ │ │ ├── profile_select_all_box.dart
│ │ │ │ │ │ ├── profile_selected_delete_button.dart
│ │ │ │ │ │ ├── profile_selected_export_button.dart
│ │ │ │ │ │ └── widgets.dart
│ │ │ │ ├── settings
│ │ │ │ │ ├── bloc
│ │ │ │ │ │ ├── settings_bloc.dart
│ │ │ │ │ │ ├── settings_event.dart
│ │ │ │ │ │ └── settings_state.dart
│ │ │ │ │ ├── models
│ │ │ │ │ │ ├── settings.dart
│ │ │ │ │ │ └── settings.g.dart
│ │ │ │ │ ├── repository
│ │ │ │ │ │ ├── contact_repository.dart
│ │ │ │ │ │ └── settings_repository.dart
│ │ │ │ │ ├── settings.dart
│ │ │ │ │ ├── view
│ │ │ │ │ │ └── settings_view.dart
│ │ │ │ │ └── widgets
│ │ │ │ │ │ ├── advance_section.dart
│ │ │ │ │ │ ├── contact_list_tile.dart
│ │ │ │ │ │ ├── dashboard_section.dart
│ │ │ │ │ │ ├── default_relay_section.dart
│ │ │ │ │ │ ├── language_section.dart
│ │ │ │ │ │ ├── settings_action_button.dart
│ │ │ │ │ │ ├── settings_dashboard_layout_selector.dart
│ │ │ │ │ │ ├── settings_error_hint.dart
│ │ │ │ │ │ ├── settings_language_selector.dart
│ │ │ │ │ │ ├── settings_override_relay_switch.dart
│ │ │ │ │ │ ├── settings_relay_at_sign_text_field.dart
│ │ │ │ │ │ ├── settings_relay_quick_buttons.dart
│ │ │ │ │ │ ├── settings_switch_atsign_action.dart
│ │ │ │ │ │ └── widgets.dart
│ │ │ │ └── tray_manager
│ │ │ │ │ ├── cubit
│ │ │ │ │ ├── tray_cubit.dart
│ │ │ │ │ ├── tray_cubit.g.dart
│ │ │ │ │ └── tray_state.dart
│ │ │ │ │ ├── tray_manager.dart
│ │ │ │ │ └── widgets
│ │ │ │ │ └── tray_manager.dart
│ │ │ ├── home_wrapper_widget.dart
│ │ │ ├── localization
│ │ │ │ ├── app_en.arb
│ │ │ │ ├── app_es.arb
│ │ │ │ ├── app_pt.arb
│ │ │ │ ├── app_pt_BR.arb
│ │ │ │ ├── app_zh.arb
│ │ │ │ ├── app_zh_Hans_CH.arb
│ │ │ │ └── app_zh_Hant_HK.arb
│ │ │ ├── main.dart
│ │ │ ├── pages
│ │ │ │ ├── authorisation_page.dart
│ │ │ │ ├── dashboard_page.dart
│ │ │ │ ├── loading_page.dart
│ │ │ │ ├── onboarding_page.dart
│ │ │ │ ├── pages.dart
│ │ │ │ ├── profile_form_page.dart
│ │ │ │ ├── settings_page.dart
│ │ │ │ ├── sub_nav_cubit.dart
│ │ │ │ └── sub_nav_observer.dart
│ │ │ ├── routes.dart
│ │ │ ├── styles
│ │ │ │ ├── app_color.dart
│ │ │ │ ├── app_theme.dart
│ │ │ │ ├── sizes.dart
│ │ │ │ └── style_constants.dart
│ │ │ ├── util
│ │ │ │ ├── at_client_methods.dart
│ │ │ │ ├── export.dart
│ │ │ │ ├── form_validator.dart
│ │ │ │ ├── general_extensions.dart
│ │ │ │ ├── language.dart
│ │ │ │ ├── port.dart
│ │ │ │ ├── profile_status.dart
│ │ │ │ └── uuid.dart
│ │ │ └── widgets
│ │ │ │ ├── confirmation_dialog.dart
│ │ │ │ ├── custom_card.dart
│ │ │ │ ├── custom_container.dart
│ │ │ │ ├── custom_snack_bar.dart
│ │ │ │ ├── custom_text_button.dart
│ │ │ │ ├── import_type_paste_dialog.dart
│ │ │ │ ├── loader_bar.dart
│ │ │ │ ├── multi_select_dialog.dart
│ │ │ │ ├── npt_app_bar.dart
│ │ │ │ ├── spinner.dart
│ │ │ │ └── switch_atsign_button.dart
│ │ ├── linux
│ │ │ ├── .gitignore
│ │ │ ├── CMakeLists.txt
│ │ │ ├── flutter
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── generated_plugin_registrant.cc
│ │ │ │ ├── generated_plugin_registrant.h
│ │ │ │ └── generated_plugins.cmake
│ │ │ ├── main.cc
│ │ │ ├── my_application.cc
│ │ │ └── my_application.h
│ │ ├── macos
│ │ │ ├── .gitignore
│ │ │ ├── Flutter
│ │ │ │ ├── Flutter-Debug.xcconfig
│ │ │ │ ├── Flutter-Release.xcconfig
│ │ │ │ └── GeneratedPluginRegistrant.swift
│ │ │ ├── Podfile
│ │ │ ├── Podfile.lock
│ │ │ ├── Runner.xcodeproj
│ │ │ │ ├── project.pbxproj
│ │ │ │ ├── project.xcworkspace
│ │ │ │ │ └── xcshareddata
│ │ │ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ │ └── xcshareddata
│ │ │ │ │ └── xcschemes
│ │ │ │ │ └── Runner.xcscheme
│ │ │ ├── Runner.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ ├── Runner
│ │ │ │ ├── AppDelegate.swift
│ │ │ │ ├── Assets.xcassets
│ │ │ │ │ └── AppIcon.appiconset
│ │ │ │ │ │ ├── Contents.json
│ │ │ │ │ │ ├── app_icon_1024.png
│ │ │ │ │ │ ├── app_icon_128.png
│ │ │ │ │ │ ├── app_icon_16.png
│ │ │ │ │ │ ├── app_icon_256.png
│ │ │ │ │ │ ├── app_icon_32.png
│ │ │ │ │ │ ├── app_icon_512.png
│ │ │ │ │ │ └── app_icon_64.png
│ │ │ │ ├── Base.lproj
│ │ │ │ │ └── MainMenu.xib
│ │ │ │ ├── Configs
│ │ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ │ ├── Debug.xcconfig
│ │ │ │ │ ├── Release.xcconfig
│ │ │ │ │ └── Warnings.xcconfig
│ │ │ │ ├── DebugProfile.entitlements
│ │ │ │ ├── Info.plist
│ │ │ │ ├── MainFlutterWindow.swift
│ │ │ │ └── Release.entitlements
│ │ │ └── RunnerTests
│ │ │ │ └── RunnerTests.swift
│ │ ├── pubspec.lock
│ │ ├── pubspec.yaml
│ │ ├── test
│ │ │ └── widget_test.dart
│ │ ├── untranslated_messages.txt
│ │ ├── web
│ │ │ ├── favicon.png
│ │ │ ├── icons
│ │ │ │ ├── Icon-192.png
│ │ │ │ ├── Icon-512.png
│ │ │ │ ├── Icon-maskable-192.png
│ │ │ │ └── Icon-maskable-512.png
│ │ │ ├── index.html
│ │ │ └── manifest.json
│ │ └── windows
│ │ │ ├── .gitignore
│ │ │ ├── CMakeLists.txt
│ │ │ ├── flutter
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ │ └── runner
│ │ │ ├── CMakeLists.txt
│ │ │ ├── Runner.rc
│ │ │ ├── flutter_window.cpp
│ │ │ ├── flutter_window.h
│ │ │ ├── main.cpp
│ │ │ ├── resource.h
│ │ │ ├── resources
│ │ │ └── app_icon.ico
│ │ │ ├── runner.exe.manifest
│ │ │ ├── utils.cpp
│ │ │ ├── utils.h
│ │ │ ├── win32_window.cpp
│ │ │ └── win32_window.h
│ ├── sshnoports
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── analysis_options.yaml
│ │ ├── bin
│ │ │ ├── .gitignore
│ │ │ ├── activate_cli.dart
│ │ │ ├── demo
│ │ │ │ ├── npa_always_deny.dart
│ │ │ │ └── npa_cli.dart
│ │ │ ├── demo_socket_client.dart
│ │ │ ├── demo_socket_server.dart
│ │ │ ├── npp_atserver.dart
│ │ │ ├── npp_file.dart
│ │ │ ├── npt.dart
│ │ │ ├── srv.dart
│ │ │ ├── srvd.dart
│ │ │ ├── sshnp.dart
│ │ │ └── sshnpd.dart
│ │ ├── buildArchive
│ │ ├── buildBinaries
│ │ ├── bundles
│ │ │ ├── core
│ │ │ │ └── docker
│ │ │ │ │ ├── .env.template
│ │ │ │ │ ├── .startup.sh
│ │ │ │ │ └── docker-compose.yaml
│ │ │ ├── shell
│ │ │ │ ├── headless
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── srvd.sh
│ │ │ │ │ └── sshnpd.sh
│ │ │ │ ├── install.sh
│ │ │ │ ├── launchd
│ │ │ │ │ └── com.atsign.sshnpd.plist
│ │ │ │ └── systemd
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── srvd.service
│ │ │ │ │ ├── srvd.service.d
│ │ │ │ │ └── override.conf
│ │ │ │ │ ├── sshnpd.service
│ │ │ │ │ └── sshnpd.service.d
│ │ │ │ │ └── override.conf
│ │ │ ├── universal.ps1
│ │ │ ├── universal.sh
│ │ │ └── windows
│ │ │ │ ├── README.md
│ │ │ │ └── sshnpd_service.xml
│ │ ├── lib
│ │ │ ├── npa_bootstrapper.dart
│ │ │ └── src
│ │ │ │ ├── create_at_client_cli.dart
│ │ │ │ ├── create_sshnp.dart
│ │ │ │ ├── extended_arg_parser.dart
│ │ │ │ ├── print_devices.dart
│ │ │ │ ├── print_version.dart
│ │ │ │ └── version.dart
│ │ ├── pubspec.lock
│ │ ├── pubspec.yaml
│ │ └── tools
│ │ │ ├── .gitignore
│ │ │ ├── Dockerfile
│ │ │ ├── Dockerfile.activate
│ │ │ ├── Dockerfile.npt
│ │ │ ├── Dockerfile.srvd
│ │ │ ├── Dockerfile.sshnp
│ │ │ ├── Dockerfile.sshnpd-slim
│ │ │ ├── docker-compose.local.yaml
│ │ │ └── templates
│ │ │ └── entitlements.plist
│ └── sshnp_flutter
│ │ ├── .gitignore
│ │ ├── .metadata
│ │ ├── README.md
│ │ ├── analysis_options.yaml
│ │ ├── android
│ │ ├── .gitignore
│ │ ├── app
│ │ │ ├── build.gradle
│ │ │ └── src
│ │ │ │ ├── debug
│ │ │ │ └── AndroidManifest.xml
│ │ │ │ ├── main
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin
│ │ │ │ │ └── com
│ │ │ │ │ │ └── example
│ │ │ │ │ │ └── sshnp_gui
│ │ │ │ │ │ └── MainActivity.kt
│ │ │ │ └── res
│ │ │ │ │ ├── drawable-v21
│ │ │ │ │ └── launch_background.xml
│ │ │ │ │ ├── drawable
│ │ │ │ │ └── launch_background.xml
│ │ │ │ │ ├── mipmap-hdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── launcher_icon.png
│ │ │ │ │ ├── mipmap-mdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── launcher_icon.png
│ │ │ │ │ ├── mipmap-xhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── launcher_icon.png
│ │ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── launcher_icon.png
│ │ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ └── launcher_icon.png
│ │ │ │ │ ├── values-night
│ │ │ │ │ └── styles.xml
│ │ │ │ │ └── values
│ │ │ │ │ └── styles.xml
│ │ │ │ └── profile
│ │ │ │ └── AndroidManifest.xml
│ │ ├── build.gradle
│ │ ├── gradle.properties
│ │ ├── gradle
│ │ │ └── wrapper
│ │ │ │ └── gradle-wrapper.properties
│ │ └── settings.gradle
│ │ ├── assets
│ │ ├── fonts
│ │ │ ├── 0xProtoNerdFont-Regular.ttf
│ │ │ ├── 0xProtoNerdFontMono-Regular.ttf
│ │ │ ├── 0xProtoNerdFontPropo-Regular.ttf
│ │ │ ├── GeistMonoNerdFont-Regular.otf
│ │ │ └── IosevkaTermNerdFontPropo-Regular.ttf
│ │ └── images
│ │ │ ├── app_logo.png
│ │ │ ├── app_logo.svg
│ │ │ ├── empty_profile_bg.svg
│ │ │ ├── getting_started_empty_state.svg
│ │ │ ├── logo.svg
│ │ │ ├── nav_icons
│ │ │ ├── current_connection_selected.svg
│ │ │ ├── current_connection_unselected.svg
│ │ │ ├── dashboard_selected.svg
│ │ │ ├── dashboard_unselected.svg
│ │ │ ├── settings_selected.svg
│ │ │ ├── settings_unselected.svg
│ │ │ ├── support_selected.svg
│ │ │ ├── support_unselected.svg
│ │ │ ├── terminal_selected.svg
│ │ │ └── terminal_unselected.svg
│ │ │ ├── noports_light.svg
│ │ │ ├── onboarding_bg.png
│ │ │ └── onboarding_bg_overlay.svg
│ │ ├── ios
│ │ ├── .gitignore
│ │ ├── Flutter
│ │ │ ├── AppFrameworkInfo.plist
│ │ │ ├── Debug.xcconfig
│ │ │ └── Release.xcconfig
│ │ ├── Podfile
│ │ ├── Podfile.lock
│ │ ├── Runner.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── xcshareddata
│ │ │ │ └── xcschemes
│ │ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ ├── Runner
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ ├── Icon-App-50x50@1x.png
│ │ │ │ │ ├── Icon-App-50x50@2x.png
│ │ │ │ │ ├── Icon-App-57x57@1x.png
│ │ │ │ │ ├── Icon-App-57x57@2x.png
│ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ ├── Icon-App-72x72@1x.png
│ │ │ │ │ ├── Icon-App-72x72@2x.png
│ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ └── Icon-App-83.5x83.5@2x.png
│ │ │ │ └── LaunchImage.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── LaunchImage.png
│ │ │ │ │ ├── LaunchImage@2x.png
│ │ │ │ │ ├── LaunchImage@3x.png
│ │ │ │ │ └── README.md
│ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ ├── Info.plist
│ │ │ └── Runner-Bridging-Header.h
│ │ └── RunnerTests
│ │ │ └── RunnerTests.swift
│ │ ├── l10n.yaml
│ │ ├── lib
│ │ ├── l10n
│ │ │ └── app_en.arb
│ │ ├── main.dart
│ │ └── src
│ │ │ ├── application
│ │ │ ├── private_key_manager.dart
│ │ │ └── profile_private_key_manager.dart
│ │ │ ├── controllers
│ │ │ ├── authentication_controller.dart
│ │ │ ├── background_session_controller.dart
│ │ │ ├── config_controller.dart
│ │ │ ├── file_picker_controller.dart
│ │ │ ├── form_controllers.dart
│ │ │ ├── navigation_controller.dart
│ │ │ ├── navigation_rail_controller.dart
│ │ │ ├── package_info_controller.dart
│ │ │ ├── private_key_manager_controller.dart
│ │ │ ├── profile_private_key_manager_controller.dart
│ │ │ └── terminal_session_controller.dart
│ │ │ ├── presentation
│ │ │ ├── screens
│ │ │ │ ├── home_screen.dart
│ │ │ │ ├── onboarding_screen.dart
│ │ │ │ ├── profile_editor_screen.dart
│ │ │ │ ├── settings_screen.dart
│ │ │ │ ├── support_screen.dart
│ │ │ │ └── terminal_screen.dart
│ │ │ └── widgets
│ │ │ │ ├── contact_tile
│ │ │ │ └── contact_list_tile.dart
│ │ │ │ ├── custom_list_tile.dart
│ │ │ │ ├── home_screen_actions
│ │ │ │ ├── home_screen_import_dialog.dart
│ │ │ │ └── home_screen_menu_button.dart
│ │ │ │ ├── home_screen_widgets
│ │ │ │ ├── home_screen_actions
│ │ │ │ │ ├── home_screen_action_callbacks.dart
│ │ │ │ │ ├── home_screen_actions.dart
│ │ │ │ │ ├── home_screen_import_dialog.dart
│ │ │ │ │ ├── home_screen_menu_button.dart
│ │ │ │ │ ├── import_profile_action.dart
│ │ │ │ │ └── new_profile_action.dart
│ │ │ │ ├── home_screen_core.dart
│ │ │ │ ├── home_screen_desktop.dart
│ │ │ │ └── home_screen_mobile.dart
│ │ │ │ ├── navigation
│ │ │ │ ├── app_navigation_mobile_dialog.dart
│ │ │ │ ├── app_navigation_rail.dart
│ │ │ │ ├── custom_app_bar.dart
│ │ │ │ └── navigation_list_tile.dart
│ │ │ │ ├── profile_bar
│ │ │ │ ├── profile_bar_actions.dart
│ │ │ │ └── profile_bar_stats.dart
│ │ │ │ ├── profile_screen_widgets
│ │ │ │ ├── profile_actions
│ │ │ │ │ ├── profile_action_button.dart
│ │ │ │ │ ├── profile_action_callbacks.dart
│ │ │ │ │ ├── profile_actions.dart
│ │ │ │ │ ├── profile_delete_action.dart
│ │ │ │ │ ├── profile_delete_dialog.dart
│ │ │ │ │ ├── profile_menu_button.dart
│ │ │ │ │ ├── profile_run_action.dart
│ │ │ │ │ └── profile_terminal_action.dart
│ │ │ │ ├── profile_bar
│ │ │ │ │ ├── profile_bar.dart
│ │ │ │ │ ├── profile_bar_actions.dart
│ │ │ │ │ └── profile_bar_stats.dart
│ │ │ │ ├── profile_editor_screen_desktop_view.dart
│ │ │ │ ├── profile_editor_screen_mobile_view.dart
│ │ │ │ ├── profile_expansion_panel.dart
│ │ │ │ └── profile_form
│ │ │ │ │ ├── custom_dropdown_form_field.dart
│ │ │ │ │ ├── custom_multiselect_chip_form_field.dart
│ │ │ │ │ ├── custom_multiselect_form_field.dart
│ │ │ │ │ ├── custom_switch_widget.dart
│ │ │ │ │ ├── custom_text_form_field.dart
│ │ │ │ │ ├── profile_form_card.dart
│ │ │ │ │ ├── profile_form_desktop_view.dart
│ │ │ │ │ └── profile_form_mobile_view.dart
│ │ │ │ ├── settings_actions
│ │ │ │ ├── settings_action_button.dart
│ │ │ │ └── settings_switch_atsign_action.dart
│ │ │ │ ├── settings_screen_widgets
│ │ │ │ ├── settings_actions
│ │ │ │ │ └── settings_action_button.dart
│ │ │ │ ├── settings_screen_desktop.dart
│ │ │ │ └── settings_screen_mobile.dart
│ │ │ │ ├── ssh_key_management
│ │ │ │ ├── file_picker_field.dart
│ │ │ │ ├── ssh_key_management_dialog.dart
│ │ │ │ ├── ssh_key_management_form_dialog.dart
│ │ │ │ ├── ssh_key_pair_bar.dart
│ │ │ │ └── ssh_key_pair_bar_actions.dart
│ │ │ │ ├── support_screen_widgets
│ │ │ │ ├── support_screen_desktop_view.dart
│ │ │ │ └── support_screen_mobile_view.dart
│ │ │ │ ├── terminal_screen_widgets
│ │ │ │ ├── terminal_screen_desktop_view.dart
│ │ │ │ └── terminal_screen_mobile_view.dart
│ │ │ │ └── utility
│ │ │ │ ├── at_error_dialog.dart
│ │ │ │ ├── custom_snack_bar.dart
│ │ │ │ └── responsive_widget.dart
│ │ │ ├── repository
│ │ │ ├── authentication_repository.dart
│ │ │ ├── contact_repository.dart
│ │ │ ├── navigation_repository.dart
│ │ │ ├── private_key_manager_repository.dart
│ │ │ └── profile_private_key_manager_repository.dart
│ │ │ └── utility
│ │ │ ├── app_theme.dart
│ │ │ ├── constants.dart
│ │ │ ├── extensions
│ │ │ └── go_router_extensions.dart
│ │ │ ├── form_validator.dart
│ │ │ ├── intents.dart
│ │ │ ├── my_sync_progress_listener.dart
│ │ │ ├── platform_utility
│ │ │ ├── default_platform_utility.dart
│ │ │ ├── macos_utility.dart
│ │ │ └── platform_utility.dart
│ │ │ └── sizes.dart
│ │ ├── linux
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
│ │ ├── macos
│ │ ├── .gitignore
│ │ ├── Flutter
│ │ │ ├── Flutter-Debug.xcconfig
│ │ │ ├── Flutter-Release.xcconfig
│ │ │ └── GeneratedPluginRegistrant.swift
│ │ ├── Podfile
│ │ ├── Podfile.lock
│ │ ├── Runner.xcodeproj
│ │ │ ├── project.pbxproj
│ │ │ ├── project.xcworkspace
│ │ │ │ └── xcshareddata
│ │ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── xcshareddata
│ │ │ │ └── xcschemes
│ │ │ │ └── Runner.xcscheme
│ │ ├── Runner.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ ├── Runner
│ │ │ ├── AppDelegate.swift
│ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── app_icon_1024.png
│ │ │ │ │ ├── app_icon_128.png
│ │ │ │ │ ├── app_icon_16.png
│ │ │ │ │ ├── app_icon_256.png
│ │ │ │ │ ├── app_icon_32.png
│ │ │ │ │ ├── app_icon_512.png
│ │ │ │ │ └── app_icon_64.png
│ │ │ ├── Base.lproj
│ │ │ │ └── MainMenu.xib
│ │ │ ├── Configs
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ ├── DebugProfile.entitlements
│ │ │ ├── Info.plist
│ │ │ ├── MainFlutterWindow.swift
│ │ │ └── Release.entitlements
│ │ └── RunnerTests
│ │ │ └── RunnerTests.swift
│ │ ├── public
│ │ └── images
│ │ │ └── terminal_selected.svg
│ │ ├── pubspec.lock
│ │ ├── pubspec.yaml
│ │ ├── test
│ │ ├── robots
│ │ │ ├── custom_list_tile_robot.dart
│ │ │ ├── home_screen_robot.dart
│ │ │ ├── mocks.dart
│ │ │ ├── profile_form_robot.dart
│ │ │ ├── settings_screen_robot.dart
│ │ │ ├── support_screen_robot.dart
│ │ │ └── terminal_screen_robot.dart
│ │ └── src
│ │ │ ├── controllers
│ │ │ ├── navigation_rail_controller_test.dart
│ │ │ └── terminal_session_controller_test.dart
│ │ │ ├── presentation
│ │ │ ├── screens
│ │ │ │ ├── home_screen_test.dart
│ │ │ │ ├── settings_screen_test.dart
│ │ │ │ └── terminal_screen_test.dart
│ │ │ └── widgets
│ │ │ │ ├── custom_list_tile_test.dart
│ │ │ │ ├── profile_form
│ │ │ │ └── profile_form_test.dart
│ │ │ │ └── support_screen_widgets
│ │ │ │ └── support_screen_desktop_view_test.dart
│ │ │ └── utility
│ │ │ └── form_validator_test.dart
│ │ └── windows
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── flutter
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ │ └── runner
│ │ ├── CMakeLists.txt
│ │ ├── Runner.rc
│ │ ├── flutter_window.cpp
│ │ ├── flutter_window.h
│ │ ├── main.cpp
│ │ ├── resource.h
│ │ ├── resources
│ │ └── app_icon.ico
│ │ ├── runner.exe.manifest
│ │ ├── utils.cpp
│ │ ├── utils.h
│ │ ├── win32_window.cpp
│ │ └── win32_window.h
└── python
│ └── README.md
├── pubspec.yaml
├── tests
├── e2e_all
│ ├── .gitignore
│ ├── README.md
│ ├── dockerfiles
│ │ ├── Dockerfile.base.runtime
│ │ ├── Dockerfile.c.branch
│ │ ├── Dockerfile.c.current
│ │ ├── Dockerfile.c.release
│ │ ├── Dockerfile.dart.branch
│ │ ├── Dockerfile.dart.current
│ │ ├── Dockerfile.dart.release
│ │ └── README.md
│ └── scripts
│ │ ├── common
│ │ ├── apkam_setup.sh
│ │ ├── build_docker_daemons.sh
│ │ ├── check_env.include.sh
│ │ ├── cleanup_tmp_files.sh
│ │ ├── common_functions.include.sh
│ │ ├── run_single_test.sh
│ │ ├── run_tests.sh
│ │ ├── setup_atkeys.sh
│ │ ├── setup_binaries.sh
│ │ ├── start_daemons.sh
│ │ ├── stop_daemons.sh
│ │ └── wipe_known_hosts.sh
│ │ ├── main.sh
│ │ ├── srv.sh
│ │ └── tests
│ │ ├── 001_minus_s_flag
│ │ ├── minus_r_flag
│ │ ├── minus_u_flag
│ │ ├── noop
│ │ ├── npt_to_port_22
│ │ ├── npt_to_port_22_no_encrypt_traffic
│ │ ├── shared
│ │ ├── sshnp
│ │ └── sshnp.expect
│ │ ├── v4_dart_inline
│ │ ├── v4_openssh_print
│ │ ├── v5_dart_inline
│ │ ├── v5_openssh_inline
│ │ └── v5_openssh_print
└── end2end_tests
│ ├── README.md
│ ├── contexts
│ ├── .gitignore
│ ├── _init_
│ │ ├── README.md
│ │ ├── setup-srvd-entrypoint.sh
│ │ ├── setup-srvd-keys.sh
│ │ ├── setup-sshnp-entrypoint.sh
│ │ ├── setup-sshnp-keys.sh
│ │ ├── setup-sshnpd-entrypoint.sh
│ │ └── setup-sshnpd-keys.sh
│ ├── srvd
│ │ └── .atsign
│ │ │ └── keys
│ │ │ └── .gitkeep
│ ├── sshnp
│ │ └── .atsign
│ │ │ └── keys
│ │ │ └── .gitkeep
│ └── sshnpd
│ │ ├── .atsign
│ │ └── keys
│ │ │ └── .gitkeep
│ │ ├── test.sh
│ │ └── test.txt
│ ├── entrypoints
│ ├── srvd_entrypoint.sh
│ ├── sshnp_entrypoint.sh
│ ├── sshnp_installer_entrypoint.sh
│ ├── sshnpd_entrypoint.sh
│ └── sshnpd_installer_entrypoint.sh
│ ├── image
│ └── Dockerfile
│ └── tests
│ ├── .gitignore
│ ├── docker-compose-base.yaml
│ ├── docker-compose-blank-base.yaml
│ ├── service-container-srvd.yaml
│ ├── service-container-sshnp.yaml
│ ├── service-container-sshnpd.yaml
│ ├── service-image-runtime-branch.yaml
│ ├── service-image-runtime-release.yaml
│ ├── service-image-runtime-sshnp-installer.yaml
│ └── service-image-runtime-sshnpd-installer.yaml
└── tools
├── .gitignore
├── local-e2e-test
├── .env.template
├── .gitignore
├── .secrets.template
├── README.md
└── run-act.sh
├── manual-docker
├── README.md
├── blank
│ └── docker-compose.yaml
├── branch
│ └── docker-compose.yaml
├── clean-local.sh
├── local
│ └── docker-compose.yaml
├── release
│ └── docker-compose.yaml
└── run-manual-docker.sh
├── multibuild
└── Dockerfile.package
├── ncat-srv-setup
├── .gitignore
├── c-build.sh
├── c-run.sh
├── dart-build.sh
└── dart-run.sh
├── osv-scanner
└── go.sum
├── srvd-docker
└── srvd_update.sh
├── static-openssh
└── static-openssh.sh
└── windows-installer
├── NoPortsHealthCheck
├── App.config
├── Form1.Designer.cs
├── Form1.cs
├── Form1.resx
├── NoPortsHealthCheck.csproj
├── Program.cs
├── Properties
│ ├── AssemblyInfo.cs
│ └── Resources.resx
└── ServiceController.cs
├── NoPortsInstaller
├── AccessRules.cs
├── ActivateController.cs
├── App.xaml
├── App.xaml.cs
├── AssemblyInfo.cs
├── Assets
│ ├── NoPortsDark.png
│ └── noports-stacked-dark.ico
├── Controller.cs
├── IAccessRules.cs
├── InstallLogger.cs
├── InstallType.cs
├── NoPortsInstaller.csproj
├── Pages
│ ├── Activate
│ │ ├── Approve.xaml
│ │ ├── Approve.xaml.cs
│ │ ├── AtsignApprove.xaml
│ │ ├── AtsignApprove.xaml.cs
│ │ ├── Enroll.xaml
│ │ ├── Enroll.xaml.cs
│ │ ├── FinishGeneratingKeys.xaml
│ │ ├── FinishGeneratingKeys.xaml.cs
│ │ ├── Onboard.xaml
│ │ ├── Onboard.xaml.cs
│ │ ├── PreEnroll.xaml
│ │ └── PreEnroll.xaml.cs
│ ├── Client
│ │ ├── ClientConfig.xaml
│ │ └── ClientConfig.xaml.cs
│ ├── Device
│ │ ├── DeviceConfig1.xaml
│ │ ├── DeviceConfig1.xaml.cs
│ │ ├── DeviceConfig2.xaml
│ │ ├── DeviceConfig2.xaml.cs
│ │ ├── InstallService.xaml
│ │ └── InstallService.xaml.cs
│ ├── MainWindow.xaml
│ ├── MainWindow.xaml.cs
│ ├── ServiceErrorPage.xaml
│ ├── ServiceErrorPage.xaml.cs
│ ├── Setup.xaml
│ ├── Setup.xaml.cs
│ ├── Shared
│ │ ├── Download.xaml
│ │ ├── Download.xaml.cs
│ │ ├── FinishInstall.xaml
│ │ └── FinishInstall.xaml.cs
│ └── Uninstall
│ │ ├── FinishUninstall.xaml
│ │ ├── FinishUninstall.xaml.cs
│ │ ├── Uninstall.xaml
│ │ ├── Uninstall.xaml.cs
│ │ ├── UninstallPage.xaml
│ │ └── UninstallPage.xaml.cs
├── Properties
│ ├── PublishProfiles
│ │ └── FolderProfile.pubxml
│ ├── Resources.Designer.cs
│ └── Resources.resx
├── ServiceController.cs
└── app.manifest
├── NoPortsWindows.sln
└── SshnpdService
├── GlobalSuppressions.cs
├── Program.cs
├── Properties
└── PublishProfiles
│ └── FolderProfile.pubxml
├── Sshnpd.cs
├── SshnpdService.csproj
├── SshnpdWindowsService.cs
├── appsettings.Development.json
└── appsettings.json
/.gitbook.yaml:
--------------------------------------------------------------------------------
1 | root: ./docs
2 |
3 | structure:
4 | readme: README.md
5 | summary: SUMMARY.md
6 |
7 | redirects:
8 | ssh-no-ports/guides/installation-guide: installation/README.md
9 |
--------------------------------------------------------------------------------
/.github/workflows/cppcheck.yml:
--------------------------------------------------------------------------------
1 | name: Cppcheck
2 | on:
3 | workflow_dispatch:
4 | push:
5 | branches: [trunk]
6 | paths:
7 | - '/packages/c/**'
8 | pull_request:
9 | branches: [trunk]
10 | paths:
11 | - '/packages/c/**'
12 |
13 | permissions:
14 | contents: read
15 |
16 | jobs:
17 | cppcheck:
18 | runs-on: ubuntu-latest
19 | defaults:
20 | run:
21 | working-directory: ./packages/c
22 | steps:
23 | - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
24 | - name: Cppcheck
25 | run: |
26 | sudo apt install -y cppcheck
27 | cppcheck .
28 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "cSpell.words": [
3 | "sshnoports",
4 | "sshnp",
5 | "sshnpd"
6 | ]
7 | }
--------------------------------------------------------------------------------
/apps/admin/admin_api/.gitignore:
--------------------------------------------------------------------------------
1 | # https://dart.dev/guides/libraries/private-files
2 | # Created by `dart pub`
3 | .dart_tool/
4 |
--------------------------------------------------------------------------------
/apps/admin/admin_api/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | ## 1.0.0
2 |
3 | - Initial version.
4 |
--------------------------------------------------------------------------------
/apps/admin/admin_api/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | # Defines a default set of lint rules enforced for
2 | # projects at Google. For details and rationale,
3 | # see https://pub.dev/packages/lints.
4 | include: package:lints/recommended.yaml
5 |
6 | # For lint rules and documentation, see http://dart-lang.github.io/linter/lints.
7 | # Uncomment to specify additional rules.
8 | linter:
9 | rules:
10 | annotate_overrides: true
11 | prefer_final_fields: true
12 | camel_case_types : true
13 | unnecessary_string_interpolations : true
14 | await_only_futures : true
15 | unawaited_futures: true
16 | depend_on_referenced_packages : false
17 |
--------------------------------------------------------------------------------
/apps/admin/webapp/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 | .vite
15 |
16 | # Editor directories and files
17 | .vscode/*
18 | !.vscode/extensions.json
19 | .idea
20 | .DS_Store
21 | *.suo
22 | *.ntvs*
23 | *.njsproj
24 | *.sln
25 | *.sw?
26 |
--------------------------------------------------------------------------------
/apps/admin/webapp/.npmrc:
--------------------------------------------------------------------------------
1 | engine-strict=true
2 |
--------------------------------------------------------------------------------
/apps/admin/webapp/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": ["svelte.svelte-vscode"]
3 | }
4 |
--------------------------------------------------------------------------------
/apps/admin/webapp/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "webapp_proto",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite dev",
8 | "build": "vite build",
9 | "preview": "vite preview"
10 | },
11 | "devDependencies": {
12 | "@sveltejs/vite-plugin-svelte": "5.1.0",
13 | "svelte": "5.33.14",
14 | "vite": "6.3.5"
15 | },
16 | "overrides": {
17 | "vite": {
18 | "esbuild": "0.25.0"
19 | }
20 | },
21 | "engines": {
22 | "node": ">=v20.15.0 <23",
23 | "npm": ">=10.8.2"
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/apps/admin/webapp/src/app.css:
--------------------------------------------------------------------------------
1 | .table td {
2 | background-color: aliceblue;
3 | }
4 | .table th {
5 | background-color: lightcyan;
6 | }
7 |
8 | .selected {
9 | font-weight: bold;
10 | background-color: cadetblue !important;
11 | }
12 |
13 | .container {
14 | max-width: 90%;
15 | }
--------------------------------------------------------------------------------
/apps/admin/webapp/src/assets/noports.avif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/apps/admin/webapp/src/assets/noports.avif
--------------------------------------------------------------------------------
/apps/admin/webapp/src/assets/noports.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/apps/admin/webapp/src/assets/noports.jpg
--------------------------------------------------------------------------------
/apps/admin/webapp/src/lib/Child.svelte:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 | Depth == {depth}: Value == {value}
8 |
9 |
10 |
11 | {#if depth < 10}
12 | {value = v; valueChanged(value);}}>
13 | {/if}
--------------------------------------------------------------------------------
/apps/admin/webapp/src/main.js:
--------------------------------------------------------------------------------
1 | import './app.css'
2 | import { mount } from 'svelte';
3 | import App from './App.svelte'
4 |
5 | // noinspection JSCheckFunctionSignatures
6 | const app = mount(App, { target: document.getElementById("app") });
7 |
8 | export default app
9 |
--------------------------------------------------------------------------------
/apps/admin/webapp/src/routes/+layout.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/apps/admin/webapp/src/routes/+layout.js
--------------------------------------------------------------------------------
/apps/admin/webapp/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
--------------------------------------------------------------------------------
/apps/admin/webapp/svelte.config.js:
--------------------------------------------------------------------------------
1 | import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'
2 |
3 | export default {
4 | // Consult https://svelte.dev/docs#compile-time-svelte-preprocess
5 | // for more information about preprocessors
6 | preprocess: vitePreprocess(),
7 | }
8 |
--------------------------------------------------------------------------------
/apps/admin/webapp/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import { svelte } from '@sveltejs/vite-plugin-svelte'
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [svelte()],
7 | })
8 |
--------------------------------------------------------------------------------
/docs/.gitbook/assets/AWS_Advanced_details.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/AWS_Advanced_details.PNG
--------------------------------------------------------------------------------
/docs/.gitbook/assets/AWS_user_data.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/AWS_user_data.PNG
--------------------------------------------------------------------------------
/docs/.gitbook/assets/Azure_Custom_data.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/Azure_Custom_data.PNG
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2024-12-16 at 14.24.10@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2024-12-16 at 14.24.10@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 16.44.12@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 16.44.12@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 16.44.39@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 16.44.39@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 16.45.20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 16.45.20@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 16.45.45@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 16.45.45@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 16.48.11@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 16.48.11@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 16.48.41@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 16.48.41@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 16.49.01@2x (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 16.49.01@2x (1).png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 16.49.01@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 16.49.01@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.14.18@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.14.18@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.14.52@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.14.52@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.15.11@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.15.11@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.21.16@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.21.16@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.23.37@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.23.37@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.24.43@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.24.43@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.26.37@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.26.37@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.27.40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.27.40@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.28.20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.28.20@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.29.22@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.29.22@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.32.07@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.32.07@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.33.42@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.33.42@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.34.46@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.34.46@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.43.42@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.43.42@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.44.52@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.44.52@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.46.42@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.46.42@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.50.56@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.50.56@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.51.22@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 17.51.22@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 18.42.07@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 18.42.07@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 18.42.40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 18.42.40@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-01-20 at 18.46.29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-01-20 at 18.46.29@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-03-11 at 16.31.23@2x (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-03-11 at 16.31.23@2x (1).png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/CleanShot 2025-03-11 at 16.31.23@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/CleanShot 2025-03-11 at 16.31.23@2x.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/GCP_Advanced_options.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/GCP_Advanced_options.PNG
--------------------------------------------------------------------------------
/docs/.gitbook/assets/GCP_Management.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/GCP_Management.PNG
--------------------------------------------------------------------------------
/docs/.gitbook/assets/GCP_Startup_script.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/GCP_Startup_script.PNG
--------------------------------------------------------------------------------
/docs/.gitbook/assets/NoPorts Policy Diagrams.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/NoPorts Policy Diagrams.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/NoPorts-Connection-Diagram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/NoPorts-Connection-Diagram.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/OCI_CloudInitScript.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/OCI_CloudInitScript.PNG
--------------------------------------------------------------------------------
/docs/.gitbook/assets/OCI_PasteCloudInit.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/OCI_PasteCloudInit.PNG
--------------------------------------------------------------------------------
/docs/.gitbook/assets/OCI_ShowAdvancedOptions.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/OCI_ShowAdvancedOptions.PNG
--------------------------------------------------------------------------------
/docs/.gitbook/assets/Screenshot 2024-03-12 at 12.57.14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/Screenshot 2024-03-12 at 12.57.14.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/Screenshot 2024-07-03 at 19.52.04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/Screenshot 2024-07-03 at 19.52.04.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/Screenshot from 2024-04-29 18-05-59.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/Screenshot from 2024-04-29 18-05-59.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/Screenshot from 2024-04-29 18-09-27.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/Screenshot from 2024-04-29 18-09-27.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/atPlanes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/atPlanes.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/atPlatform Diagram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/atPlatform Diagram.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/overview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/overview.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/smb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/smb.png
--------------------------------------------------------------------------------
/docs/.gitbook/assets/smba.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/.gitbook/assets/smba.png
--------------------------------------------------------------------------------
/docs/.gitbook/includes/activate-cli-device-unix.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: activate-cli-device-unix
3 | ---
4 |
5 | This command activates your atSign and prompts you to enter an OTP. This is only done during the setup of a brand new atsign.
6 |
7 | ```
8 | ~/.local/bin/at_activate -a @_device
9 | ```
10 |
11 | ### Enter the One Time Password (OTP) & Check your SPAM/PROMOTIONS folders
12 |
13 | at\_activate will pause and wait for the input of a one time pin (OTP) sent to your email or phone number.
14 |
15 | Once activated, the management keys will be saved in `~/.atsign/keys`.
16 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/activate-cli-device-windows.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: activate-cli-device-windows
3 | ---
4 |
5 | This command activates your atSign and prompts you to enter an OTP. This is only done during the setup of a brand new atsign.
6 |
7 | ```
8 | C:\\Program\ Files\\NoPorts\\at_activate.exe otp -a @_device
9 | ```
10 |
11 | ### Enter the One Time Password (OTP) & Check your SPAM/PROMOTIONS folders
12 |
13 | at\_activate will pause and wait for the input of a one time pin (OTP) sent to your email or phone number.
14 |
15 | Once activated, the management keys will be saved in `~\.atsign\keys`.
16 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/apkam-1-unix.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: apkam-1-unix
3 | ---
4 |
5 | Run the following command. It should output a 6-character passcode.
6 |
7 | ```bash
8 | ~/.local/bin/at_activate otp -a @_device
9 | ```
10 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/apkam-2-unix.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: apkam-2-unix
3 | ---
4 |
5 | ~/.local/bin/at_activate enroll -a @<REPLACE>_device \
6 | -s <PASSCODE> \
7 | -p noports \
8 | -k ~/.atsign/keys/@<REPLACE>_device_key.atKeys \
9 | -d <DEVICE_NAME> \
10 | -n "sshnp:rw,sshrvd:rw"
11 |
12 |
13 | ### Once you see this text, you're ready to continue to the next step.
14 |
15 | ```
16 | Submitting enrollment request
17 | Enrollment ID: ---------------------
18 | Waiting for approval; will check every 10 seconds
19 | ```
20 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/apkam-2-windows.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: apkam-2-windows
3 | ---
4 |
5 | ~/.local/bin/at_activate enroll -a @<REPLACE>_device \
6 | -s <PASSCODE> \
7 | -p noports \
8 | -k ~/.atsign/keys/@<REPLACE>_device_key.atKeys \
9 | -d <DEVICE_NAME> \
10 | -n "sshnp:rw,sshrvd:rw"
11 |
12 |
13 | ### Once you see this text, you're ready to continue to the next step.
14 |
15 | ```
16 | Submitting enrollment request
17 | Enrollment ID: ---------------------
18 | Waiting for approval; will check every 10 seconds
19 | ```
20 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/apkam-3-unix.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: apkam-3-unix
3 | ---
4 |
5 | Run the following command
6 |
7 | ```bash
8 | ~/.local/bin/at_activate approve -a @_device --arx noports --drx
9 | ```
10 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/apkam-3-windows.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: apkam-3-windows
3 | ---
4 |
5 | Run the following command
6 |
7 | ```bash
8 | C:\\Program\ Files\\NoPorts\\at_activate.exe approve -a @_device --arx noports --drx
9 | ```
10 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/client-installation-complete.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: client-installation complete
3 | ---
4 |
5 | {% hint style="success" %}
6 | Your client machine software installation is completed. Now, on to the device/server!
7 | {% endhint %}
8 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/desktop-app-release-table.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Desktop App Release Table
3 | ---
4 |
5 |
6 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/device-activate-preamble.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: device-activate-preamble
3 | ---
4 |
5 | {% hint style="info" %}
6 | Even though this atSign is for the device, we recommend activating it from your client.
7 |
8 | More info: [why-activate-the-device-atsign-on-the-client.md](../../installation-faq/why-activate-the-device-atsign-on-the-client.md "mention")
9 | {% endhint %}
10 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/device-warning-setup-client-first.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: device-warning setup client first
3 | ---
4 |
5 | {% hint style="danger" %}
6 | If you don't already have a NoPorts client setup, start there before setting up the device.
7 | {% endhint %}
8 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/get-atsigns-from-reg-warning.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: get-atsigns-from-reg-warning
3 | ---
4 |
5 | {% hint style="danger" %}
6 | If you don't own a pair of atSigns/addresses, please visit [the registrar](https://my.noports.com/no-ports-plans) before continuing
7 | {% endhint %}
8 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/if-youve-activated-your-cl....md:
--------------------------------------------------------------------------------
1 | ---
2 | title: If you've activated your cl...
3 | ---
4 |
5 | {% hint style="warning" %}
6 | If you've activated your **client** atSign on another device already, this step will not work. Instead, follow this guide: [reuse-your-client-atsign-on-another-machine](../../installation-faq/reuse-your-client-atsign-on-another-machine/ "mention")
7 | {% endhint %}
8 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/installation-complete-visit-usage.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Installation Complete - visit usage
3 | ---
4 |
5 | {% hint style="success" %}
6 | Installation Complete!\
7 | \
8 | You are ready to use No Ports, visit [usage](../../usage/ "mention")!
9 | {% endhint %}
10 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/installation-legend.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Installation legend
3 | ---
4 |
5 | | Legend | Meaning |
6 | | ---------- | ------------------------- |
7 | | :desktop: | Client side |
8 | | :printer: | Device side |
9 | | \ | Fill in with your details |
10 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/mac-linux-full-install-video.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Mac/Linux full install video
3 | ---
4 |
5 | {% embed url="https://player.vimeo.com/video/1004237823?amp;app_id=58479&autopause=0&badge=0&byline=0&player_id=0&portrait=0&title=0" %}
6 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/universal.sh-download-command (1).md:
--------------------------------------------------------------------------------
1 | ---
2 | title: universal.sh download command
3 | ---
4 |
5 | ```bash
6 | curl -L https://github.com/atsign-foundation/noports/releases/latest/download/universal.sh -o universal.sh
7 | ```
8 |
9 | To check if the installation downloaded correctly:
10 |
11 | ```bash
12 | ls | grep -w "universal.sh"
13 | ```
14 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/universal.sh-download-command.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: universal.sh download command
3 | ---
4 |
5 | ```bash
6 | curl -L https://github.com/atsign-foundation/noports/releases/latest/download/universal.sh -o universal.sh
7 | ```
8 |
9 | To check if the installation downloaded correctly:
10 |
11 | ```bash
12 | stat universal.sh
13 | ```
14 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/universal.sh-execute (1).md:
--------------------------------------------------------------------------------
1 | ---
2 | title: universal.sh execute
3 | ---
4 |
5 | Make the script executable and run the script.
6 |
7 | ```bash
8 | chmod u+x universal.sh
9 | ./universal.sh
10 | ```
11 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/universal.sh-execute-activate-only.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: universal.sh execute - activate only
3 | ---
4 |
5 | Type in `client` when asked for what type of install. You can either complete the install to have full client support, or press `ctrl + c` when it asks for more information to skip the rest of the client installation.
6 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/universal.sh-execute-device-detail.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: universal.sh execute - device detail
3 | ---
4 |
5 | The script will guide you through the installation process. It will prompt you for the information you need. Make sure you type in `device` when it asks what type of installation.\
6 | \
7 | **You will need the client atSign, device atSign and the device name. making sure they match your earlier choices.**
8 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/universal.sh-execute.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: universal.sh execute
3 | ---
4 |
5 | Make the script executable and run the script.
6 |
7 | ```bash
8 | chmod u+x universal.sh
9 | ./universal.sh
10 | ```
11 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/universal.sh-preamble.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: universal.sh preamble
3 | ---
4 |
5 | First, make sure that you have [curl](https://curl.se) available on your system, curl is a common shell utility.
6 |
7 | The following command will download the `universal.sh` bash installer into your current directory:
8 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/unversal.sh-execute-client-details.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: unversal.sh execute - client details
3 | ---
4 |
5 | Type in **`client`** when asked for what type of install. Continue following along with the instructions provided with the installer until the installation is complete.
6 |
7 | ### Useful tips when answering the client installation
8 |
9 | Your client atSign should look like : `@sshnp_client`
10 |
11 | Your device atSign should look like: `@sshnp_device`
12 |
13 | [Device name](../../installation-faq/installation-details.md#device-names) should look like: `my_host, pi3, home_server_2`
14 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/windows-activate-1.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: windows-activate-1
3 | ---
4 |
5 |
6 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/windows-activate-2.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: windows-activate-2
3 | ---
4 |
5 |
6 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/windows-activate-3.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: windows-activate-3
3 | ---
4 |
5 |
6 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/windows-activate-4.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: windows-activate-4
3 | ---
4 |
5 |
6 |
--------------------------------------------------------------------------------
/docs/.gitbook/includes/windows-download-installer.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: windows-download-installer
3 | ---
4 |
5 | ## Step 1: Download the installer
6 |
7 | Download the installer [from GitHub](https://github.com/atsign-foundation/noports/releases/download/v5.8.7/NoPortsInstaller-windows-x64.zip). Then unzip the file.
8 |
--------------------------------------------------------------------------------
/docs/developer-notes/AtsignDataPlane.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/docs/developer-notes/AtsignDataPlane.png
--------------------------------------------------------------------------------
/docs/installation-faq/how-to-generate-ssh-keys.md:
--------------------------------------------------------------------------------
1 | ---
2 | icon: key
3 | description: Using ssh-keygen
4 | ---
5 |
6 | # How to generate SSH keys
7 |
8 | SSH uses keys to authenticate as well as having a fallback of using passwords, but using keys is easier and more secure than "mypassword!". If you already are a seasoned user of SSH then you might have keys already, but if not, then on the client machine you can create a key pair using ssh-keygen.
9 |
10 | Example ssh-keygen command to create SSH Key Pair
11 |
12 | ```
13 | ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519
14 | ```
15 |
16 | ##
17 |
--------------------------------------------------------------------------------
/docs/installation-faq/installation-details.md:
--------------------------------------------------------------------------------
1 | ---
2 | icon: memo-circle-info
3 | description: >-
4 | Each device atSign can be used for multiple devices and so each device needs a
5 | unique name.
6 | ---
7 |
8 | # How to name a device
9 |
10 | The device name is limited to alphanumeric [snake case](https://www.tuple.nl/knowledge-base/snake-case) (lowercase alphanumeric separated by \_ ) up to 36 characters.
11 |
12 | Example snake case device names
13 |
14 | ```
15 | my_host
16 | canary02
17 | oci_mail_0001
18 | dc_001_row_009_rack_0067_ru_014
19 | ```
20 |
21 |
--------------------------------------------------------------------------------
/docs/installation-faq/reuse-your-client-atsign-on-another-machine/old-machine-activate-from-the-command-line.md:
--------------------------------------------------------------------------------
1 | # Old machine: activate from the command line
2 |
3 | {% hint style="info" %}
4 | Make sure to replace the appropriate values:\
5 | `` to your client atSign\
6 | `` with the device name from step 2
7 | {% endhint %}
8 |
9 | ### Step 1) Generate an OTP (one time pin code)
10 |
11 | ```
12 | ~/.local/bin/at_activate otp -a @
13 | ```
14 |
15 | ### Step 3) Approve the request
16 |
17 | ```
18 | ~/.local/bin/at_activate approve -a @ \
19 | --arx noports \
20 | --drx
21 | ```
22 |
23 |
--------------------------------------------------------------------------------
/docs/installation/custom-os-device-installs/README.md:
--------------------------------------------------------------------------------
1 | ---
2 | icon: rectangles-mixed
3 | ---
4 |
5 | # Custom OS/Device Installs
6 |
7 | {% content-ref url="ipfire.md" %}
8 | [ipfire.md](ipfire.md)
9 | {% endcontent-ref %}
10 |
--------------------------------------------------------------------------------
/docs/installation/linux/README.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: Full installation of client and server software on two Linux machines
3 | icon: linux
4 | ---
5 |
6 | # Linux Installation Guide
7 |
8 | ### Client Only Installation
9 |
10 | If you want to setup a Linux client, use this guide:
11 |
12 | {% content-ref url="cli-client.md" %}
13 | [cli-client.md](cli-client.md)
14 | {% endcontent-ref %}
15 |
16 | ### Device Only Installation
17 |
18 | If you want to setup a Linux device, use this guide:
19 |
20 | {% content-ref url="device.md" %}
21 | [device.md](device.md)
22 | {% endcontent-ref %}
23 |
24 |
--------------------------------------------------------------------------------
/docs/installation/linux/cli-client.md:
--------------------------------------------------------------------------------
1 | # Linux Cli Client Installation
2 |
3 | ### Step 1: Download the Installer
4 |
5 | {% include "../../.gitbook/includes/universal.sh-download-command.md" %}
6 |
7 | ### Step 2: Run the Installer
8 |
9 | {% include "../../.gitbook/includes/universal.sh-execute.md" %}
10 |
11 | ### Step 3: Activate your client atSign
12 |
13 | {% include "../../.gitbook/includes/activate-cli-device-unix.md" %}
14 |
15 |
--------------------------------------------------------------------------------
/docs/installation/macos/cli-client.md:
--------------------------------------------------------------------------------
1 | # MacOS CLI Client Installation
2 |
3 | ### Step 1: Download the Installer
4 |
5 | {% include "../../.gitbook/includes/universal.sh-download-command.md" %}
6 |
7 | ### Step 2: Run the Installer
8 |
9 | {% include "../../.gitbook/includes/universal.sh-execute.md" %}
10 |
11 | ### Step 3: Activate your client atSign
12 |
13 | {% include "../../.gitbook/includes/activate-cli-client-unix.md" %}
14 |
15 |
--------------------------------------------------------------------------------
/docs/integrations/README.md:
--------------------------------------------------------------------------------
1 | ---
2 | icon: rectangles-mixed
3 | ---
4 |
5 | # Integrations
6 |
7 |
--------------------------------------------------------------------------------
/docs/reference/policy.md:
--------------------------------------------------------------------------------
1 | ---
2 | icon: users-rectangle
3 | description: >-
4 | A flexible suite of policy management tools. Use a standalone database to
5 | store and manage policies using our administration interface, or integrate it
6 | with your existing policy database or service.
7 | ---
8 |
9 | # NoPorts Policy Service
10 |
11 |
12 |
13 | 
High level overview of the NoPorts architecture
14 |
15 | The NoPorts Policy Service is currently in alpha status. [Schedule a call](https://calendly.com/noports/installation-help) with one of our engineers to become an alpha tester.
16 |
--------------------------------------------------------------------------------
/images/image1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/images/image1.png
--------------------------------------------------------------------------------
/images/image2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/images/image2.png
--------------------------------------------------------------------------------
/images/image3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/images/image3.png
--------------------------------------------------------------------------------
/images/image4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/images/image4.png
--------------------------------------------------------------------------------
/images/image5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/images/image5.png
--------------------------------------------------------------------------------
/images/image6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/images/image6.png
--------------------------------------------------------------------------------
/images/image7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/images/image7.png
--------------------------------------------------------------------------------
/melos.yaml:
--------------------------------------------------------------------------------
1 | name: noports
2 |
3 | packages:
4 | - packages/dart/noports_core
5 | - packages/dart/sshnoports
6 | - packages/dart/npt_flutter
7 |
8 | command:
9 | bootstrap:
10 | runPubGetInParallel: false
11 | hooks:
12 | post: |
13 | dart run melos exec \
14 | --scope="noports_core" \
15 | --scope="sshnoports" \
16 | --scope="npt_flutter" \
17 | -- "dart run build_runner build --delete-conflicting-outputs"
18 |
--------------------------------------------------------------------------------
/packages/c/.clang-format:
--------------------------------------------------------------------------------
1 | ---
2 | Language: Cpp # Covers C and C++
3 | BasedOnStyle: LLVM # Added this to ensure a sane set of defaults
4 | ColumnLimit: 120 # LLVM uses 80, but we mostly use 120 at Atsign
5 |
--------------------------------------------------------------------------------
/packages/c/.clangd:
--------------------------------------------------------------------------------
1 | CompileFlags:
2 | # Use gcc in development for better diagnostics
3 | # & Ensure that compilation doesn't fail due to warnings
4 | Compiler: gcc
5 | Add: [-Wno-error, -xc, -std=c99, -DATSDK_DEBUG_MODE]
6 |
7 | Index:
8 | # Enable background indexing for better symbol information
9 | Background: Build
10 |
11 | Diagnostics:
12 | # IWYU for header files
13 | UnusedIncludes: Strict
14 | # MissingIncludes: Strict # not all versions of clangd support the appropriate pragmas to suppress warnings generated by this
15 | # Avoid running slow clang-tidy checks
16 | ClangTidy:
17 | FastCheckFilter: Loose
18 |
--------------------------------------------------------------------------------
/packages/c/.gitignore:
--------------------------------------------------------------------------------
1 | .cache
2 | build*
3 |
4 | compile_commands.json
5 |
6 | just.env
7 |
8 | /logs/
9 | core
10 | Testing/
11 |
--------------------------------------------------------------------------------
/packages/c/3rdparty/argparse/README.md:
--------------------------------------------------------------------------------
1 | # 3rdparty/argparse
2 |
3 | > Copyright (c) 2012-2013 Yecheng Fu
4 |
5 | The files within this directory are from the [argparse](https://github.com/cofyc/argparse) project.
6 | Their [license](https://github.com/cofyc/argparse/blob/master/LICENSE) hereby grants any person to redistribute and/or modify this software under the terms of the MIT license.
7 |
--------------------------------------------------------------------------------
/packages/c/cmake/CPackSourceDeps.cmake:
--------------------------------------------------------------------------------
1 | file(
2 | COPY "@CMAKE_BINARY_DIR@/_deps/cjson-src"
3 | DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/deps
4 | )
5 | file(
6 | COPY "@CMAKE_BINARY_DIR@/_deps/mbedtls-src"
7 | DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/deps
8 | )
9 | file(
10 | COPY "@CMAKE_BINARY_DIR@/_deps/atsdk-src"
11 | DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/deps
12 | )
13 |
--------------------------------------------------------------------------------
/packages/c/cmake/atsdk.cmake:
--------------------------------------------------------------------------------
1 | option(NOPORTS_ATSDK_PATH "Local atsdk path" OFF)
2 | if(NOT atsdk_FOUND)
3 | message(STATUS "[atsdk] fetching package...")
4 | include(FetchContent)
5 | if(NOPORTS_ATSDK_PATH)
6 | FetchContent_Declare(
7 | atsdk
8 | SOURCE_DIR
9 | ${CMAKE_SOURCE_DIR}/${NOPORTS_ATSDK_PATH}
10 | )
11 | else()
12 | FetchContent_Declare(
13 | atsdk
14 | GIT_REPOSITORY https://github.com/atsign-foundation/at_c.git
15 | GIT_TAG 38747eba7a53dca1c9b0494c5b0f4ba13c97a834
16 | )
17 | endif()
18 | FetchContent_MakeAvailable(atsdk)
19 | install(
20 | TARGETS atclient atchops atlogger atauth atcommons
21 | )
22 | endif()
23 |
--------------------------------------------------------------------------------
/packages/c/graceful-shutdown-tool/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.19)
2 | set(CMAKE_C_STANDARD 99)
3 | cmake_policy(SET CMP0135 NEW)
4 | project(graceful-shutdown-tool VERSION 1.0.12 LANGUAGES C)
5 |
6 | include(FetchContent)
7 | include(GNUInstallDirs)
8 | cmake_policy(SET CMP0135 NEW)
9 |
10 | include(${CMAKE_CURRENT_SOURCE_DIR}/../cmake/atsdk.cmake)
11 | add_executable(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/main.c)
12 |
13 | target_link_libraries(
14 | ${PROJECT_NAME}
15 | PRIVATE atclient atchops atlogger cjson argparse::argparse-static
16 | )
17 |
--------------------------------------------------------------------------------
/packages/c/just.template.env:
--------------------------------------------------------------------------------
1 | C_COMPILER=gcc
2 | GENERATOR=Ninja
3 | # Used by memcheck & graceful shutdown tool in justfile
4 | FROM_ATSIGN=
5 | TO_ATSIGN=
6 | DEVICE_NAME=
7 |
--------------------------------------------------------------------------------
/packages/c/srv/tests/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | # loop through every .c file in this directory
2 | file(GLOB_RECURSE files ${CMAKE_CURRENT_LIST_DIR}/test_*.c)
3 |
4 | foreach(file ${files})
5 | # ${filename} - without `.c`
6 | get_filename_component(filename ${file} NAME)
7 | string(REPLACE ".c" "" filename ${filename})
8 |
9 | add_executable(${filename} ${file})
10 | target_link_libraries(${filename} PRIVATE
11 | srv_lib
12 | atchops::atchops
13 | )
14 | add_test(NAME ${filename} COMMAND $)
15 | endforeach()
16 |
--------------------------------------------------------------------------------
/packages/c/sshnpd/include/sshnpd/file_utils.h:
--------------------------------------------------------------------------------
1 | #ifndef SSH_KEY_UTIL_H
2 | #define SSH_KEY_UTIL_H
3 |
4 | #include
5 |
6 | enum supported_key_prefix {
7 | SKP_NONE,
8 | SKP_ESN, // ecdsa-sha2-nistp
9 | SKP_RS2, // rsa-sha2-
10 | SKP_RSA, // ssh-rsa
11 | SKP_ED9, // ssh-ed25519
12 | };
13 |
14 | #define SUPPORTED_KEY_PREFIX_LEN 5
15 |
16 | typedef struct {
17 | FILE *authkeys_file;
18 | char *authkeys_filename;
19 | char *permissions; // not required for deauthorize
20 | char *key;
21 | } authkeys_params;
22 |
23 | int authorize_ssh_public_key(authkeys_params *params);
24 | #endif
25 |
--------------------------------------------------------------------------------
/packages/c/sshnpd/include/sshnpd/handle_npt_request.h:
--------------------------------------------------------------------------------
1 | #ifndef HANDLE_NPT_REQUEST_H
2 | #define HANDLE_NPT_REQUEST_H
3 | #include "sshnpd/params.h"
4 | #include
5 |
6 | void handle_npt_request(atclient *atclient, sshnpd_params *params, bool *is_child_process,
7 | atclient_monitor_message *message, atchops_rsa_key_private_key signing_key);
8 | #endif
9 |
--------------------------------------------------------------------------------
/packages/c/sshnpd/include/sshnpd/handle_ping.h:
--------------------------------------------------------------------------------
1 | #ifndef HANDLE_PING_H
2 | #define HANDLE_PING_H
3 | #include "sshnpd/params.h"
4 | #include
5 | void handle_ping(sshnpd_params *params, atclient_monitor_message *message, char *ping_response, atclient *atclient);
6 | #endif
7 |
--------------------------------------------------------------------------------
/packages/c/sshnpd/include/sshnpd/handle_ssh_request.h:
--------------------------------------------------------------------------------
1 | #ifndef HANDLE_SSH_REQUEST_H
2 | #define HANDLE_SSH_REQUEST_H
3 | #include "sshnpd/params.h"
4 | #include
5 |
6 | void handle_ssh_request(atclient *atclient, sshnpd_params *params, bool *is_child_process,
7 | atclient_monitor_message *message, atchops_rsa_key_private_key signing_key);
8 |
9 | #endif
10 |
--------------------------------------------------------------------------------
/packages/c/sshnpd/include/sshnpd/handle_sshpublickey.h:
--------------------------------------------------------------------------------
1 | #ifndef HANDLE_SSHPUBLICKEY_H
2 | #define HANDLE_SSHPUBLICKEY_H
3 | #include "sshnpd/params.h"
4 | #include
5 | void handle_sshpublickey(sshnpd_params *params, atclient_monitor_message *message, FILE *authkeys_file,
6 | char *authkeys_filename);
7 | #endif
8 |
--------------------------------------------------------------------------------
/packages/c/sshnpd/include/sshnpd/run_srv_process.h:
--------------------------------------------------------------------------------
1 | #ifndef RUN_SRV_H
2 | #define RUN_SRV_H
3 |
4 | #include
5 | #include
6 | #include
7 |
8 | int run_srv_process(const char *srvd_host, uint16_t srvd_port, const char *requested_host, uint16_t requested_port,
9 | bool authenticate_to_rvd, char *rvd_auth_string, bool encrypt_rvd_traffic, bool multi,
10 | unsigned char *session_aes_key_encrypted, unsigned char *session_iv_encrypted);
11 | #endif
12 |
--------------------------------------------------------------------------------
/packages/c/sshnpd/include/sshnpd/version.h:
--------------------------------------------------------------------------------
1 | #ifndef SSHNPD_VERSION_H
2 | #define SSHNPD_VERSION_H
3 | #define SSHNPD_VERSION "1.0.12"
4 | #endif
5 |
--------------------------------------------------------------------------------
/packages/c/sshnpd/src/at_activate.c:
--------------------------------------------------------------------------------
1 | #include
2 |
3 | int main(int argc, char **argv) { return at_activate(argc, (const char **)argv); }
4 |
--------------------------------------------------------------------------------
/packages/c/sshnpd/tests/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | file(GLOB_RECURSE files ${CMAKE_CURRENT_LIST_DIR}/test_*.c)
2 | foreach(file ${files})
3 | # ${filename} - without `.c`
4 | get_filename_component(filename ${file} NAME)
5 | string(REPLACE ".c" "" filename ${filename})
6 |
7 | add_executable(${filename} ${file})
8 | target_link_libraries(
9 | ${filename}
10 | PRIVATE sshnpd-lib argparse::argparse-static atlogger
11 | )
12 | add_test(NAME ${filename} COMMAND $)
13 | endforeach()
14 |
--------------------------------------------------------------------------------
/packages/c/sshnpd/tools/debug_build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | set -eu
3 | FULL_PATH_TO_SCRIPT="$(realpath "${BASH_SOURCE[0]}")"
4 | SCRIPT_DIRECTORY="$(dirname "$FULL_PATH_TO_SCRIPT")"
5 | cd "$SCRIPT_DIRECTORY"
6 | cd ..
7 |
8 | cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=gcc -DBUILD_SHARED_LIBS=off -DCMAKE_C_FLAGS="-Wno-error -pthread -lrt"
9 |
10 | cmake --build build
11 |
--------------------------------------------------------------------------------
/packages/dart/noports_core/.gitignore:
--------------------------------------------------------------------------------
1 | pubspec.lock
--------------------------------------------------------------------------------
/packages/dart/noports_core/lib/admin.dart:
--------------------------------------------------------------------------------
1 | library noports_core_admin;
2 |
3 | export 'src/admin/models.dart';
4 | export 'src/admin/interface.dart';
5 | export 'src/admin/impl.dart';
6 |
--------------------------------------------------------------------------------
/packages/dart/noports_core/lib/npa.dart:
--------------------------------------------------------------------------------
1 | library noports_core_npa;
2 |
3 | export 'src/npa/npa.dart';
4 | export 'src/npa/npa_impl.dart';
5 | export 'src/npa/npa_params.dart';
6 | export 'src/npa/npa_rpcs.dart';
7 | export 'src/common/types.dart';
8 |
--------------------------------------------------------------------------------
/packages/dart/noports_core/lib/npt.dart:
--------------------------------------------------------------------------------
1 | library noports_core_npt;
2 |
3 | export 'src/npt/npt.dart';
4 | export 'src/sshnp/models/sshnp_params.dart';
5 |
--------------------------------------------------------------------------------
/packages/dart/noports_core/lib/src/common/noports_exception.dart:
--------------------------------------------------------------------------------
1 | class SshnpException implements Exception {
2 | final Object message;
3 | final Object? error;
4 | final StackTrace? stackTrace;
5 |
6 | SshnpException(this.message, {this.error, this.stackTrace});
7 |
8 | @override
9 | String toString() {
10 | return message.toString();
11 | }
12 |
13 | String toVerboseString() {
14 | final sb = StringBuffer();
15 | sb.write(message);
16 | if (error != null) {
17 | sb.write('\n');
18 | sb.write('Error: $error');
19 | }
20 | if (stackTrace != null) {
21 | sb.write('\n');
22 | sb.write('Stack Trace: $stackTrace');
23 | }
24 | return sb.toString();
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/packages/dart/noports_core/lib/src/common/openssh_binary_path.dart:
--------------------------------------------------------------------------------
1 | import 'package:noports_core/src/common/io_types.dart';
2 |
3 | const String _windowsOpensshPath = r'C:\Windows\System32\OpenSSH\ssh.exe';
4 | const String _unixOpensshPath = '/usr/bin/ssh';
5 |
6 | String get opensshBinaryPath =>
7 | Platform.isWindows ? _windowsOpensshPath : _unixOpensshPath;
8 |
--------------------------------------------------------------------------------
/packages/dart/noports_core/lib/src/srvd/build_env.dart:
--------------------------------------------------------------------------------
1 | import 'dart:io';
2 |
3 | class BuildEnv {
4 | static final bool enableSnoop =
5 | (Platform.environment['ENABLE_SNOOP'] ?? "false").toLowerCase() == 'true';
6 | }
7 |
--------------------------------------------------------------------------------
/packages/dart/noports_core/lib/src/sshnp/models/sshnp_device_list.dart:
--------------------------------------------------------------------------------
1 | class SshnpDeviceList {
2 | final Map info = {};
3 | final Set activeDevices = {};
4 |
5 | SshnpDeviceList();
6 |
7 | void setActive(String device) {
8 | if (info.containsKey(device)) {
9 | activeDevices.add(device);
10 | }
11 | }
12 |
13 | Set get inactiveDevices =>
14 | info.keys.toSet().difference(activeDevices);
15 |
16 | void add(SshnpDeviceList o) {
17 | info.addEntries(o.info.entries);
18 | activeDevices.addAll(o.activeDevices);
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/packages/dart/noports_core/lib/src/sshnp/util/srvd_channel/notification_request_message.dart:
--------------------------------------------------------------------------------
1 | import 'dart:convert';
2 |
3 | class SocketRendezvousRequestMessage {
4 | late String sessionId;
5 | late String atSignA;
6 | late String atSignB;
7 | late bool authenticateSocketA;
8 | late bool authenticateSocketB;
9 | late String clientNonce;
10 |
11 | @override
12 | String toString() {
13 | Map m = {};
14 | m['sessionId'] = sessionId;
15 | m['atSignA'] = atSignA;
16 | m['atSignB'] = atSignB;
17 | m['authenticateSocketA'] = authenticateSocketA;
18 | m['authenticateSocketB'] = authenticateSocketB;
19 | m['clientNonce'] = clientNonce;
20 | return jsonEncode(m);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/packages/dart/noports_core/lib/src/sshnp/util/srvd_channel/srvd_exec_channel.dart:
--------------------------------------------------------------------------------
1 | import 'package:noports_core/src/common/io_types.dart';
2 | import 'package:noports_core/src/sshnp/util/srvd_channel/srvd_channel.dart';
3 | import 'package:noports_core/srv.dart';
4 |
5 | class SrvdExecChannel extends SrvdChannel {
6 | SrvdExecChannel({
7 | required super.atClient,
8 | required super.params,
9 | required super.sessionId,
10 | }) : super(srvGenerator: Srv.exec);
11 | }
12 |
--------------------------------------------------------------------------------
/packages/dart/noports_core/lib/src/sshnp/util/ssh_session_handler/ssh_session_handler.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 | import 'package:dartssh2/dartssh2.dart';
3 | import 'package:meta/meta.dart';
4 |
5 | mixin SshSessionHandler {
6 | @protected
7 | @visibleForTesting
8 | Future startInitialTunnelSession({
9 | required String ephemeralKeyPairIdentifier,
10 | int? localRvPort,
11 | SSHSocket? sshSocket,
12 | });
13 |
14 | @protected
15 | @visibleForTesting
16 | Future startUserSession();
17 | }
18 |
--------------------------------------------------------------------------------
/packages/dart/noports_core/lib/src/sshnp/util/sshnp_ssh_key_handler/sshnp_dart_ssh_key_handler.dart:
--------------------------------------------------------------------------------
1 | import 'package:noports_core/sshnp_foundation.dart';
2 |
3 | mixin SshnpDartSshKeyHandler implements SshnpKeyHandler {
4 | @override
5 | DartSshKeyUtil get keyUtil => _sshKeyUtil;
6 | final DartSshKeyUtil _sshKeyUtil = DartSshKeyUtil();
7 |
8 | @override
9 | AtSshKeyPair? identityKeyPair;
10 | }
11 |
--------------------------------------------------------------------------------
/packages/dart/noports_core/lib/src/sshnp/util/sshnp_ssh_key_handler/sshnp_ssh_key_handler.dart:
--------------------------------------------------------------------------------
1 | import 'package:meta/meta.dart';
2 | import 'package:noports_core/utils.dart';
3 |
4 | mixin SshnpKeyHandler {
5 | @protected
6 | @visibleForTesting
7 | AtSshKeyUtil get keyUtil;
8 |
9 | @protected
10 | @visibleForTesting
11 | AtSshKeyPair? get identityKeyPair;
12 | }
13 |
--------------------------------------------------------------------------------
/packages/dart/noports_core/lib/src/version.dart:
--------------------------------------------------------------------------------
1 | // Generated code. Do not modify.
2 | const packageVersion = '6.4.0';
3 |
--------------------------------------------------------------------------------
/packages/dart/noports_core/lib/srv.dart:
--------------------------------------------------------------------------------
1 | library noports_core_srv;
2 |
3 | export 'src/srv/srv.dart';
4 |
--------------------------------------------------------------------------------
/packages/dart/noports_core/lib/srvd.dart:
--------------------------------------------------------------------------------
1 | library noports_core_srvd;
2 |
3 | export 'src/srvd/srvd.dart';
4 | export 'src/srvd/srvd_params.dart';
5 |
--------------------------------------------------------------------------------
/packages/dart/noports_core/lib/sshnp.dart:
--------------------------------------------------------------------------------
1 | library noports_core_sshnp;
2 |
3 | export 'src/sshnp/sshnp.dart';
4 | export 'src/sshnp/models/sshnp_result.dart';
5 | export 'src/sshnp/models/sshnp_params.dart';
6 | export 'src/sshnp/models/sshnp_device_list.dart';
7 | export 'src/common/types.dart';
8 |
--------------------------------------------------------------------------------
/packages/dart/noports_core/lib/sshnp_params.dart:
--------------------------------------------------------------------------------
1 | library noports_core_sshnp_params;
2 |
3 | export 'src/sshnp/models/config_file_repository.dart';
4 | export 'src/sshnp/models/config_key_repository.dart';
5 | export 'src/sshnp/models/sshnp_params.dart';
6 | export 'src/sshnp/models/sshnp_arg.dart';
7 | export 'src/common/types.dart';
8 |
--------------------------------------------------------------------------------
/packages/dart/noports_core/lib/sshnpd.dart:
--------------------------------------------------------------------------------
1 | library noports_core_sshnpd;
2 |
3 | export 'src/sshnpd/sshnpd.dart';
4 | export 'src/sshnpd/sshnpd_params.dart';
5 | export 'src/common/types.dart';
6 |
--------------------------------------------------------------------------------
/packages/dart/noports_core/lib/utils.dart:
--------------------------------------------------------------------------------
1 | library noports_core_utils;
2 |
3 | export 'src/common/at_ssh_key_util/at_ssh_key_util.dart';
4 | export 'src/common/default_args.dart';
5 | // export 'src/common/file_system_utils.dart';
6 | export 'src/common/types.dart';
7 | export 'src/common/validation_utils.dart';
8 |
--------------------------------------------------------------------------------
/packages/dart/noports_core/lib/version.dart:
--------------------------------------------------------------------------------
1 | export 'src/version.dart';
2 |
--------------------------------------------------------------------------------
/packages/dart/noports_core/test/version_test.dart:
--------------------------------------------------------------------------------
1 | import 'package:noports_core/src/version.dart';
2 | import 'package:test/test.dart';
3 |
4 | void main() {
5 | test('version exists', () {
6 | expect(packageVersion, isA());
7 | });
8 | }
9 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
9 | # Remember to never publicly share your keystore.
10 | # See https://flutter.dev/to/reference-keystore
11 | key.properties
12 | **/*.keystore
13 | **/*.jks
14 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/android/app/src/main/kotlin/com/example/npt_flutter/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.example.npt_flutter
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity()
6 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/android/app/src/main/res/drawable-v21/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/android/app/src/main/res/mipmap-anydpi-v26/launcher_icon.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/android/app/src/main/res/mipmap-hdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/android/app/src/main/res/mipmap-hdpi/launcher_icon.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/android/app/src/main/res/mipmap-mdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/android/app/src/main/res/mipmap-mdpi/launcher_icon.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/android/build.gradle:
--------------------------------------------------------------------------------
1 | allprojects {
2 | repositories {
3 | google()
4 | mavenCentral()
5 | }
6 | }
7 |
8 | rootProject.buildDir = "../build"
9 | subprojects {
10 | project.buildDir = "${rootProject.buildDir}/${project.name}"
11 | }
12 | subprojects {
13 | project.evaluationDependsOn(":app")
14 | }
15 |
16 | tasks.register("clean", Delete) {
17 | delete rootProject.buildDir
18 | }
19 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | zipStoreBase=GRADLE_USER_HOME
4 | zipStorePath=wrapper/dists
5 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip
6 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/assets/at.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/assets/at.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/assets/authenticator-approval-mockup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/assets/authenticator-approval-mockup.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/assets/authenticator-mockup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/assets/authenticator-mockup.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/assets/logo.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/assets/noports-icon64-dark.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/assets/noports-icon64-dark.ico
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/assets/noports-icon64-dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/assets/noports-icon64-dark.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/assets/noports-icon64-light.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/assets/noports-icon64-light.ico
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/assets/noports-icon64-light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/assets/noports-icon64-light.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/devtools_options.yaml:
--------------------------------------------------------------------------------
1 | description: This file stores settings for Dart & Flutter DevTools.
2 | documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
3 | extensions:
4 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | import Flutter
2 | import UIKit
3 |
4 | @main
5 | @objc class AppDelegate: FlutterAppDelegate {
6 | override func application(
7 | _ application: UIApplication,
8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
9 | ) -> Bool {
10 | GeneratedPluginRegistrant.register(with: self)
11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions)
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LaunchImage.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "LaunchImage@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "LaunchImage@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/ios/RunnerTests/RunnerTests.swift:
--------------------------------------------------------------------------------
1 | import Flutter
2 | import UIKit
3 | import XCTest
4 |
5 | class RunnerTests: XCTestCase {
6 |
7 | func testExample() {
8 | // If you add code to the Runner application, consider adding tests here.
9 | // See https://developer.apple.com/documentation/xctest for more information about using XCTest.
10 | }
11 |
12 | }
13 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/l10n.yaml:
--------------------------------------------------------------------------------
1 | arb-dir: lib/localization
2 | template-arb-file: app_en.arb
3 | output-localization-file: app_localizations.dart
4 | untranslated-messages-file: untranslated_messages.txt
5 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/lib/features/favorite/favorite.dart:
--------------------------------------------------------------------------------
1 | export 'bloc/favorite_bloc.dart';
2 | export 'models/favoritable.dart';
3 | export 'models/favorite.dart';
4 | export 'repository/favorite_repository.dart';
5 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/lib/features/favorite/models/favoritable.dart:
--------------------------------------------------------------------------------
1 | import 'package:npt_flutter/features/favorite/favorite.dart';
2 |
3 | mixin Favoritable {
4 | bool isInFavorites(Iterable favorites) {
5 | for (final fav in favorites) {
6 | if (fav.isFavoriteMatch(this)) {
7 | return true;
8 | }
9 | }
10 | return false;
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/lib/features/favorite/models/favorite.g.dart:
--------------------------------------------------------------------------------
1 | // GENERATED CODE - DO NOT MODIFY BY HAND
2 |
3 | part of 'favorite.dart';
4 |
5 | // **************************************************************************
6 | // JsonSerializableGenerator
7 | // **************************************************************************
8 |
9 | FavoriteProfile _$FavoriteProfileFromJson(Map json) =>
10 | FavoriteProfile(
11 | uuid: json['uuid'] as String,
12 | );
13 |
14 | Map _$FavoriteProfileToJson(FavoriteProfile instance) =>
15 | {
16 | 'uuid': instance.uuid,
17 | };
18 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/lib/features/features.dart:
--------------------------------------------------------------------------------
1 | export 'favorite/favorite.dart';
2 | export 'logging/logging.dart';
3 | export 'onboarding/onboarding.dart';
4 | export 'profile/profile.dart';
5 | export 'profile_list/profile_list.dart';
6 | export 'settings/settings.dart';
7 | export 'tray_manager/tray_manager.dart';
8 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/lib/features/logging/cubit/enable_logging_cubit.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter_bloc/flutter_bloc.dart';
2 |
3 | class EnableLoggingCubit extends Cubit {
4 | EnableLoggingCubit() : super(true);
5 |
6 | void disable() => emit(false);
7 | void enable() => emit(true);
8 | }
9 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/lib/features/logging/cubit/logs_state.dart:
--------------------------------------------------------------------------------
1 | part of 'logs_cubit.dart';
2 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/lib/features/logging/logging.dart:
--------------------------------------------------------------------------------
1 | export 'cubit/logs_cubit.dart';
2 | export 'cubit/enable_logging_cubit.dart';
3 | export 'models/models.dart';
4 | export 'widgets/widgets.dart';
5 |
--------------------------------------------------------------------------------
/packages/dart/npt_flutter/lib/features/logging/models/log_entry.dart:
--------------------------------------------------------------------------------
1 | import 'package:npt_flutter/features/logging/logging.dart';
2 |
3 | final class LogEntry extends Loggable {
4 | final EquatableDateTime timestamp;
5 | final Loggable loggable;
6 |
7 | LogEntry(this.loggable, {DateTime? timestamp})
8 | : timestamp = EquatableDateTime.fromDateTime(timestamp ?? DateTime.now());
9 |
10 | @override
11 | List