├── .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 |
Operating SystemDownload Location
WindowsWindows Store
MacOSApp Store
LinuxBuild from Source
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 get props => [timestamp, loggable]; 12 | 13 | @override 14 | String toString() { 15 | return '$timestamp | $loggable'; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/features/logging/models/models.dart: -------------------------------------------------------------------------------- 1 | export 'equatable_date_time.dart'; 2 | export 'loggable.dart'; 3 | export 'logging_bloc.dart'; 4 | export 'log_entry.dart'; 5 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/features/logging/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'enable_logs_box.dart'; 2 | export 'export_logs_button.dart'; 3 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/features/onboarding/onboarding.dart: -------------------------------------------------------------------------------- 1 | export 'cubit/onboarding_cubit.dart'; 2 | export 'util/post_onboard.dart'; 3 | export 'widgets/onboarding_button.dart'; 4 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/features/profile/cubit/profile_cache_state.dart: -------------------------------------------------------------------------------- 1 | part of 'profile_cache_cubit.dart'; 2 | 3 | class ProfileCacheState extends Loggable { 4 | final Map profileBlocs; 5 | const ProfileCacheState(this.profileBlocs); 6 | 7 | ProfileCacheState withAdded(String uuid, ProfileBloc bloc) { 8 | return ProfileCacheState({...profileBlocs, uuid: bloc}); 9 | } 10 | 11 | @override 12 | List get props => [profileBlocs]; 13 | 14 | @override 15 | String toString() { 16 | return 'ProfileCacheState(uuids:${profileBlocs.keys})'; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/features/profile/profile.dart: -------------------------------------------------------------------------------- 1 | export 'bloc/profile_bloc.dart'; 2 | export 'cubit/profile_cache_cubit.dart'; 3 | export 'models/profile.dart'; 4 | export 'repository/profile_repository.dart'; 5 | export 'view/profile_view.dart'; 6 | export 'view/profile_view_minimal.dart'; 7 | export 'view/profile_view_ssh_style.dart'; 8 | export 'widgets/widgets.dart'; 9 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/features/profile/widgets/profile_header_column.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class ProfileHeaderColumn extends StatelessWidget { 4 | const ProfileHeaderColumn({super.key, required this.title, required this.width}); 5 | 6 | final String title; 7 | final double width; 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | return SizedBox(width: width, child: Text(title)); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/features/profile_form/profile_form.dart: -------------------------------------------------------------------------------- 1 | export 'view/profile_form_view.dart'; 2 | export 'widgets/widgets.dart'; 3 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/features/profile_form/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'profile_device_at_sign_text_field.dart'; 2 | export 'profile_device_name_text_field.dart'; 3 | export 'profile_display_name_text_field.dart'; 4 | export 'profile_local_port_selector.dart'; 5 | export 'profile_relay_at_sign_text_field.dart'; 6 | export 'profile_relay_quick_buttons.dart'; 7 | export 'profile_remote_host_text_field.dart'; 8 | export 'profile_remote_port_selector.dart'; 9 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/features/profile_list/cubit/profiles_selected_state.dart: -------------------------------------------------------------------------------- 1 | part of 'profiles_selected_cubit.dart'; 2 | 3 | final class ProfilesSelectedState extends Loggable { 4 | final Set selected; 5 | const ProfilesSelectedState(this.selected); 6 | 7 | ProfilesSelectedState withAdded(Set uuids) { 8 | return ProfilesSelectedState(selected.union(uuids)); 9 | } 10 | 11 | ProfilesSelectedState withRemoved(Set uuids) { 12 | return ProfilesSelectedState(selected.difference(uuids)); 13 | } 14 | 15 | @override 16 | List get props => [selected]; 17 | 18 | @override 19 | String toString() { 20 | return 'ProfilesSelectedState($selected)'; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/features/profile_list/cubit/sync_cubit.dart: -------------------------------------------------------------------------------- 1 | import 'dart:developer'; 2 | 3 | import 'package:at_client_mobile/at_client_mobile.dart'; 4 | import 'package:flutter_bloc/flutter_bloc.dart'; 5 | 6 | class SyncCubit extends Cubit { 7 | SyncCubit() : super(true); 8 | 9 | Future checkSync() async { 10 | final value = await AtClientManager.getInstance().atClient.syncService.isInSync(); 11 | log("SyncCubit: checkSync: $value"); 12 | emit(value); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/features/profile_list/profile_list.dart: -------------------------------------------------------------------------------- 1 | export 'bloc/profile_list_bloc.dart'; 2 | export 'cubit/profiles_selected_cubit.dart'; 3 | export 'cubit/profiles_running_cubit.dart'; 4 | export 'view/profile_list_view.dart'; 5 | export 'widgets/widgets.dart'; 6 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/features/profile_list/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'profile_list_add_button.dart'; 2 | export 'profile_list_import_button.dart'; 3 | export 'profile_list_refresh_button.dart'; 4 | export 'profile_select_all_box.dart'; 5 | export 'profile_selected_delete_button.dart'; 6 | export 'profile_selected_export_button.dart'; 7 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/features/settings/settings.dart: -------------------------------------------------------------------------------- 1 | export 'bloc/settings_bloc.dart'; 2 | export 'models/settings.dart'; 3 | export 'repository/settings_repository.dart'; 4 | export 'view/settings_view.dart'; 5 | export 'widgets/widgets.dart'; 6 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/features/settings/widgets/widgets.dart: -------------------------------------------------------------------------------- 1 | export 'settings_dashboard_layout_selector.dart'; 2 | export 'settings_error_hint.dart'; 3 | export 'settings_override_relay_switch.dart'; 4 | export 'settings_relay_at_sign_text_field.dart'; 5 | export 'settings_relay_quick_buttons.dart'; 6 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/features/tray_manager/cubit/tray_cubit.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'tray_cubit.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | const _$TrayActionEnumMap = { 10 | TrayAction.showDashboard: 'showDashboard', 11 | TrayAction.showSettings: 'showSettings', 12 | TrayAction.quitApp: 'quitApp', 13 | }; 14 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/features/tray_manager/cubit/tray_state.dart: -------------------------------------------------------------------------------- 1 | part of 'tray_cubit.dart'; 2 | 3 | sealed class TrayState extends Loggable { 4 | const TrayState(); 5 | @override 6 | List get props => []; 7 | } 8 | 9 | final class TrayInitial extends TrayState { 10 | const TrayInitial(); 11 | 12 | @override 13 | String toString() { 14 | return 'TrayInitial'; 15 | } 16 | } 17 | 18 | final class TrayLoaded extends TrayState { 19 | const TrayLoaded(); 20 | 21 | @override 22 | List get props => []; 23 | 24 | @override 25 | String toString() { 26 | return 'TrayLoaded'; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/features/tray_manager/tray_manager.dart: -------------------------------------------------------------------------------- 1 | export 'cubit/tray_cubit.dart'; 2 | export 'widgets/tray_manager.dart'; 3 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:npt_flutter/constants.dart'; 3 | import 'package:window_manager/window_manager.dart'; 4 | 5 | import 'app.dart'; 6 | 7 | Future main() async { 8 | WidgetsFlutterBinding.ensureInitialized(); 9 | 10 | var windowOptions = const WindowOptions( 11 | title: "NoPorts Desktop", 12 | minimumSize: Constants.kWindowsMinWindowSize, 13 | skipTaskbar: false, 14 | ); 15 | windowManager.ensureInitialized(); 16 | windowManager.waitUntilReadyToShow(windowOptions); 17 | runApp(const App()); 18 | } 19 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/pages/authorisation_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:npt_flutter/features/authorisation/view/authorisation_view.dart'; 3 | 4 | class AuthorisationPage extends StatelessWidget { 5 | const AuthorisationPage({super.key}); 6 | 7 | @override 8 | Widget build(BuildContext context) { 9 | return const Scaffold( 10 | body: AuthorisationView(), 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/pages/dashboard_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:npt_flutter/features/profile_list/profile_list.dart'; 3 | 4 | class DashboardPage extends StatelessWidget { 5 | const DashboardPage({super.key}); 6 | 7 | @override 8 | Widget build(BuildContext context) { 9 | return const Scaffold( 10 | body: ProfileListView(), 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/pages/loading_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class LoadingPage extends StatelessWidget { 4 | const LoadingPage({super.key}); 5 | 6 | @override 7 | Widget build(BuildContext context) { 8 | return const Scaffold( 9 | extendBodyBehindAppBar: true, 10 | extendBody: true, 11 | body: Center( 12 | child: CircularProgressIndicator.adaptive(), 13 | ), 14 | ); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/pages/onboarding_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:npt_flutter/features/onboarding/view/onboarding_view.dart'; 3 | 4 | class OnboardingPage extends StatelessWidget { 5 | const OnboardingPage({super.key}); 6 | 7 | @override 8 | Widget build(BuildContext context) { 9 | return const Scaffold( 10 | body: OnboardingView(), 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/pages/pages.dart: -------------------------------------------------------------------------------- 1 | export 'authorisation_page.dart'; 2 | export 'dashboard_page.dart'; 3 | export 'loading_page.dart'; 4 | export 'onboarding_page.dart'; 5 | export 'profile_form_page.dart'; 6 | export 'settings_page.dart'; 7 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/pages/settings_page.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:npt_flutter/features/settings/settings.dart'; 3 | 4 | class SettingsPage extends StatelessWidget { 5 | const SettingsPage({super.key}); 6 | 7 | @override 8 | Widget build(BuildContext context) { 9 | return const Scaffold( 10 | body: SettingsView(), 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/pages/sub_nav_cubit.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_bloc/flutter_bloc.dart'; 2 | import 'package:npt_flutter/routes.dart'; 3 | 4 | class SubNavCubit extends Cubit { 5 | SubNavCubit() : super(HomeRoutes.dashboard); 6 | 7 | void setSubRoute(String routeName) => emit(routeName); 8 | } 9 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/styles/style_constants.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:npt_flutter/styles/sizes.dart'; 3 | 4 | import 'app_color.dart'; 5 | 6 | class StyleConstants { 7 | static ButtonStyle backButtonStyle = TextButton.styleFrom( 8 | foregroundColor: AppColor.primaryColor, 9 | textStyle: const TextStyle(fontSize: Sizes.p18), 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/util/at_client_methods.dart: -------------------------------------------------------------------------------- 1 | import 'package:at_onboarding_flutter/at_onboarding_flutter.dart'; 2 | import 'package:npt_flutter/constants.dart'; 3 | import 'package:path_provider/path_provider.dart'; 4 | 5 | class AtClientMethods { 6 | static Future loadAtClientPreference(String rootDomain) async { 7 | var dir = await getApplicationSupportDirectory(); 8 | 9 | return AtClientPreference() 10 | ..rootDomain = rootDomain 11 | ..namespace = Constants.namespace 12 | ..hiveStoragePath = dir.path 13 | ..commitLogPath = dir.path 14 | ..isLocalStoreRequired = true; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/util/general_extensions.dart: -------------------------------------------------------------------------------- 1 | extension StringExtension on String { 2 | String atsignify() { 3 | var value = trim(); 4 | if (!startsWith('@')) { 5 | value = '@$this'; 6 | } 7 | 8 | return value; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/util/port.dart: -------------------------------------------------------------------------------- 1 | class Port { 2 | // parses a port from string, returns 0 if the parse fails 3 | static int fromString(String value) { 4 | int port = int.tryParse(value) ?? 0; 5 | if (port < 0) port == 0; 6 | if (port > 65535) port = 65535; 7 | return port; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/util/uuid.dart: -------------------------------------------------------------------------------- 1 | import 'package:at_client_mobile/at_client_mobile.dart'; 2 | import 'package:npt_flutter/constants.dart'; 3 | import 'package:uuid/uuid.dart' as u; 4 | 5 | class Uuid { 6 | final String uuid; 7 | const Uuid(this.uuid); 8 | 9 | static const String profilesSubNamespace = 'profiles'; 10 | 11 | AtKey toProfileAtKey({String? sharedBy}) { 12 | var key = AtKey.self( 13 | '$uuid.$profilesSubNamespace', 14 | namespace: Constants.namespace, 15 | ); 16 | if (sharedBy != null) key.sharedBy(sharedBy); 17 | return key.build(); 18 | } 19 | 20 | static String generate() { 21 | return const u.Uuid().v4(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/widgets/loader_bar.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class LoaderBar extends StatelessWidget { 4 | const LoaderBar({super.key}); 5 | 6 | @override 7 | Widget build(BuildContext context) { 8 | return const SizedBox( 9 | width: 400, 10 | child: LinearProgressIndicator(), 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/lib/widgets/spinner.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class Spinner extends StatelessWidget { 4 | const Spinner({super.key}); 5 | 6 | @override 7 | Widget build(BuildContext context) { 8 | return const CircularProgressIndicator.adaptive(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/linux/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ephemeral 2 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/linux/flutter/generated_plugin_registrant.h: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #ifndef GENERATED_PLUGIN_REGISTRANT_ 8 | #define GENERATED_PLUGIN_REGISTRANT_ 9 | 10 | #include 11 | 12 | // Registers Flutter plugins. 13 | void fl_register_plugins(FlPluginRegistry* registry); 14 | 15 | #endif // GENERATED_PLUGIN_REGISTRANT_ 16 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/linux/main.cc: -------------------------------------------------------------------------------- 1 | #include "my_application.h" 2 | 3 | int main(int argc, char** argv) { 4 | g_autoptr(MyApplication) app = my_application_new(); 5 | return g_application_run(G_APPLICATION(app), argc, argv); 6 | } 7 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/linux/my_application.h: -------------------------------------------------------------------------------- 1 | #ifndef FLUTTER_MY_APPLICATION_H_ 2 | #define FLUTTER_MY_APPLICATION_H_ 3 | 4 | #include 5 | 6 | G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, 7 | GtkApplication) 8 | 9 | /** 10 | * my_application_new: 11 | * 12 | * Creates a new Flutter-based application. 13 | * 14 | * Returns: a new #MyApplication. 15 | */ 16 | MyApplication* my_application_new(); 17 | 18 | #endif // FLUTTER_MY_APPLICATION_H_ 19 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/macos/.gitignore: -------------------------------------------------------------------------------- 1 | # Flutter-related 2 | **/Flutter/ephemeral/ 3 | **/Pods/ 4 | 5 | # Xcode-related 6 | **/dgph 7 | **/xcuserdata/ 8 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/macos/Flutter/Flutter-Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/macos/Flutter/Flutter-Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/macos/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/macos/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | @main 5 | class AppDelegate: FlutterAppDelegate { 6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 7 | return false 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png -------------------------------------------------------------------------------- /packages/dart/npt_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png -------------------------------------------------------------------------------- /packages/dart/npt_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png -------------------------------------------------------------------------------- /packages/dart/npt_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png -------------------------------------------------------------------------------- /packages/dart/npt_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png -------------------------------------------------------------------------------- /packages/dart/npt_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png -------------------------------------------------------------------------------- /packages/dart/npt_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png -------------------------------------------------------------------------------- /packages/dart/npt_flutter/macos/Runner/Configs/AppInfo.xcconfig: -------------------------------------------------------------------------------- 1 | // Application-level settings for the Runner target. 2 | // 3 | // This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the 4 | // future. If not, the values below would default to using the project name when this becomes a 5 | // 'flutter create' template. 6 | 7 | // The application's name. By default this is also the title of the Flutter window. 8 | PRODUCT_NAME = npt_flutter 9 | 10 | // The application's bundle identifier 11 | PRODUCT_BUNDLE_IDENTIFIER = com.example.nptFlutter 12 | 13 | // The copyright displayed in application information 14 | PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved. 15 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/macos/Runner/Configs/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Debug.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/macos/Runner/Configs/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Release.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/macos/Runner/Configs/Warnings.xcconfig: -------------------------------------------------------------------------------- 1 | WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings 2 | GCC_WARN_UNDECLARED_SELECTOR = YES 3 | CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES 4 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE 5 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES 6 | CLANG_WARN_PRAGMA_PACK = YES 7 | CLANG_WARN_STRICT_PROTOTYPES = YES 8 | CLANG_WARN_COMMA = YES 9 | GCC_WARN_STRICT_SELECTOR_MATCH = YES 10 | CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES 11 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES 12 | GCC_WARN_SHADOW = YES 13 | CLANG_WARN_UNREACHABLE_CODE = YES 14 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/macos/Runner/DebugProfile.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.cs.allow-jit 8 | 9 | com.apple.security.network.server 10 | 11 | com.apple.security.files.downloads.read-write 12 | 13 | com.apple.security.network.client 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/macos/Runner/MainFlutterWindow.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | class MainFlutterWindow: NSWindow { 5 | override func awakeFromNib() { 6 | let flutterViewController = FlutterViewController() 7 | let windowFrame = self.frame 8 | self.contentViewController = flutterViewController 9 | self.setFrame(windowFrame, display: true) 10 | 11 | RegisterGeneratedPlugins(registry: flutterViewController) 12 | 13 | super.awakeFromNib() 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/macos/Runner/Release.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.network.server 8 | 9 | com.apple.security.files.downloads.read-write 10 | 11 | com.apple.security.network.client 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/macos/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 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/test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility in the flutter_test package. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter_test/flutter_test.dart'; 9 | 10 | void main() { 11 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 12 | // Build our app and trigger a frame. 13 | //await tester.pumpWidget(const App()); 14 | }); 15 | } 16 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/untranslated_messages.txt: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /packages/dart/npt_flutter/web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/web/favicon.png -------------------------------------------------------------------------------- /packages/dart/npt_flutter/web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/web/icons/Icon-192.png -------------------------------------------------------------------------------- /packages/dart/npt_flutter/web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/web/icons/Icon-512.png -------------------------------------------------------------------------------- /packages/dart/npt_flutter/web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /packages/dart/npt_flutter/web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /packages/dart/npt_flutter/windows/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ephemeral/ 2 | 3 | # Visual Studio user-specific files. 4 | *.suo 5 | *.user 6 | *.userosscache 7 | *.sln.docstates 8 | 9 | # Visual Studio build-related files. 10 | x64/ 11 | x86/ 12 | 13 | # Visual Studio cache files 14 | # files ending in .cache can be ignored 15 | *.[Cc]ache 16 | # but keep track of directories ending in .cache 17 | !*.[Cc]ache/ 18 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/windows/flutter/generated_plugin_registrant.h: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #ifndef GENERATED_PLUGIN_REGISTRANT_ 8 | #define GENERATED_PLUGIN_REGISTRANT_ 9 | 10 | #include 11 | 12 | // Registers Flutter plugins. 13 | void RegisterPlugins(flutter::PluginRegistry* registry); 14 | 15 | #endif // GENERATED_PLUGIN_REGISTRANT_ 16 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/windows/runner/resource.h: -------------------------------------------------------------------------------- 1 | //{{NO_DEPENDENCIES}} 2 | // Microsoft Visual C++ generated include file. 3 | // Used by Runner.rc 4 | // 5 | #define IDI_APP_ICON 101 6 | 7 | // Next default values for new objects 8 | // 9 | #ifdef APSTUDIO_INVOKED 10 | #ifndef APSTUDIO_READONLY_SYMBOLS 11 | #define _APS_NEXT_RESOURCE_VALUE 102 12 | #define _APS_NEXT_COMMAND_VALUE 40001 13 | #define _APS_NEXT_CONTROL_VALUE 1001 14 | #define _APS_NEXT_SYMED_VALUE 101 15 | #endif 16 | #endif 17 | -------------------------------------------------------------------------------- /packages/dart/npt_flutter/windows/runner/resources/app_icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/npt_flutter/windows/runner/resources/app_icon.ico -------------------------------------------------------------------------------- /packages/dart/npt_flutter/windows/runner/runner.exe.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PerMonitorV2 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /packages/dart/sshnoports/bin/.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore everything (generated development binaries) 2 | * 3 | # Allow dart files 4 | !*.dart 5 | !*.yaml 6 | !.gitignore 7 | -------------------------------------------------------------------------------- /packages/dart/sshnoports/bin/activate_cli.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | 3 | import 'package:at_onboarding_cli/src/cli/auth_cli.dart' as auth_cli; 4 | 5 | Future main(List args) async { 6 | try { 7 | exit(await auth_cli.main(args)); 8 | } catch (e) { 9 | stdout.writeln(e.toString()); 10 | exit(1); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/dart/sshnoports/bin/demo/npa_always_deny.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'package:noports_core/npa.dart'; 3 | import 'package:sshnoports/npa_bootstrapper.dart' as bootstrapper; 4 | 5 | void main(List args) async { 6 | await bootstrapper.run(AlwaysDeny(), args); 7 | } 8 | 9 | class AlwaysDeny implements NPARequestHandler { 10 | @override 11 | Future doAuthCheck( 12 | NPAAuthCheckRequest authCheckRequest) async { 13 | return NPAAuthCheckResponse( 14 | authorized: false, 15 | message: 'Computer says "Noooo..."', 16 | permitOpen: [], 17 | ); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /packages/dart/sshnoports/bundles/core/docker/.env.template: -------------------------------------------------------------------------------- 1 | # Name the docker compose project (if you want) 2 | # COMPOSE_PROJECT_NAME= 3 | 4 | # SSHNPD ATSIGN 5 | TO= 6 | 7 | # SSHNPD ATSIGN CRAM KEY FOR ACTIVATION 8 | # from my.atsign.com under the advanced settings for your atSign 9 | TO_CRAM= 10 | 11 | # SSHNPD DEVICE NAME 12 | DEVICE= 13 | 14 | # SSHNP ATSIGN 15 | FROM= 16 | -------------------------------------------------------------------------------- /packages/dart/sshnoports/bundles/core/docker/.startup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ssh-keygen -A 3 | ls /atsign/.atsign/keys 4 | /usr/sbin/sshd -D -o "ListenAddress 127.0.0.1" -o "PasswordAuthentication no" & 5 | sudo -u atsign /usr/local/at/sshnpd "$@" 6 | -------------------------------------------------------------------------------- /packages/dart/sshnoports/bundles/core/docker/docker-compose.yaml: -------------------------------------------------------------------------------- 1 | version: "3.0" 2 | 3 | volumes: 4 | keys: 5 | driver: local 6 | services: 7 | activate: 8 | image: atsigncompany/activate_sshnpd:latest 9 | volumes: 10 | - keys:/atsign/.atsign/keys 11 | command: -a "${TO}" -c "${TO_CRAM}" 12 | sshnpd: 13 | image: atsigncompany/sshnpd:latest 14 | volumes: 15 | - keys:/atsign/.atsign/keys 16 | command: -a "${TO}" -m "${FROM}" -d "${DEVICE}" -s -u -v 17 | depends_on: 18 | activate: 19 | condition: service_completed_successfully 20 | -------------------------------------------------------------------------------- /packages/dart/sshnoports/bundles/shell/headless/srvd.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # disable "var is referenced but not assigned" warning for template 3 | # shellcheck disable=SC2154 4 | # SCRIPT METADATA 5 | binary_path="$HOME/.local/bin" 6 | atsign="@my_rvd" # MANDATORY: Srvd atSign 7 | internet_address="" # MANDATORY: Public FQDN or IP address of the machine running the srvd 8 | v="-v" # Comment to disable verbose logging 9 | # END METADATA 10 | 11 | sleep 10 # allow machine to bring up network 12 | export USER="$user" 13 | while true; do 14 | "$binary_path"/srvd -a "$atsign" -i "$internet_address" "$v" 15 | sleep 10 16 | done 17 | -------------------------------------------------------------------------------- /packages/dart/sshnoports/bundles/shell/systemd/srvd.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=No Ports Socket Rendezvous Daemon 3 | After=network-online.target 4 | 5 | [Install] 6 | WantedBy=multi-user.target 7 | 8 | [Service] 9 | Type=simple 10 | Restart=always 11 | RestartSec=3 12 | 13 | # The line below runs the srvd service, with the options set above. 14 | # You can edit this line to further customize the service to your needs. 15 | ExecStart=/usr/local/bin/srvd -a "$atsign" -i "$internet_address" "$additional_args" 16 | -------------------------------------------------------------------------------- /packages/dart/sshnoports/bundles/shell/systemd/sshnpd.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=Ssh No Ports Daemon 3 | After=network-online.target 4 | 5 | [Install] 6 | WantedBy=multi-user.target 7 | 8 | [Service] 9 | Type=simple 10 | Restart=always 11 | RestartSec=3 12 | 13 | # The line below runs the sshnpd service, with the options set in 14 | # /etc/systemd/system/sshnpd.d/override.conf. 15 | # You can edit that config with: sudo systemctl edit sshnpd 16 | ExecStart=/usr/local/bin/sshnpd -a "$device_atsign" -m "$manager_atsign" -d "$device_name" "$delegate_policy" "$s" "$u" "$v" "$additional_args" 17 | -------------------------------------------------------------------------------- /packages/dart/sshnoports/bundles/windows/sshnpd_service.xml: -------------------------------------------------------------------------------- 1 | 2 | sshnpd 3 | sshnpd 4 | Ssh No Ports Daemon 5 | 6 | 7 | NT AUTHORITY\NetworkService 8 | 9 | sshnpd 10 | -a {client} -m {manager} -d {device} -k {homdir} -s 11 | 12 | -------------------------------------------------------------------------------- /packages/dart/sshnoports/lib/src/print_version.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | 3 | import 'package:sshnoports/src/version.dart' as binaries; 4 | import 'package:noports_core/version.dart' as core; 5 | 6 | /// Print version number 7 | void printVersion() { 8 | stderr.writeln('Version : ${binaries.packageVersion}' 9 | ' (core: ${core.packageVersion})'); 10 | } 11 | -------------------------------------------------------------------------------- /packages/dart/sshnoports/lib/src/version.dart: -------------------------------------------------------------------------------- 1 | // Generated code. Do not modify. 2 | const packageVersion = '5.9.3'; 3 | -------------------------------------------------------------------------------- /packages/dart/sshnoports/tools/.gitignore: -------------------------------------------------------------------------------- 1 | .env -------------------------------------------------------------------------------- /packages/dart/sshnoports/tools/docker-compose.local.yaml: -------------------------------------------------------------------------------- 1 | version: "3.0" 2 | services: 3 | activate: 4 | build: 5 | context: ../../../ # root of the repo 6 | dockerfile: ./packages/dart/sshnoports/tools/Dockerfile.activate 7 | volumes: 8 | - ${HOME}/.atsign/keys:/atsign/.atsign/keys 9 | command: -a "${TO}" -c "${TO_CRAM}" 10 | sshnpd: 11 | build: 12 | context: ../../../ # root of the repo 13 | dockerfile: ./packages/dart/sshnoports/tools/Dockerfile 14 | volumes: 15 | - ${HOME}/.atsign/keys:/atsign/.atsign/keys 16 | command: -a "${TO}" -m "${FROM}" -d "${DEVICE}" -s -u -v 17 | depends_on: 18 | activate: 19 | condition: service_completed_successfully 20 | -------------------------------------------------------------------------------- /packages/dart/sshnoports/tools/templates/entitlements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.cs.allow-jit 6 | 7 | com.apple.security.cs.allow-unsigned-executable-memory 8 | 9 | com.apple.security.cs.disable-executable-page-protection 10 | 11 | com.apple.security.cs.allow-dyld-environment-variables 12 | 13 | com.apple.security.cs.disable-library-validation 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/README.md: -------------------------------------------------------------------------------- 1 | # sshnp_flutter 2 | 3 | SSH NoPorts desktop is our original UI for NoPorts, which predates NoPorts' 4 | support for using NoPorts over any TCP tunnel. NoPorts originally only supported 5 | SSH in its earlier releases. 6 | 7 | > **We don't recommend using this application anymore.** 8 | > It is no longer maintained. 9 | > The choice to use this application is at your own risk. 10 | 11 | If you want a good UI experience, we recommend 12 | [NoPorts desktop (a.k.a. the npt_flutter directory)](../npt_flutter/README.md). 13 | 14 | If you want a better SSH experience, we recommend 15 | [this guide](https://docs.noports.com/usage/integrate-with-ssh-config). 16 | 17 | -------------------------------------------------------------------------------- /packages/dart/sshnp_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/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/android/app/src/main/kotlin/com/example/sshnp_gui/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.atsign.sshnp 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/android/app/src/main/res/mipmap-hdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/android/app/src/main/res/mipmap-hdpi/launcher_icon.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/android/app/src/main/res/mipmap-mdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/android/app/src/main/res/mipmap-mdpi/launcher_icon.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/android/app/src/main/res/mipmap-xhdpi/launcher_icon.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/android/app/src/main/res/mipmap-xxhdpi/launcher_icon.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/android/app/src/main/res/mipmap-xxxhdpi/launcher_icon.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | android.enableR8=true 5 | -------------------------------------------------------------------------------- /packages/dart/sshnp_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.5-all.zip 6 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/assets/fonts/0xProtoNerdFont-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/assets/fonts/0xProtoNerdFont-Regular.ttf -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/assets/fonts/0xProtoNerdFontMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/assets/fonts/0xProtoNerdFontMono-Regular.ttf -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/assets/fonts/0xProtoNerdFontPropo-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/assets/fonts/0xProtoNerdFontPropo-Regular.ttf -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/assets/fonts/GeistMonoNerdFont-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/assets/fonts/GeistMonoNerdFont-Regular.otf -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/assets/fonts/IosevkaTermNerdFontPropo-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/assets/fonts/IosevkaTermNerdFontPropo-Regular.ttf -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/assets/images/app_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/assets/images/app_logo.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/assets/images/onboarding_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/assets/images/onboarding_bg.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 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/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /packages/dart/sshnp_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/sshnp_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /packages/dart/sshnp_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/sshnp_flutter/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /packages/dart/sshnp_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/sshnp_flutter/l10n.yaml: -------------------------------------------------------------------------------- 1 | arb-dir: lib/l10n 2 | template-arb-file: app_en.arb 3 | output-localization-file: app_localizations.dart 4 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/lib/src/controllers/form_controllers.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_riverpod/flutter_riverpod.dart'; 2 | 3 | final formProfileNameController = StateProvider((ref) => ''); 4 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/lib/src/controllers/package_info_controller.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_riverpod/flutter_riverpod.dart'; 2 | import 'package:package_info_plus/package_info_plus.dart'; 3 | 4 | final packageInfo = StateProvider( 5 | (ref) => PackageInfo(appName: 'Unknown', packageName: 'Unknown', version: 'Unknown', buildNumber: 'Unknown')); 6 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/lib/src/presentation/widgets/profile_bar/profile_bar_actions.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:noports_core/sshnp.dart'; 3 | import 'package:sshnp_flutter/src/presentation/widgets/profile_screen_widgets/profile_actions/profile_actions.dart'; 4 | 5 | class ProfileBarActions extends StatelessWidget { 6 | final SshnpParams params; 7 | const ProfileBarActions(this.params, {super.key}); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | return Row( 12 | children: [ 13 | ProfileRunAction(params), 14 | ProfileTerminalAction(params), 15 | ProfileMenuButton(params.profileName!), 16 | ], 17 | ); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/lib/src/presentation/widgets/profile_bar/profile_bar_stats.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class ProfileBarStats extends StatelessWidget { 4 | const ProfileBarStats({super.key}); 5 | 6 | @override 7 | Widget build(BuildContext context) { 8 | return const SizedBox( 9 | width: 0, 10 | height: 0, 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/lib/src/presentation/widgets/profile_screen_widgets/profile_actions/profile_action_button.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import '../../../../utility/sizes.dart'; 4 | 5 | class ProfileActionButton extends StatelessWidget { 6 | final void Function() onPressed; 7 | final Widget icon; 8 | const ProfileActionButton({ 9 | required this.onPressed, 10 | required this.icon, 11 | super.key, 12 | }); 13 | 14 | @override 15 | Widget build(BuildContext context) { 16 | SizeConfig().init(context); 17 | return IconButton( 18 | iconSize: 24.toFont, 19 | onPressed: onPressed, 20 | icon: icon, 21 | ); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/lib/src/presentation/widgets/profile_screen_widgets/profile_actions/profile_actions.dart: -------------------------------------------------------------------------------- 1 | export 'profile_action_button.dart'; 2 | export 'profile_action_callbacks.dart'; 3 | export 'profile_delete_action.dart'; 4 | export 'profile_delete_dialog.dart'; 5 | export 'profile_menu_button.dart'; 6 | export 'profile_run_action.dart'; 7 | export 'profile_terminal_action.dart'; 8 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/lib/src/presentation/widgets/profile_screen_widgets/profile_bar/profile_bar_stats.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class ProfileBarStats extends StatelessWidget { 4 | const ProfileBarStats({super.key}); 5 | 6 | @override 7 | Widget build(BuildContext context) { 8 | return const SizedBox( 9 | width: 0, 10 | height: 0, 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/lib/src/repository/navigation_repository.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class NavigationRepository { 4 | static GlobalKey navKey = GlobalKey(); 5 | } 6 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/lib/src/utility/extensions/go_router_extensions.dart: -------------------------------------------------------------------------------- 1 | import 'package:go_router/go_router.dart'; 2 | 3 | extension GoRouterExtension on GoRouter { 4 | String get location { 5 | final RouteMatch lastMatch = routerDelegate.currentConfiguration.last; 6 | final RouteMatchList matchList = 7 | lastMatch is ImperativeRouteMatch ? lastMatch.matches : routerDelegate.currentConfiguration; 8 | final String location = matchList.uri.toString(); 9 | return location; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/lib/src/utility/intents.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class ExitIntent extends VoidCallbackIntent { 4 | final void Function() onExit; 5 | const ExitIntent(this.onExit) : super(onExit); 6 | // modify this class to call on exit 7 | } 8 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/linux/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ephemeral 2 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/linux/flutter/generated_plugin_registrant.h: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #ifndef GENERATED_PLUGIN_REGISTRANT_ 8 | #define GENERATED_PLUGIN_REGISTRANT_ 9 | 10 | #include 11 | 12 | // Registers Flutter plugins. 13 | void fl_register_plugins(FlPluginRegistry* registry); 14 | 15 | #endif // GENERATED_PLUGIN_REGISTRANT_ 16 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/linux/main.cc: -------------------------------------------------------------------------------- 1 | #include "my_application.h" 2 | 3 | int main(int argc, char** argv) { 4 | g_autoptr(MyApplication) app = my_application_new(); 5 | return g_application_run(G_APPLICATION(app), argc, argv); 6 | } 7 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/linux/my_application.h: -------------------------------------------------------------------------------- 1 | #ifndef FLUTTER_MY_APPLICATION_H_ 2 | #define FLUTTER_MY_APPLICATION_H_ 3 | 4 | #include 5 | 6 | G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, 7 | GtkApplication) 8 | 9 | /** 10 | * my_application_new: 11 | * 12 | * Creates a new Flutter-based application. 13 | * 14 | * Returns: a new #MyApplication. 15 | */ 16 | MyApplication* my_application_new(); 17 | 18 | #endif // FLUTTER_MY_APPLICATION_H_ 19 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/macos/.gitignore: -------------------------------------------------------------------------------- 1 | # Flutter-related 2 | **/Flutter/ephemeral/ 3 | **/Pods/ 4 | 5 | # Xcode-related 6 | **/dgph 7 | **/xcuserdata/ 8 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/macos/Flutter/Flutter-Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/macos/Flutter/Flutter-Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "ephemeral/Flutter-Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/macos/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/macos/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | @NSApplicationMain 5 | class AppDelegate: FlutterAppDelegate { 6 | override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { 7 | return true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/macos/Runner/Configs/AppInfo.xcconfig: -------------------------------------------------------------------------------- 1 | // Application-level settings for the Runner target. 2 | // 3 | // This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the 4 | // future. If not, the values below would default to using the project name when this becomes a 5 | // 'flutter create' template. 6 | 7 | // The application's name. By default this is also the title of the Flutter window. 8 | PRODUCT_NAME = SSH No Ports Desktop 9 | 10 | // The application's bundle identifier 11 | PRODUCT_BUNDLE_IDENTIFIER = com.atsign.sshnp 12 | 13 | // The copyright displayed in application information 14 | PRODUCT_COPYRIGHT = Copyright © 2024 com.atsign. All rights reserved. 15 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/macos/Runner/Configs/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Debug.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/macos/Runner/Configs/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "../../Flutter/Flutter-Release.xcconfig" 2 | #include "Warnings.xcconfig" 3 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/macos/Runner/Configs/Warnings.xcconfig: -------------------------------------------------------------------------------- 1 | WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings 2 | GCC_WARN_UNDECLARED_SELECTOR = YES 3 | CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES 4 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE 5 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES 6 | CLANG_WARN_PRAGMA_PACK = YES 7 | CLANG_WARN_STRICT_PROTOTYPES = YES 8 | CLANG_WARN_COMMA = YES 9 | GCC_WARN_STRICT_SELECTOR_MATCH = YES 10 | CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES 11 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES 12 | GCC_WARN_SHADOW = YES 13 | CLANG_WARN_UNREACHABLE_CODE = YES 14 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/macos/Runner/DebugProfile.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.cs.allow-jit 8 | 9 | com.apple.security.files.downloads.read-write 10 | 11 | com.apple.security.files.user-selected.read-write 12 | 13 | com.apple.security.network.client 14 | 15 | com.apple.security.network.server 16 | 17 | keychain-access-groups 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/macos/Runner/MainFlutterWindow.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import FlutterMacOS 3 | 4 | class MainFlutterWindow: NSWindow { 5 | override func awakeFromNib() { 6 | let flutterViewController = FlutterViewController() 7 | let windowFrame = self.frame 8 | self.contentViewController = flutterViewController 9 | self.setFrame(windowFrame, display: true) 10 | 11 | RegisterGeneratedPlugins(registry: flutterViewController) 12 | 13 | super.awakeFromNib() 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/macos/Runner/Release.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.downloads.read-write 8 | 9 | com.apple.security.files.user-selected.read-write 10 | 11 | com.apple.security.network.client 12 | 13 | com.apple.security.network.server 14 | 15 | keychain-access-groups 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/macos/RunnerTests/RunnerTests.swift: -------------------------------------------------------------------------------- 1 | import FlutterMacOS 2 | import Cocoa 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/sshnp_flutter/test/src/presentation/screens/settings_screen_test.dart: -------------------------------------------------------------------------------- 1 | 2 | 3 | // void main() { 4 | // testWidgets('Settings Screen widgets found', (widgetTester) async { 5 | // final r = SettingsScreenRobot(widgetTester); 6 | // await r.pumpSettingsScreen(); 7 | // r.findSettings(); 8 | // r.findAccount(); 9 | // // r.findContactListTile(); 10 | // r.findSshKeyManagementListTile(); 11 | // r.findBackupYourKeysListTile(); 12 | // r.findSettingsSwitchAtsignListTile(); 13 | // r.findSettingsResetAppActionButton(); 14 | // debugDumpApp(); 15 | // }); 16 | // } 17 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/test/src/presentation/screens/terminal_screen_test.dart: -------------------------------------------------------------------------------- 1 | void main() {} 2 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/test/src/presentation/widgets/support_screen_widgets/support_screen_desktop_view_test.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_test/flutter_test.dart'; 2 | 3 | import '../../../../robots/support_screen_robot.dart'; 4 | 5 | void main() { 6 | testWidgets( 7 | 'support_screen_desktop_view_test', 8 | (widgetTester) async { 9 | final r = SupportScreenRobot(widgetTester); 10 | await r.pumpSupportScreen(); 11 | r.findSupport(); 12 | r.findSupportDescription(); 13 | r.findDiscordListTile(); 14 | r.findEmailListTile(); 15 | r.findFAQListTile(); 16 | r.findPrivacyPolicyListTile(); 17 | }, 18 | ); 19 | } 20 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/windows/.gitignore: -------------------------------------------------------------------------------- 1 | flutter/ephemeral/ 2 | 3 | # Visual Studio user-specific files. 4 | *.suo 5 | *.user 6 | *.userosscache 7 | *.sln.docstates 8 | 9 | # Visual Studio build-related files. 10 | x64/ 11 | x86/ 12 | 13 | # Visual Studio cache files 14 | # files ending in .cache can be ignored 15 | *.[Cc]ache 16 | # but keep track of directories ending in .cache 17 | !*.[Cc]ache/ 18 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/windows/flutter/generated_plugin_registrant.h: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // clang-format off 6 | 7 | #ifndef GENERATED_PLUGIN_REGISTRANT_ 8 | #define GENERATED_PLUGIN_REGISTRANT_ 9 | 10 | #include 11 | 12 | // Registers Flutter plugins. 13 | void RegisterPlugins(flutter::PluginRegistry* registry); 14 | 15 | #endif // GENERATED_PLUGIN_REGISTRANT_ 16 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/windows/runner/resource.h: -------------------------------------------------------------------------------- 1 | //{{NO_DEPENDENCIES}} 2 | // Microsoft Visual C++ generated include file. 3 | // Used by Runner.rc 4 | // 5 | #define IDI_APP_ICON 101 6 | 7 | // Next default values for new objects 8 | // 9 | #ifdef APSTUDIO_INVOKED 10 | #ifndef APSTUDIO_READONLY_SYMBOLS 11 | #define _APS_NEXT_RESOURCE_VALUE 102 12 | #define _APS_NEXT_COMMAND_VALUE 40001 13 | #define _APS_NEXT_CONTROL_VALUE 1001 14 | #define _APS_NEXT_SYMED_VALUE 101 15 | #endif 16 | #endif 17 | -------------------------------------------------------------------------------- /packages/dart/sshnp_flutter/windows/runner/resources/app_icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/packages/dart/sshnp_flutter/windows/runner/resources/app_icon.ico -------------------------------------------------------------------------------- /packages/python/README.md: -------------------------------------------------------------------------------- 1 |

The Atsign FoundationThe Atsign Foundation 2 | 3 | # SSHNPD Python (beta) has been deprecated 4 | 5 | The Python version of the NoPorts daemon has been deprecated now that the C 6 | version is available to provide a portable (and lightweight) daemon that can 7 | run on a wide variety of platforms and architectures. 8 | 9 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: noports_workspace 2 | 3 | environment: 4 | sdk: ">=2.12.0 <4.0.0" 5 | 6 | dev_dependencies: 7 | melos: ^4.0.0 8 | -------------------------------------------------------------------------------- /tests/e2e_all/.gitignore: -------------------------------------------------------------------------------- 1 | runtime/ 2 | releases/ 3 | -------------------------------------------------------------------------------- /tests/e2e_all/scripts/common/stop_daemons.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ -z "$testScriptsDir" ] ; then 4 | echo -e " ${RED}check_env: testScriptsDir is not set${NC}" && exit 1 5 | fi 6 | 7 | source "$testScriptsDir/common/common_functions.include.sh" 8 | source "$testScriptsDir/common/check_env.include.sh" || exit $? 9 | 10 | sudo docker stop $(sudo docker ps --format '{{.Names}}' | grep --color=none '^e2e_all-' | xargs) 11 | -------------------------------------------------------------------------------- /tests/e2e_all/scripts/common/wipe_known_hosts.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [ -z "$testScriptsDir" ]; then 4 | echo -e " ${RED}check_env: testScriptsDir is not set${NC}" && exit 1 5 | fi 6 | 7 | source "$testScriptsDir/common/common_functions.include.sh" 8 | source "$testScriptsDir/common/check_env.include.sh" || exit $? 9 | 10 | knownHostsFile="$HOME/.ssh/known_hosts" 11 | echo "" >"$knownHostsFile" # Empty the known_hosts file 12 | 13 | if [[ "$(uname)" == "Darwin" ]]; then 14 | sudo sh -c 'echo "" > /var/root/.ssh/known_hosts' 15 | fi 16 | -------------------------------------------------------------------------------- /tests/e2e_all/scripts/srv.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Sometimes while testing it's handy to execute this script rather than executing the srv directly 4 | 5 | binDir="$(dirname -- "$0")" 6 | 7 | mkdir -p /tmp/noports 8 | 9 | "${binDir}/srv" "$@" 2>&1 | tee -a /tmp/noports/srv.sh.$$.log 10 | # "${binDir}/srv" "$@" >> /tmp/noports/srv.sh.$$.log 2>&1 11 | echo "Exit code was $? " >> /tmp/noports/srv.sh.$$.log 12 | -------------------------------------------------------------------------------- /tests/e2e_all/scripts/tests/noop: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | scriptName=$(basename -- "$0") 4 | testToRun="$scriptName" 5 | 6 | if test -z "$testScriptsDir"; then 7 | echo -e " ${RED}check_env: testScriptsDir is not set${NC}" && exit 1 8 | fi 9 | 10 | source "$testScriptsDir/common/common_functions.include.sh" 11 | source "$testScriptsDir/common/check_env.include.sh" || exit $? 12 | 13 | if test $# != 2; then 14 | logErrorAndExit "Must supply daemonVersion, clientVersion" 15 | fi 16 | 17 | echo "TEST PASSED" 18 | 19 | exit 0 20 | -------------------------------------------------------------------------------- /tests/e2e_all/scripts/tests/shared/sshnp.expect: -------------------------------------------------------------------------------- 1 | #!/usr/bin/expect 2 | 3 | proc timed_out { } { send_user "\nTimeout!\n" ; exit 1 } 4 | set timeout $env(SSHNP_TIMEOUT) 5 | expect_before timeout timed_out 6 | 7 | eval spawn $env(SSHNP_COMMAND) 8 | 9 | set expected "Last login:" 10 | expect { 11 | eof { exit 1 } 12 | $expected 13 | } 14 | 15 | send "echo \$(date) \$(whoami) \$(hostname) SCOOBY DOO\n" 16 | set expected "${env(REMOTE_USERNAME)}.*SCOOBY DOO" 17 | expect { 18 | eof { exit 1 } 19 | -re $expected 20 | } 21 | 22 | exit 0 23 | -------------------------------------------------------------------------------- /tests/end2end_tests/contexts/.gitignore: -------------------------------------------------------------------------------- 1 | entrypoint.sh 2 | *.atKeys 3 | .sudo_as_admin_successful 4 | -------------------------------------------------------------------------------- /tests/end2end_tests/contexts/_init_/README.md: -------------------------------------------------------------------------------- 1 | 2 | These scripts are for setting up the contexts for the Docker images. 3 | 4 | - `setup-*-entrypoint.sh` - sets up the entrypoints by copying from `templates/` then putting it into the appropriate folder. pass in arguments to this script and it will use `sed` to replace the appropriate variables in the template. 5 | - `setup-*-keys.sh` - meant to be used locally, copies from `~/.atsign/keys` and moves them to the appropriate context directory. -------------------------------------------------------------------------------- /tests/end2end_tests/contexts/_init_/setup-srvd-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # this script copies the template srvd entrypoint to ../srvd/entrypoint.sh 4 | # then also replaces the @srvdatsign with the provided argument (e.g. @alice) 5 | # example usage: ./setup-srvd-entrypoint.sh @alice 6 | 7 | srvd=$1 # e.g. @alice 8 | template_name=$2 # e.g. "srvd_entrypoint.sh" 9 | 10 | cp ../../entrypoints/"$template_name" ../srvd/entrypoint.sh # copy template to the mounted folder 11 | 12 | prefix="sed -i" 13 | 14 | # if on MacOS 15 | if [[ $(uname) == "Darwin" ]]; 16 | then 17 | prefix="$prefix ''" 18 | fi 19 | 20 | eval "$prefix" "s/@srvdatsign/${srvd}/g" ../srvd/entrypoint.sh -------------------------------------------------------------------------------- /tests/end2end_tests/contexts/_init_/setup-srvd-keys.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # this script copies the keys from ~/.atsign/keys to ../srvd/keys 4 | # example usage: ./setup-srvd-keys.sh @alice 5 | 6 | srvd=$1 7 | 8 | cp ~/.atsign/keys/"$srvd"_key.atKeys ../srvd/.atsign/keys/"$srvd"_key.atKeys # copy keys to the mounted folder 9 | 10 | if [[ ! -f ../srvd/.atsign/keys/${srvd}_key.atKeys ]]; 11 | then 12 | echo "Could not copy ${srvd}_key.atKeys to ../srvd/.atsign/keys/${srvd}_key.atKeys" 13 | exit 1 14 | fi -------------------------------------------------------------------------------- /tests/end2end_tests/contexts/_init_/setup-sshnp-keys.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # this script copies the keys from ~/.atsign/keys to ../sshnp/keys 4 | # example usage: ./setup-sshnp-keys.sh @alice 5 | 6 | sshnp=$1 7 | 8 | cp ~/.atsign/keys/"$sshnp"_key.atKeys ../sshnp/.atsign/keys/"$sshnp"_key.atKeys # copy keys to the mounted folder 9 | 10 | if [[ ! -f ../sshnp/.atsign/keys/${sshnp}_key.atKeys ]]; 11 | then 12 | echo "Could not copy ${sshnp}_key.atKeys to ../sshnp/.atsign/keys/${sshnp}_key.atKeys" 13 | exit 1 14 | fi -------------------------------------------------------------------------------- /tests/end2end_tests/contexts/_init_/setup-sshnpd-keys.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # this script copies the keys from ~/.atsign/keys to ../sshnpd/keys 4 | # example usage: ./setup-sshnpd-keys.sh @alice 5 | 6 | sshnpd=$1 7 | 8 | cp ~/.atsign/keys/"$sshnpd"_key.atKeys ../sshnpd/.atsign/keys/"$sshnpd"_key.atKeys # copy keys to the mounted folder 9 | 10 | if [[ ! -f ../sshnpd/.atsign/keys/${sshnpd}_key.atKeys ]]; 11 | then 12 | echo "Could not copy ${sshnpd}_key.atKeys to ../sshnpd/.atsign/keys/${sshnpd}_key.atKeys" 13 | exit 1 14 | fi -------------------------------------------------------------------------------- /tests/end2end_tests/contexts/srvd/.atsign/keys/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/tests/end2end_tests/contexts/srvd/.atsign/keys/.gitkeep -------------------------------------------------------------------------------- /tests/end2end_tests/contexts/sshnp/.atsign/keys/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/tests/end2end_tests/contexts/sshnp/.atsign/keys/.gitkeep -------------------------------------------------------------------------------- /tests/end2end_tests/contexts/sshnpd/.atsign/keys/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/tests/end2end_tests/contexts/sshnpd/.atsign/keys/.gitkeep -------------------------------------------------------------------------------- /tests/end2end_tests/contexts/sshnpd/test.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # this is script is meant to be run by the sshnp container. 3 | # cat test.txt and check if "test passed" exit 0, otherwise exit 1 4 | cat test.txt | grep "Test Passed" 5 | if [ $? -eq 0 ] 6 | then 7 | echo "Successfully SSH'd into the sshnpd container" 8 | exit 0 9 | fi 10 | echo "Test Failed" 11 | exit 1 12 | -------------------------------------------------------------------------------- /tests/end2end_tests/contexts/sshnpd/test.txt: -------------------------------------------------------------------------------- 1 | ====== 2 | 3 | Test Passed 4 | 5 | This is a text file in sshnpd to test that sshnp ssh'd correctly. 6 | 7 | ====== 8 | -------------------------------------------------------------------------------- /tests/end2end_tests/entrypoints/srvd_entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | "$HOME"/.local/bin/srvd -a @srvdatsign -i "$(hostname -i)" -v -s 2>&1 | tee -a srvd.log 3 | -------------------------------------------------------------------------------- /tests/end2end_tests/entrypoints/sshnpd_entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo "SSHNPD START ENTRY" 3 | SSHNPD_COMMAND="$HOME/.local/bin/sshnpd -a @sshnpdatsign -m @sshnpatsign -d deviceName -s -u -v 2>&1 | tee -a sshnpd.log" 4 | echo "Running: $SSHNPD_COMMAND" 5 | eval "$SSHNPD_COMMAND" 6 | -------------------------------------------------------------------------------- /tests/end2end_tests/entrypoints/sshnpd_installer_entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | SSHNPD_COMMAND="$HOME/.local/bin/sshnpd@sshnpatsign 2>&1 | tee -a sshnpd.log" 3 | echo "Running: $SSHNPD_COMMAND" 4 | eval "$SSHNPD_COMMAND" -------------------------------------------------------------------------------- /tests/end2end_tests/tests/.gitignore: -------------------------------------------------------------------------------- 1 | /docker-compose.yaml -------------------------------------------------------------------------------- /tests/end2end_tests/tests/docker-compose-base.yaml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | networks: 3 | sshnp: 4 | driver: bridge 5 | name: atsigncompany/sshnp-e2e-network-sshnp 6 | sshnpd: 7 | driver: bridge 8 | name: atsigncompany/sshnp-e2e-network-sshnpd 9 | services: 10 | image-runtime-local: 11 | build: 12 | context: ../../../ # root of the repository 13 | dockerfile: ./tests/end2end_tests/image/Dockerfile 14 | target: runtime-local 15 | image: atsigncompany/sshnp-e2e-runtime:local 16 | deploy: 17 | mode: replicated 18 | replicas: 0 19 | -------------------------------------------------------------------------------- /tests/end2end_tests/tests/docker-compose-blank-base.yaml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | networks: 3 | sshnp: 4 | driver: bridge 5 | name: atsigncompany/sshnp-e2e-network-sshnp 6 | sshnpd: 7 | driver: bridge 8 | name: atsigncompany/sshnp-e2e-network-sshnpd 9 | services: 10 | -------------------------------------------------------------------------------- /tests/end2end_tests/tests/service-container-srvd.yaml: -------------------------------------------------------------------------------- 1 | container-srvd: 2 | container_name: srvd 3 | volumes: 4 | - ../contexts/srvd:/mount 5 | network_mode: host 6 | healthcheck: 7 | test: ["CMD", "grep", "-Eq", "monitor started for @", "/atsign/srvd.log"] 8 | start_period: 10s # Wait 10 seconds before checking 9 | interval: 5s # Check every 5 seconds 10 | timeout: 1s # If a check takes longer than a second, consider it a failed check 11 | retries: 36 # Retry the check n times (180 * 5s = 15 mins) 12 | # auto added: 13 | # - image 14 | # - depends_on: (runtime service) 15 | -------------------------------------------------------------------------------- /tests/end2end_tests/tests/service-container-sshnp.yaml: -------------------------------------------------------------------------------- 1 | container-sshnp: 2 | container_name: sshnp 3 | volumes: 4 | - ../contexts/sshnp:/mount 5 | networks: 6 | - sshnp 7 | # auto added: 8 | # - image 9 | # - depends_on: (sshnpd + runtime service) 10 | -------------------------------------------------------------------------------- /tests/end2end_tests/tests/service-container-sshnpd.yaml: -------------------------------------------------------------------------------- 1 | container-sshnpd: 2 | container_name: sshnpd 3 | volumes: 4 | - ../contexts/sshnpd:/mount 5 | networks: 6 | - sshnpd 7 | healthcheck: 8 | test: ["CMD", "grep", "-Eq", "monitor started for @", "/atsign/sshnpd.log"] 9 | start_period: 10s # Wait 10 seconds before checking 10 | interval: 5s # Check every 5 seconds 11 | timeout: 1s # If a check takes longer than a second, consider it a failed check 12 | retries: 36 # Retry the check n times 13 | # auto added: 14 | # - image 15 | # - depends_on: (srvd + runtime service) 16 | -------------------------------------------------------------------------------- /tests/end2end_tests/tests/service-image-runtime-branch.yaml: -------------------------------------------------------------------------------- 1 | image-runtime-branch: 2 | deploy: 3 | mode: replicated 4 | replicas: 0 5 | build: 6 | context: ../image/ # the path to the directory containing the main image Dockerfile 7 | dockerfile: ./Dockerfile 8 | target: runtime-branch 9 | args: 10 | # auto added: 11 | # - branch 12 | # auto added: 13 | # - image 14 | -------------------------------------------------------------------------------- /tests/end2end_tests/tests/service-image-runtime-release.yaml: -------------------------------------------------------------------------------- 1 | image-runtime-release: 2 | deploy: 3 | mode: replicated 4 | replicas: 0 5 | build: 6 | context: ../image/ # the path to the directory containing the main image Dockerfile 7 | dockerfile: ./Dockerfile 8 | target: runtime-release 9 | args: 10 | # auto added: 11 | # - release 12 | # auto added: 13 | # - image 14 | -------------------------------------------------------------------------------- /tests/end2end_tests/tests/service-image-runtime-sshnp-installer.yaml: -------------------------------------------------------------------------------- 1 | image-runtime-sshnp-installer: 2 | deploy: 3 | mode: replicated 4 | replicas: 0 5 | build: 6 | context: ../../../ # the root of the repository 7 | dockerfile: ./tests/end2end_tests/image/Dockerfile 8 | target: runtime-sshnp-installer 9 | args: 10 | # auto added: 11 | # - client_atsign 12 | # - device_atsign 13 | # - host_atsign 14 | # auto added: 15 | # - image 16 | -------------------------------------------------------------------------------- /tests/end2end_tests/tests/service-image-runtime-sshnpd-installer.yaml: -------------------------------------------------------------------------------- 1 | image-runtime-sshnpd-installer: 2 | deploy: 3 | mode: replicated 4 | replicas: 0 5 | build: 6 | context: ../../../ # the root of the repository 7 | dockerfile: ./tests/end2end_tests/image/Dockerfile 8 | target: runtime-sshnpd-installer 9 | args: 10 | # auto added: 11 | # - client_atsign 12 | # - device_atsign 13 | # - device_name 14 | # auto added: 15 | # - image 16 | -------------------------------------------------------------------------------- /tools/.gitignore: -------------------------------------------------------------------------------- 1 | macos-signing.env 2 | 3 | #.NET Related 4 | .vs 5 | bin 6 | obj 7 | *.user 8 | launchSettings.json 9 | windows-installer/NoPortsInstaller/Resources/* 10 | windows-installer/NoPortsHealthCheck/publish -------------------------------------------------------------------------------- /tools/local-e2e-test/.env.template: -------------------------------------------------------------------------------- 1 | SSHNP_ATSIGN= 2 | SSHNPD_ATSIGN= 3 | -------------------------------------------------------------------------------- /tools/local-e2e-test/.gitignore: -------------------------------------------------------------------------------- 1 | .secrets 2 | .env -------------------------------------------------------------------------------- /tools/local-e2e-test/.secrets.template: -------------------------------------------------------------------------------- 1 | ATKEYS_[ATSIGN_NAME]="JSON_FROM_KEYS" 2 | # (Quotes inside must be double delimited i.e. \\" ) 3 | -------------------------------------------------------------------------------- /tools/local-e2e-test/run-act.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | FULL_PATH_TO_SCRIPT="$(realpath "${BASH_SOURCE[0]}")" 4 | SCRIPT_DIRECTORY="$(dirname "$FULL_PATH_TO_SCRIPT")" 5 | PROJECT_ROOT="$SCRIPT_DIRECTORY/../.." 6 | 7 | DOCKER_HOST="$(docker context inspect -f '{{.Endpoints.docker.Host}}')" 8 | env DOCKER_HOST="$DOCKER_HOST" \ 9 | act \ 10 | -W "$PROJECT_ROOT/.github/workflows/end2end_tests.yaml" \ 11 | --env-file "$SCRIPT_DIRECTORY/.env" \ 12 | --secret-file "$SCRIPT_DIRECTORY/.secrets" \ 13 | --bind \ 14 | --job e2e_test \ 15 | --matrix np:local \ 16 | --matrix npd:local \ 17 | "$@" 18 | -------------------------------------------------------------------------------- /tools/manual-docker/clean-local.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | sudo docker compose --project-directory branch down --rmi=local --remove-orphans 3 | sudo docker compose --project-directory release down --rmi=local --remove-orphans 4 | sudo docker compose --project-directory local down --rmi=local --remove-orphans 5 | sudo docker compose --project-directory blank down --rmi=local --remove-orphans 6 | -------------------------------------------------------------------------------- /tools/ncat-srv-setup/.gitignore: -------------------------------------------------------------------------------- 1 | /c 2 | /dart 3 | -------------------------------------------------------------------------------- /tools/ncat-srv-setup/c-build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | script_dir=$(dirname "$(readlink -f "$0")") 4 | root_dir=$script_dir/../.. 5 | build_dir=$script_dir/c 6 | 7 | cmake -S "$root_dir/packages/c/srv" -B "$build_dir" 8 | sudo cmake --build "$build_dir" 9 | -------------------------------------------------------------------------------- /tools/ncat-srv-setup/c-run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | session_name=c_srv_test 4 | 5 | if ! tmux has-session -t $session_name; then 6 | tmux new-session -ds $session_name 7 | # Setup the layout 8 | tmux split-window -h -p 50 -t $session_name:^ 9 | tmux split-window -v -p 50 -t $session_name:^ 10 | fi 11 | 12 | # Left side pane 13 | tmux send-keys -t $session_name:^.0 C-c C-l # Clear the pane 14 | tmux send-keys -t $session_name:^.0 15 | 16 | # Top right pane 17 | tmux send-keys -t $session_name:^.1 C-c C-l # Clear the panel 18 | tmux send-keys -t $session_name:^.1 19 | 20 | # Bottom right pane 21 | tmux send-keys -t $session_name:^.2 C-c C-l # Clear the panel 22 | tmux send-keys -t $session_name:^.2 23 | -------------------------------------------------------------------------------- /tools/ncat-srv-setup/dart-build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | script_dir=$(dirname "$(readlink -f "$0")") 4 | root_dir=$script_dir/../.. 5 | build_dir=$script_dir/dart 6 | 7 | dart compile exe "$root_dir/packages/dart/sshnoports/bin/srv.dart" -o "$build_dir/srv" 8 | -------------------------------------------------------------------------------- /tools/ncat-srv-setup/dart-run.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/tools/ncat-srv-setup/dart-run.sh -------------------------------------------------------------------------------- /tools/windows-installer/NoPortsHealthCheck/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tools/windows-installer/NoPortsInstaller/App.xaml: -------------------------------------------------------------------------------- 1 |  6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /tools/windows-installer/NoPortsInstaller/Assets/NoPortsDark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/tools/windows-installer/NoPortsInstaller/Assets/NoPortsDark.png -------------------------------------------------------------------------------- /tools/windows-installer/NoPortsInstaller/Assets/noports-stacked-dark.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atsign-foundation/noports/29c3a396c7a6b651c01f3af8384bcb049ce47584/tools/windows-installer/NoPortsInstaller/Assets/noports-stacked-dark.ico -------------------------------------------------------------------------------- /tools/windows-installer/NoPortsInstaller/IAccessRules.cs: -------------------------------------------------------------------------------- 1 | namespace NoPortsInstaller 2 | { 3 | public enum AccessType 4 | { 5 | Manager, 6 | Policy, 7 | } 8 | 9 | public interface IAccessEntry 10 | { 11 | string atSign { get; set; } 12 | AccessType type { get; set; } 13 | } 14 | 15 | public interface IAccessRules 16 | { 17 | List Entries { get; set; } 18 | List Managers { get; } 19 | IAccessEntry? Policy { get; } 20 | 21 | bool IsValid { get; } 22 | 23 | void SetEntryType(string atSign, AccessType type); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /tools/windows-installer/NoPortsInstaller/InstallType.cs: -------------------------------------------------------------------------------- 1 | public enum InstallType 2 | { 3 | Home, 4 | Device, 5 | Client, 6 | Onboard, 7 | Enroll, 8 | Approve, 9 | Uninstall 10 | } 11 | 12 | -------------------------------------------------------------------------------- /tools/windows-installer/NoPortsInstaller/Pages/Device/InstallService.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Controls; 2 | 3 | namespace NoPortsInstaller.Pages.Install 4 | { 5 | /// 6 | /// Interaction logic for Page1.xaml 7 | /// 8 | public partial class InstallService : Page 9 | { 10 | private readonly Controller _controller; 11 | public InstallService() 12 | { 13 | InitializeComponent(); 14 | _controller = App.ControllerInstance; 15 | _ = _controller.InstallService(InstallProgress, Status); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /tools/windows-installer/NoPortsInstaller/Pages/MainWindow.xaml: -------------------------------------------------------------------------------- 1 |  9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /tools/windows-installer/NoPortsInstaller/Pages/MainWindow.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | 3 | namespace NoPortsInstaller.Pages; 4 | 5 | /// 6 | /// Interaction logic for MainWindow.xaml 7 | /// 8 | public partial class MainWindow : Window 9 | { 10 | private readonly Controller _controller; 11 | public MainWindow() 12 | { 13 | InitializeComponent(); 14 | _controller = App.ControllerInstance; 15 | _controller.Window = this; 16 | _controller.LoadPages(InstallType.Home); 17 | } 18 | } -------------------------------------------------------------------------------- /tools/windows-installer/NoPortsInstaller/Pages/ServiceErrorPage.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | using System.Windows.Controls; 3 | 4 | namespace NoPortsInstaller.Pages 5 | { 6 | /// 7 | /// Interaction logic for ServiceErrorPage.xaml 8 | /// 9 | public partial class ServiceErrorPage : Page 10 | { 11 | public ServiceErrorPage(string errorMsg = "") 12 | { 13 | InitializeComponent(); 14 | ErrorBox.Text = errorMsg; 15 | } 16 | 17 | private void NextPageButton_Click(object sender, RoutedEventArgs e) 18 | { 19 | Application.Current.Shutdown(); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /tools/windows-installer/NoPortsInstaller/Pages/Shared/FinishInstall.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | using System.Windows.Controls; 3 | 4 | namespace NoPortsInstaller.Pages.Install 5 | { 6 | /// 7 | /// Interaction logic for FinishInstall.xaml 8 | /// 9 | public partial class FinishInstall : Page 10 | { 11 | public FinishInstall() 12 | { 13 | InitializeComponent(); 14 | } 15 | 16 | private void NextPageButton_Click(object sender, RoutedEventArgs e) 17 | { 18 | InstallLogger.DumpLog(); 19 | Application.Current.Shutdown(); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /tools/windows-installer/NoPortsInstaller/Pages/Uninstall/FinishUninstall.xaml.cs: -------------------------------------------------------------------------------- 1 | using System.Windows; 2 | using System.Windows.Controls; 3 | 4 | namespace NoPortsInstaller.Pages.Update 5 | { 6 | /// 7 | /// Interaction logic for FinishInstall.xaml 8 | /// 9 | public partial class FinishUninstall : Page 10 | { 11 | public FinishUninstall() 12 | { 13 | InitializeComponent(); 14 | } 15 | 16 | private void NextPageButton_Click(object sender, RoutedEventArgs e) 17 | { 18 | Application.Current.Shutdown(); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /tools/windows-installer/NoPortsInstaller/Properties/PublishProfiles/FolderProfile.pubxml: -------------------------------------------------------------------------------- 1 |  2 | 5 | 6 | 7 | Release 8 | Any CPU 9 | bin\Release\win-x64\publish\ 10 | FileSystem 11 | <_TargetId>Folder 12 | net8.0-windows 13 | win-x64 14 | true 15 | false 16 | 17 | -------------------------------------------------------------------------------- /tools/windows-installer/SshnpdService/GlobalSuppressions.cs: -------------------------------------------------------------------------------- 1 | // This file is used by Code Analysis to maintain SuppressMessage 2 | // attributes that are applied to this project. 3 | // Project-level suppressions either have no target or are given 4 | // a specific target and scoped to a namespace, type, member, etc. 5 | 6 | using System.Diagnostics.CodeAnalysis; 7 | 8 | [assembly: SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "Windows Only")] 9 | -------------------------------------------------------------------------------- /tools/windows-installer/SshnpdService/Properties/PublishProfiles/FolderProfile.pubxml: -------------------------------------------------------------------------------- 1 |  2 | 5 | 6 | 7 | Release 8 | x64 9 | bin\Release\net8.0\publish\ 10 | FileSystem 11 | <_TargetId>Folder 12 | net8.0-windows10.0.22621.0 13 | win-x64 14 | true 15 | 16 | -------------------------------------------------------------------------------- /tools/windows-installer/SshnpdService/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.Hosting.Lifetime": "Information" 6 | } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /tools/windows-installer/SshnpdService/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "Logging": { 3 | "LogLevel": { 4 | "Default": "Information", 5 | "Microsoft.Hosting.Lifetime": "Information" 6 | } 7 | } 8 | } 9 | --------------------------------------------------------------------------------