external rename (#2265)

* backend rename

* rename embassy and closes #2179

* update root ca name on disk

* update MOTD

* update readmes

* your server typo

* another tiny typo

* fix png name

* Update backend/src/net/wifi.rs

Co-authored-by: Lucy C <12953208+elvece@users.noreply.github.com>

* changes needed due to rebase

---------

Co-authored-by: Matt Hill <matthewonthemoon@gmail.com>
Co-authored-by: Matt Hill <MattDHill@users.noreply.github.com>
Co-authored-by: Lucy C <12953208+elvece@users.noreply.github.com>
This commit is contained in:
Aiden McClelland
2023-05-11 16:48:52 -06:00
committed by GitHub
parent c7d82102ed
commit 4a8f323be7
86 changed files with 516 additions and 468 deletions

View File

@@ -1,6 +1,6 @@
name: 🐛 Bug Report name: 🐛 Bug Report
description: Create a report to help us improve embassyOS description: Create a report to help us improve StartOS
title: '[bug]: ' title: "[bug]: "
labels: [Bug, Needs Triage] labels: [Bug, Needs Triage]
assignees: assignees:
- MattDHill - MattDHill
@@ -10,19 +10,19 @@ body:
label: Prerequisites label: Prerequisites
description: Please confirm you have completed the following. description: Please confirm you have completed the following.
options: options:
- label: I have searched for [existing issues](https://github.com/start9labs/embassy-os/issues) that already report this problem. - label: I have searched for [existing issues](https://github.com/start9labs/start-os/issues) that already report this problem.
required: true required: true
- type: input - type: input
attributes: attributes:
label: embassyOS Version label: StartOS Version
description: What version of embassyOS are you running? description: What version of StartOS are you running?
placeholder: e.g. 0.3.0 placeholder: e.g. 0.3.4.2
validations: validations:
required: true required: true
- type: dropdown - type: dropdown
attributes: attributes:
label: Device label: Device
description: What device are you using to connect to Embassy? description: What device are you using to connect to your server?
options: options:
- Phone/tablet - Phone/tablet
- Laptop/Desktop - Laptop/Desktop
@@ -52,7 +52,7 @@ body:
- type: dropdown - type: dropdown
attributes: attributes:
label: Browser label: Browser
description: What browser are you using to connect to Embassy? description: What browser are you using to connect to your server?
options: options:
- Firefox - Firefox
- Brave - Brave

View File

@@ -1,6 +1,6 @@
name: 💡 Feature Request name: 💡 Feature Request
description: Suggest an idea for embassyOS description: Suggest an idea for StartOS
title: '[feat]: ' title: "[feat]: "
labels: [Enhancement] labels: [Enhancement]
assignees: assignees:
- MattDHill - MattDHill
@@ -10,7 +10,7 @@ body:
label: Prerequisites label: Prerequisites
description: Please confirm you have completed the following. description: Please confirm you have completed the following.
options: options:
- label: I have searched for [existing issues](https://github.com/start9labs/embassy-os/issues) that already suggest this feature. - label: I have searched for [existing issues](https://github.com/start9labs/start-os/issues) that already suggest this feature.
required: true required: true
- type: textarea - type: textarea
attributes: attributes:
@@ -27,7 +27,7 @@ body:
- type: textarea - type: textarea
attributes: attributes:
label: Describe Preferred Solution label: Describe Preferred Solution
description: How you want this feature added to embassyOS? description: How you want this feature added to StartOS?
- type: textarea - type: textarea
attributes: attributes:
label: Describe Alternatives label: Describe Alternatives

View File

@@ -1,6 +1,6 @@
<!-- omit in toc --> <!-- omit in toc -->
# Contributing to Embassy OS # Contributing to StartOS
First off, thanks for taking the time to contribute! ❤️ First off, thanks for taking the time to contribute! ❤️
@@ -19,7 +19,7 @@ forward to your contributions. 🎉
> - Tweet about it > - Tweet about it
> - Refer this project in your project's readme > - Refer this project in your project's readme
> - Mention the project at local meetups and tell your friends/colleagues > - Mention the project at local meetups and tell your friends/colleagues
> - Buy an [Embassy](https://start9labs.com) > - Buy a [Start9 server](https://start9.com)
<!-- omit in toc --> <!-- omit in toc -->
@@ -49,7 +49,7 @@ forward to your contributions. 🎉
> [Documentation](https://docs.start9labs.com). > [Documentation](https://docs.start9labs.com).
Before you ask a question, it is best to search for existing Before you ask a question, it is best to search for existing
[Issues](https://github.com/Start9Labs/embassy-os/issues) that might help you. [Issues](https://github.com/Start9Labs/start-os/issues) that might help you.
In case you have found a suitable issue and still need clarification, you can In case you have found a suitable issue and still need clarification, you can
write your question in this issue. It is also advisable to search the internet write your question in this issue. It is also advisable to search the internet
for answers first. for answers first.
@@ -57,7 +57,7 @@ for answers first.
If you then still feel the need to ask a question and need clarification, we If you then still feel the need to ask a question and need clarification, we
recommend the following: recommend the following:
- Open an [Issue](https://github.com/Start9Labs/embassy-os/issues/new). - Open an [Issue](https://github.com/Start9Labs/start-os/issues/new).
- Provide as much context as you can about what you're running into. - Provide as much context as you can about what you're running into.
- Provide project and platform versions, depending on what seems relevant. - Provide project and platform versions, depending on what seems relevant.
@@ -105,7 +105,7 @@ steps in advance to help us fix any potential bug as fast as possible.
- To see if other users have experienced (and potentially already solved) the - To see if other users have experienced (and potentially already solved) the
same issue you are having, check if there is not already a bug report existing same issue you are having, check if there is not already a bug report existing
for your bug or error in the for your bug or error in the
[bug tracker](https://github.com/Start9Labs/embassy-os/issues?q=label%3Abug). [bug tracker](https://github.com/Start9Labs/start-os/issues?q=label%3Abug).
- Also make sure to search the internet (including Stack Overflow) to see if - Also make sure to search the internet (including Stack Overflow) to see if
users outside of the GitHub community have discussed the issue. users outside of the GitHub community have discussed the issue.
- Collect information about the bug: - Collect information about the bug:
@@ -131,7 +131,7 @@ steps in advance to help us fix any potential bug as fast as possible.
We use GitHub issues to track bugs and errors. If you run into an issue with the We use GitHub issues to track bugs and errors. If you run into an issue with the
project: project:
- Open an [Issue](https://github.com/Start9Labs/embassy-os/issues/new/choose) - Open an [Issue](https://github.com/Start9Labs/start-os/issues/new/choose)
selecting the appropriate type. selecting the appropriate type.
- Explain the behavior you would expect and the actual behavior. - Explain the behavior you would expect and the actual behavior.
- Please provide as much context as possible and describe the _reproduction - Please provide as much context as possible and describe the _reproduction
@@ -155,8 +155,7 @@ Once it's filed:
### Suggesting Enhancements ### Suggesting Enhancements
This section guides you through submitting an enhancement suggestion for Embassy This section guides you through submitting an enhancement suggestion for StartOS, **including completely new features and minor improvements to existing
OS, **including completely new features and minor improvements to existing
functionality**. Following these guidelines will help maintainers and the functionality**. Following these guidelines will help maintainers and the
community to understand your suggestion and find related suggestions. community to understand your suggestion and find related suggestions.
@@ -168,7 +167,7 @@ community to understand your suggestion and find related suggestions.
- Read the [documentation](https://start9.com/latest/user-manual) carefully and - Read the [documentation](https://start9.com/latest/user-manual) carefully and
find out if the functionality is already covered, maybe by an individual find out if the functionality is already covered, maybe by an individual
configuration. configuration.
- Perform a [search](https://github.com/Start9Labs/embassy-os/issues) to see if - Perform a [search](https://github.com/Start9Labs/start-os/issues) to see if
the enhancement has already been suggested. If it has, add a comment to the the enhancement has already been suggested. If it has, add a comment to the
existing issue instead of opening a new one. existing issue instead of opening a new one.
- Find out whether your idea fits with the scope and aims of the project. It's - Find out whether your idea fits with the scope and aims of the project. It's
@@ -182,7 +181,7 @@ community to understand your suggestion and find related suggestions.
#### How Do I Submit a Good Enhancement Suggestion? #### How Do I Submit a Good Enhancement Suggestion?
Enhancement suggestions are tracked as Enhancement suggestions are tracked as
[GitHub issues](https://github.com/Start9Labs/embassy-os/issues). [GitHub issues](https://github.com/Start9Labs/start-os/issues).
- Use a **clear and descriptive title** for the issue to identify the - Use a **clear and descriptive title** for the issue to identify the
suggestion. suggestion.
@@ -197,7 +196,7 @@ Enhancement suggestions are tracked as
macOS and Windows, and [this tool](https://github.com/colinkeenan/silentcast) macOS and Windows, and [this tool](https://github.com/colinkeenan/silentcast)
or [this tool](https://github.com/GNOME/byzanz) on Linux. or [this tool](https://github.com/GNOME/byzanz) on Linux.
<!-- this should only be included if the project has a GUI --> <!-- this should only be included if the project has a GUI -->
- **Explain why this enhancement would be useful** to most Embassy OS users. You - **Explain why this enhancement would be useful** to most StartOS users. You
may also want to point out the other projects that solved it better and which may also want to point out the other projects that solved it better and which
could serve as inspiration. could serve as inspiration.
@@ -205,24 +204,24 @@ Enhancement suggestions are tracked as
### Project Structure ### Project Structure
embassyOS is composed of the following components. Please visit the README for StartOS is composed of the following components. Please visit the README for
each component to understand the dependency requirements and installation each component to understand the dependency requirements and installation
instructions. instructions.
- [`backend`](backend/README.md) (Rust) is a command line utility, daemon, and - [`backend`](backend/README.md) (Rust) is a command line utility, daemon, and
software development kit that sets up and manages services and their software development kit that sets up and manages services and their
environments, provides the interface for the ui, manages system state, and environments, provides the interface for the ui, manages system state, and
provides utilities for packaging services for embassyOS. provides utilities for packaging services for StartOS.
- [`build`](build/README.md) contains scripts and necessary for deploying - [`build`](build/README.md) contains scripts and necessary for deploying
embassyOS to a debian/raspbian system. StartOS to a debian/raspbian system.
- [`frontend`](frontend/README.md) (Typescript Ionic Angular) is the code that - [`frontend`](frontend/README.md) (Typescript Ionic Angular) is the code that
is deployed to the browser to provide the user interface for embassyOS. is deployed to the browser to provide the user interface for StartOS.
- `projects/ui` - Code for the user interface that is displayed when embassyOS - `projects/ui` - Code for the user interface that is displayed when StartOS
is running normally. is running normally.
- `projects/setup-wizard`(frontend/README.md) - Code for the user interface - `projects/setup-wizard`(frontend/README.md) - Code for the user interface
that is displayed during the setup and recovery process for embassyOS. that is displayed during the setup and recovery process for StartOS.
- `projects/diagnostic-ui` - Code for the user interface that is displayed - `projects/diagnostic-ui` - Code for the user interface that is displayed
when something has gone wrong with starting up embassyOS, which provides when something has gone wrong with starting up StartOS, which provides
helpful debugging tools. helpful debugging tools.
- `libs` (Rust) is a set of standalone crates that were separated out of - `libs` (Rust) is a set of standalone crates that were separated out of
`backend` for the purpose of portability `backend` for the purpose of portability
@@ -232,18 +231,18 @@ instructions.
[client](https://github.com/Start9Labs/patch-db/tree/master/client) with its [client](https://github.com/Start9Labs/patch-db/tree/master/client) with its
own dependency and installation requirements. own dependency and installation requirements.
- `system-images` - (Docker, Rust) A suite of utility Docker images that are - `system-images` - (Docker, Rust) A suite of utility Docker images that are
preloaded with embassyOS to assist with functions relating to services (eg. preloaded with StartOS to assist with functions relating to services (eg.
configuration, backups, health checks). configuration, backups, health checks).
### Your First Code Contribution ### Your First Code Contribution
#### Setting Up Your Development Environment #### Setting Up Your Development Environment
First, clone the embassyOS repository and from the project root, pull in the First, clone the StartOS repository and from the project root, pull in the
submodules for dependent libraries. submodules for dependent libraries.
```sh ```sh
git clone https://github.com/Start9Labs/embassy-os.git git clone https://github.com/Start9Labs/start-os.git
git submodule update --init --recursive git submodule update --init --recursive
``` ```
@@ -254,7 +253,7 @@ to, follow the installation requirements listed in that component's README
#### Building The Raspberry Pi Image #### Building The Raspberry Pi Image
This step is for setting up an environment in which to test your code changes if This step is for setting up an environment in which to test your code changes if
you do not yet have a embassyOS. you do not yet have a StartOS.
- Requirements - Requirements
- `ext4fs` (available if running on the Linux kernel) - `ext4fs` (available if running on the Linux kernel)
@@ -262,7 +261,7 @@ you do not yet have a embassyOS.
- GNU Make - GNU Make
- Building - Building
- see setup instructions [here](build/README.md) - see setup instructions [here](build/README.md)
- run `make embassyos-raspi.img ARCH=aarch64` from the project root - run `make startos-raspi.img ARCH=aarch64` from the project root
### Improving The Documentation ### Improving The Documentation
@@ -286,7 +285,7 @@ seamless and intuitive experience.
### Formatting ### Formatting
Each component of embassyOS contains its own style guide. Code must be formatted Each component of StartOS contains its own style guide. Code must be formatted
with the formatter designated for each component. These are outlined within each with the formatter designated for each component. These are outlined within each
component folder's README. component folder's README.
@@ -306,7 +305,7 @@ component. i.e. `backend: update to tokio v0.3`.
The body of a pull request should contain sufficient description of what the The body of a pull request should contain sufficient description of what the
changes do, as well as a justification. You should include references to any changes do, as well as a justification. You should include references to any
relevant [issues](https://github.com/Start9Labs/embassy-os/issues). relevant [issues](https://github.com/Start9Labs/start-os/issues).
### Rebasing Changes ### Rebasing Changes

View File

@@ -1,6 +1,6 @@
# embassyOS # StartOS
[![version](https://img.shields.io/github/v/tag/Start9Labs/embassy-os?color=success)](https://github.com/Start9Labs/embassy-os/releases) [![version](https://img.shields.io/github/v/tag/Start9Labs/start-os?color=success)](https://github.com/Start9Labs/start-os/releases)
[![build](https://github.com/Start9Labs/embassy-os/actions/workflows/product.yaml/badge.svg)](https://github.com/Start9Labs/embassy-os/actions/workflows/product.yaml) [![build](https://github.com/Start9Labs/start-os/actions/workflows/product.yaml/badge.svg)](https://github.com/Start9Labs/start-os/actions/workflows/product.yaml)
[![community](https://img.shields.io/badge/community-matrix-yellow)](https://matrix.to/#/#community:matrix.start9labs.com) [![community](https://img.shields.io/badge/community-matrix-yellow)](https://matrix.to/#/#community:matrix.start9labs.com)
[![community](https://img.shields.io/badge/community-telegram-informational)](https://t.me/start9_labs) [![community](https://img.shields.io/badge/community-telegram-informational)](https://t.me/start9_labs)
[![support](https://img.shields.io/badge/support-docs-important)](https://docs.start9.com) [![support](https://img.shields.io/badge/support-docs-important)](https://docs.start9.com)
@@ -12,16 +12,16 @@
### _Welcome to the era of Sovereign Computing_ ### ### _Welcome to the era of Sovereign Computing_ ###
embassyOS is a browser-based, graphical operating system for a personal server. embassyOS facilitates the discovery, installation, network configuration, service configuration, data backup, dependency management, and health monitoring of self-hosted software services. It is the most advanced, secure, reliable, and user friendly personal server OS in the world. StartOS is a browser-based, graphical operating system for a personal server. StartOS facilitates the discovery, installation, network configuration, service configuration, data backup, dependency management, and health monitoring of self-hosted software services. It is the most advanced, secure, reliable, and user friendly personal server OS in the world.
## Running embassyOS ## Running StartOS
There are multiple ways to get your hands on embassyOS. There are multiple ways to get your hands on StartOS.
### :moneybag: Buy an Embassy ### :moneybag: Buy a Start9 server
This is the most convenient option. Simply [buy an Embassy](https://start9.com) from Start9 and plug it in. Depending on where you live, shipping costs and import duties will vary. This is the most convenient option. Simply [buy a server](https://start9.com) from Start9 and plug it in. Depending on where you live, shipping costs and import duties will vary.
### :construction_worker: Build your own Embassy ### :construction_worker: Build your own server
While not as convenient as buying an Embassy, this option is easier than you might imagine, and there are 4 reasons why you might prefer it: This option is easier than you might imagine, and there are 4 reasons why you might prefer it:
1. You already have your own hardware. 1. You already have your own hardware.
1. You want to save on shipping costs. 1. You want to save on shipping costs.
1. You prefer not to divulge your physical address. 1. You prefer not to divulge your physical address.
@@ -29,23 +29,23 @@ While not as convenient as buying an Embassy, this option is easier than you mig
To pursue this option, follow one of our [DIY guides](https://start9.com/latest/diy). To pursue this option, follow one of our [DIY guides](https://start9.com/latest/diy).
### :hammer_and_wrench: Build embassyOS from Source ### :hammer_and_wrench: Build StartOS from Source
embassyOS can be built from source, for personal use, for free. StartOS can be built from source, for personal use, for free.
A detailed guide for doing so can be found [here](https://github.com/Start9Labs/embassy-os/blob/master/build/README.md). A detailed guide for doing so can be found [here](https://github.com/Start9Labs/start-os/blob/master/build/README.md).
## :heart: Contributing ## :heart: Contributing
There are multiple ways to contribute: work directly on embassyOS, package a service for the marketplace, or help with documentation and guides. To learn more about contributing, see [here](https://docs.start9.com/latest/contribute/) or [here](https://github.com/Start9Labs/embassy-os/blob/master/CONTRIBUTING.md). There are multiple ways to contribute: work directly on StartOS, package a service for the marketplace, or help with documentation and guides. To learn more about contributing, see [here](https://docs.start9.com/latest/contribute/) or [here](https://github.com/Start9Labs/start-os/blob/master/CONTRIBUTING.md).
## UI Screenshots ## UI Screenshots
<p align="center"> <p align="center">
<img src="assets/embassyOS.png" alt="embassyOS" width="85%"> <img src="assets/StartOS.png" alt="StartOS" width="85%">
</p> </p>
<p align="center"> <p align="center">
<img src="assets/eOS-preferences.png" alt="Embassy Preferences" width="49%"> <img src="assets/preferences.png" alt="StartOS Preferences" width="49%">
<img src="assets/eOS-ghost.png" alt="Embassy Ghost Service" width="49%"> <img src="assets/ghost.png" alt="StartOS Ghost Service" width="49%">
</p> </p>
<p align="center"> <p align="center">
<img src="assets/eOS-synapse-health-check.png" alt="Embassy Synapse Health Checks" width="49%"> <img src="assets/synapse-health-check.png" alt="StartOS Synapse Health Checks" width="49%">
<img src="assets/eOS-sideload.png" alt="Embassy Sideload Service" width="49%"> <img src="assets/sideload.png" alt="StartOS Sideload Service" width="49%">
</p> </p>

View File

Before

Width:  |  Height:  |  Size: 191 KiB

After

Width:  |  Height:  |  Size: 191 KiB

View File

Before

Width:  |  Height:  |  Size: 281 KiB

After

Width:  |  Height:  |  Size: 281 KiB

View File

Before

Width:  |  Height:  |  Size: 266 KiB

After

Width:  |  Height:  |  Size: 266 KiB

View File

Before

Width:  |  Height:  |  Size: 154 KiB

After

Width:  |  Height:  |  Size: 154 KiB

View File

Before

Width:  |  Height:  |  Size: 213 KiB

After

Width:  |  Height:  |  Size: 213 KiB

View File

@@ -1,6 +1,6 @@
[package] [package]
authors = ["Aiden McClelland <me@drbonez.dev>"] authors = ["Aiden McClelland <me@drbonez.dev>"]
description = "The core of the Start9 Embassy Operating System" description = "The core of StartOS"
documentation = "https://docs.rs/embassy-os" documentation = "https://docs.rs/embassy-os"
edition = "2021" edition = "2021"
keywords = [ keywords = [
@@ -13,7 +13,7 @@ keywords = [
] ]
name = "embassy-os" name = "embassy-os"
readme = "README.md" readme = "README.md"
repository = "https://github.com/Start9Labs/embassy-os" repository = "https://github.com/Start9Labs/start-os"
version = "0.3.4-rev.1" version = "0.3.4-rev.1"
[lib] [lib]

View File

@@ -1,4 +1,4 @@
# embassyOS Backend # StartOS Backend
- Requirements: - Requirements:
- [Install Rust](https://rustup.rs) - [Install Rust](https://rustup.rs)
@@ -12,16 +12,16 @@
## Structure ## Structure
The embassyOS backend is broken up into 4 different binaries: The StartOS backend is broken up into 4 different binaries:
- embassyd: This is the main workhorse of embassyOS - any new functionality you - embassyd: This is the main workhorse of StartOS - any new functionality you
want will likely go here want will likely go here
- embassy-init: This is the component responsible for allowing you to set up - embassy-init: This is the component responsible for allowing you to set up
your device, and handles system initialization on startup your device, and handles system initialization on startup
- embassy-cli: This is a CLI tool that will allow you to issue commands to - embassy-cli: This is a CLI tool that will allow you to issue commands to
embassyd and control it similarly to the UI embassyd and control it similarly to the UI
- embassy-sdk: This is a CLI tool that aids in building and packaging services - embassy-sdk: This is a CLI tool that aids in building and packaging services
you wish to deploy to the Embassy you wish to deploy to StartOS
Finally there is a library `embassy` that supports all four of these tools. Finally there is a library `embassy` that supports all four of these tools.
@@ -30,7 +30,7 @@ See [here](/backend/Cargo.toml) for details.
## Building ## Building
You can build the entire operating system image using `make` from the root of You can build the entire operating system image using `make` from the root of
the embassyOS project. This will subsequently invoke the build scripts above to the StartOS project. This will subsequently invoke the build scripts above to
actually create the requisite binaries and put them onto the final operating actually create the requisite binaries and put them onto the final operating
system image. system image.

View File

@@ -31,7 +31,7 @@ async fn setup_or_init(cfg_path: Option<PathBuf>) -> Result<(), Error> {
.arg("ssh") .arg("ssh")
.invoke(crate::ErrorKind::OpenSsh) .invoke(crate::ErrorKind::OpenSsh)
.await?; .await?;
embassy::hostname::sync_hostname(&embassy::hostname::Hostname("embassy".into())).await?; embassy::hostname::sync_hostname(&embassy::hostname::Hostname("start".into())).await?;
let ctx = InstallContext::init(cfg_path).await?; let ctx = InstallContext::init(cfg_path).await?;
@@ -55,7 +55,7 @@ async fn setup_or_init(cfg_path: Option<PathBuf>) -> Result<(), Error> {
.await .await
.is_err() .is_err()
{ {
embassy::hostname::sync_hostname(&embassy::hostname::Hostname("embassy".into())).await?; embassy::hostname::sync_hostname(&embassy::hostname::Hostname("start".into())).await?;
let ctx = SetupContext::init(cfg_path).await?; let ctx = SetupContext::init(cfg_path).await?;

View File

@@ -213,7 +213,7 @@ pub async fn import<P: AsRef<Path>>(
.is_none() .is_none()
{ {
return Err(Error::new( return Err(Error::new(
eyre!("Embassy disk not found."), eyre!("StartOS disk not found."),
crate::ErrorKind::DiskNotAvailable, crate::ErrorKind::DiskNotAvailable,
)); ));
} }
@@ -223,7 +223,7 @@ pub async fn import<P: AsRef<Path>>(
.any(|id| id == guid) .any(|id| id == guid)
{ {
return Err(Error::new( return Err(Error::new(
eyre!("An Embassy disk was found, but it is not the correct disk for this device."), eyre!("A StartOS disk was found, but it is not the correct disk for this device."),
crate::ErrorKind::IncorrectDisk, crate::ErrorKind::IncorrectDisk,
)); ));
} }

View File

@@ -258,7 +258,7 @@ pub async fn init(cfg: &RpcContextConfig) -> Result<InitResult, Error> {
// write to ca cert store // write to ca cert store
tokio::fs::write( tokio::fs::write(
"/usr/local/share/ca-certificates/embassy-root-ca.crt", "/usr/local/share/ca-certificates/startos-root-ca.crt",
account.root_ca_cert.to_pem()?, account.root_ca_cert.to_pem()?,
) )
.await?; .await?;

View File

@@ -7,4 +7,4 @@ prompt = no
[req_distinguished_name] [req_distinguished_name]
CN = {hostname}.local CN = {hostname}.local
O = Start9 Labs O = Start9 Labs
OU = Embassy OU = StartOS

View File

@@ -173,7 +173,7 @@ pub fn make_root_cert(root_key: &PKey<Private>, hostname: &Hostname) -> Result<X
let mut subject_name_builder = X509NameBuilder::new()?; let mut subject_name_builder = X509NameBuilder::new()?;
subject_name_builder.append_entry_by_text("CN", &format!("{} Local Root CA", &*hostname.0))?; subject_name_builder.append_entry_by_text("CN", &format!("{} Local Root CA", &*hostname.0))?;
subject_name_builder.append_entry_by_text("O", "Start9")?; subject_name_builder.append_entry_by_text("O", "Start9")?;
subject_name_builder.append_entry_by_text("OU", "Embassy")?; subject_name_builder.append_entry_by_text("OU", "StartOS")?;
let subject_name = subject_name_builder.build(); let subject_name = subject_name_builder.build();
builder.set_subject_name(&subject_name)?; builder.set_subject_name(&subject_name)?;
@@ -225,9 +225,9 @@ pub fn make_int_cert(
builder.set_serial_number(&*rand_serial()?)?; builder.set_serial_number(&*rand_serial()?)?;
let mut subject_name_builder = X509NameBuilder::new()?; let mut subject_name_builder = X509NameBuilder::new()?;
subject_name_builder.append_entry_by_text("CN", "Embassy Local Intermediate CA")?; subject_name_builder.append_entry_by_text("CN", "StartOS Local Intermediate CA")?;
subject_name_builder.append_entry_by_text("O", "Start9")?; subject_name_builder.append_entry_by_text("O", "Start9")?;
subject_name_builder.append_entry_by_text("OU", "Embassy")?; subject_name_builder.append_entry_by_text("OU", "StartOS")?;
let subject_name = subject_name_builder.build(); let subject_name = subject_name_builder.build();
builder.set_subject_name(&subject_name)?; builder.set_subject_name(&subject_name)?;
@@ -370,7 +370,7 @@ pub fn make_leaf_cert(
.unwrap_or("localhost"), .unwrap_or("localhost"),
)?; )?;
subject_name_builder.append_entry_by_text("O", "Start9")?; subject_name_builder.append_entry_by_text("O", "Start9")?;
subject_name_builder.append_entry_by_text("OU", "Embassy")?; subject_name_builder.append_entry_by_text("OU", "StartOS")?;
let subject_name = subject_name_builder.build(); let subject_name = subject_name_builder.build();
builder.set_subject_name(&subject_name)?; builder.set_subject_name(&subject_name)?;

View File

@@ -173,7 +173,7 @@ pub async fn delete(#[context] ctx: RpcContext, #[arg] ssid: String) -> Result<(
let is_current_removed_and_no_hardwire = let is_current_removed_and_no_hardwire =
is_current_being_removed && !interface_connected(&ctx.ethernet_interface).await?; is_current_being_removed && !interface_connected(&ctx.ethernet_interface).await?;
if is_current_removed_and_no_hardwire { if is_current_removed_and_no_hardwire {
return Err(Error::new(color_eyre::eyre::eyre!("Forbidden: Deleting this Network would make your Embassy Unreachable. Either connect to ethernet or connect to a different WiFi network to remedy this."), ErrorKind::Wifi)); return Err(Error::new(color_eyre::eyre::eyre!("Forbidden: Deleting this network would make your server unreachable. Either connect to ethernet or connect to a different WiFi network to remedy this."), ErrorKind::Wifi));
} }
wpa_supplicant wpa_supplicant

View File

@@ -232,7 +232,7 @@ pub async fn execute(
.invoke(crate::ErrorKind::OpenSsh) .invoke(crate::ErrorKind::OpenSsh)
.await?; .await?;
tokio::fs::write(current.join("etc/hostname"), "embassy\n").await?; tokio::fs::write(current.join("etc/hostname"), "start\n").await?;
Command::new("chroot") Command::new("chroot")
.arg(&current) .arg(&current)

View File

@@ -135,7 +135,7 @@ pub async fn attach(
crate::disk::main::export(&*guid, &ctx.datadir).await?; crate::disk::main::export(&*guid, &ctx.datadir).await?;
return Err(Error::new( return Err(Error::new(
eyre!( eyre!(
"Errors were corrected with your disk, but the Embassy must be restarted in order to proceed" "Errors were corrected with your disk, but the server must be restarted in order to proceed"
), ),
ErrorKind::DiskManagement, ErrorKind::DiskManagement,
)); ));
@@ -294,7 +294,7 @@ pub async fn execute(
})); }));
} }
Err(e) => { Err(e) => {
tracing::error!("Error Setting Up Embassy: {}", e); tracing::error!("Error Setting Up Server: {}", e);
tracing::debug!("{:?}", e); tracing::debug!("{:?}", e);
*ctx.setup_status.write().await = Some(Err(e.into())); *ctx.setup_status.write().await = Some(Err(e.into()));
} }

View File

@@ -1,4 +1,4 @@
# Building Embassy OS # Building StartOS
⚠️ The commands given assume a Debian or Ubuntu-based environment. _Building in ⚠️ The commands given assume a Debian or Ubuntu-based environment. _Building in
a VM is NOT yet supported_ ⚠️ a VM is NOT yet supported_ ⚠️
@@ -42,15 +42,15 @@ a VM is NOT yet supported_ ⚠️
2. Clone the latest repo with required submodules 2. Clone the latest repo with required submodules
> :information_source: You chan check latest available version > :information_source: You chan check latest available version
> [here](https://github.com/Start9Labs/embassy-os/releases) > [here](https://github.com/Start9Labs/start-os/releases)
``` ```
git clone --recursive https://github.com/Start9Labs/embassy-os.git --branch latest git clone --recursive https://github.com/Start9Labs/start-os.git --branch latest
``` ```
## Build Raspberry Pi Image ## Build Raspberry Pi Image
``` ```
cd embassy-os cd start-os
make embassyos-raspi.img ARCH=aarch64 make embassyos-raspi.img ARCH=aarch64
``` ```
@@ -62,7 +62,7 @@ We recommend [Balena Etcher](https://www.balena.io/etcher/)
## Setup ## Setup
Visit http://embassy.local from any web browser - We recommend Visit http://start.local from any web browser - We recommend
[Firefox](https://www.mozilla.org/firefox/browsers) [Firefox](https://www.mozilla.org/firefox/browsers)
Enter your product key. This is generated during the build process and can be Enter your product key. This is generated during the build process and can be
@@ -70,11 +70,11 @@ found in `product_key.txt`, located in the root directory.
## Troubleshooting ## Troubleshooting
1. I just flashed my SD card, fired up my Embassy, bootup sounds and all, but my 1. I just flashed my SD card, fired up StartOS, bootup sounds and all, but my
browser is saying "Unable to connect" with embassy.local. browser is saying "Unable to connect" with start.local.
- Try doing a hard refresh on your browser, or opening the url in a - Try doing a hard refresh on your browser, or opening the url in a
private/incognito window. If you've ran an instance of Embassy before, private/incognito window. If you've ran an instance of StartOS before,
sometimes you can have a stale cache that will block you from navigating to sometimes you can have a stale cache that will block you from navigating to
the page. the page.
@@ -91,14 +91,14 @@ found in `product_key.txt`, located in the root directory.
- Find the IP of your device - Find the IP of your device
- Run `nc <ip> 8080` and it will print the logs - Run `nc <ip> 8080` and it will print the logs
4. I need to ssh into my Embassy to fix something, but I cannot get to the 4. I need to ssh into my server to fix something, but I cannot get to the
console to add ssh keys normally. console to add ssh keys normally.
- During the Build step, instead of running just - During the Build step, instead of running just
`make embassyos-raspi.img ARCH=aarch64` run `make embassyos-raspi.img ARCH=aarch64` run
`ENVIRONMENT=dev make embassyos-raspi.img ARCH=aarch64`. Flash like normal, `ENVIRONMENT=dev make embassyos-raspi.img ARCH=aarch64`. Flash like normal,
and insert into your Embassy. Boot up your Embassy, and on another computer on and insert into your server. Boot up StartOS, then on another computer on
the same network, ssh into the Embassy with the username `start9` password the same network, ssh into the the server with the username `start9` password
`embassy`. `embassy`.
4. I need to reset my password, how can I do that? 4. I need to reset my password, how can I do that?

View File

@@ -2,14 +2,20 @@
printf "\n" printf "\n"
printf "Welcome to\n" printf "Welcome to\n"
cat << "ASCII" cat << "ASCII"
| ,---.,---. ╭ ━ ━ ━ ╮ ╭ ╮ ╭ ╮ ╭ ━ ━ ━ ┳ ━ ━ ━ ╮
,---.,-.-.|---.,---.,---.,---., .| |`---. ┃ ╭ ━ ╮ ┣ ╯ ╰ ╮ ╭ ╯ ╰ ┫ ╭ ━ ╮ ┃ ╭ ━ ╮ ┃
|---'| | || |,---|`---.`---.| || | | ┃ ╰ ━ ━ ╋ ╮ ╭ ╋ ━ ━ ┳ ┻ ╮ ╭ ┫ ┃ ┃ ┃ ╰ ━ ━ ╮
`---'` ' '`---'`---^`---'`---'`---|`---'`---' ╰ ━ ━ ╮ ┃ ┃ ┃ ┃ ╭ ╮ ┃ ╭ ┫ ┃ ┃ ┃ ┃ ┣ ━ ━ ╮ ┃
`---' ┃ ╰ ━ ╯ ┃ ┃ ╰ ┫ ╭ ╮ ┃ ┃ ┃ ╰ ┫ ╰ ━ ╯ ┃ ╰ ━ ╯ ┃
╰ ━ ━ ━ ╯ ╰ ━ ┻ ╯ ╰ ┻ ╯ ╰ ━ ┻ ━ ━ ━ ┻ ━ ━ ━ ╯
ASCII ASCII
printf " %s (%s %s)\n" "$(uname -o)" "$(uname -r)" "$(uname -m)" printf " %s (%s %s)\n" "$(uname -o)" "$(uname -r)" "$(uname -m)"
printf " $(embassy-cli --version | sed 's/Embassy CLI /embassyOS v/g') - $(embassy-cli git-info)\n" printf " $(embassy-cli --version | sed 's/Embassy CLI /StartOS v/g') - $(embassy-cli git-info)"
if [ -n "$(cat /usr/lib/embassy/ENVIRONMENT.txt)" ]; then
printf " ~ $(cat /usr/lib/embassy/ENVIRONMENT.txt)\n"
else
printf "\n"
fi
printf "\n" printf "\n"
printf " * Documentation: https://start9.com\n" printf " * Documentation: https://start9.com\n"

View File

@@ -10,8 +10,8 @@ set -e
cat > /home/start9/kiosk.sh << 'EOF' cat > /home/start9/kiosk.sh << 'EOF'
#!/bin/sh #!/bin/sh
PROFILE=$(mktemp -d) PROFILE=$(mktemp -d)
if [ -f /usr/local/share/ca-certificates/embassy-root-ca.crt ]; then if [ -f /usr/local/share/ca-certificates/startos-root-ca.crt ]; then
certutil -A -n "Embassy Local Root CA" -t "TCu,Cuw,Tuw" -i /usr/local/share/ca-certificates/embassy-root-ca.crt -d $PROFILE certutil -A -n "StartOS Local Root CA" -t "TCu,Cuw,Tuw" -i /usr/local/share/ca-certificates/startos-root-ca.crt -d $PROFILE
fi fi
cat >> $PROFILE/prefs.js << EOT cat >> $PROFILE/prefs.js << EOT
user_pref("network.proxy.autoconfig_url", "file:///usr/lib/embassy/proxy.pac"); user_pref("network.proxy.autoconfig_url", "file:///usr/lib/embassy/proxy.pac");

View File

@@ -3,6 +3,6 @@
for mozilladir in $(find /home -name ".mozilla"); do for mozilladir in $(find /home -name ".mozilla"); do
for certDB in $(find ${mozilladir} -name "cert9.db"); do for certDB in $(find ${mozilladir} -name "cert9.db"); do
certDir=$(dirname ${certDB}); certDir=$(dirname ${certDB});
certutil -A -n "Embassy Local Root CA" -t "TCu,Cuw,Tuw" -i /usr/local/share/ca-certificates/embassy-root-ca.crt -d ${certDir} certutil -A -n "StartOS Local Root CA" -t "TCu,Cuw,Tuw" -i /usr/local/share/ca-certificates/startos-root-ca.crt -d ${certDir}
done done
done done

View File

@@ -1,11 +1,11 @@
# embassyOS Frontend # StartOS Frontend
embassyOS has three user interfaces and a shared library, all written in Ionic/Angular/Typescript using an Angular workspace environment: StartOS has three user interfaces and a shared library, all written in Ionic/Angular/Typescript using an Angular workspace environment:
1. **ui**: the main user interface 1. **ui**: the main user interface
1. **install-wizard**: used to install embassyOS 1. **install-wizard**: used to install StartOS
1. **setup-wizard**: used to facilitate initial setup 1. **setup-wizard**: used to facilitate initial setup
1. **diagnostic-ui**: used to display certain diagnostic information in the event embassyOS fails to initialize 1. **diagnostic-ui**: used to display certain diagnostic information in the event StartOS fails to initialize
1. **marketplace**: abstracted ui elements to search for, list and display details for packages and their dependencies 1. **marketplace**: abstracted ui elements to search for, list and display details for packages and their dependencies
1. **shared**: contains components, types, and functions shared amongst all of the UIs. 1. **shared**: contains components, types, and functions shared amongst all of the UIs.
@@ -30,8 +30,8 @@ v8.0.0
1. Clone the repository 1. Clone the repository
```sh ```sh
git clone https://github.com/Start9Labs/embassy-os.git git clone https://github.com/Start9Labs/start-os.git
cd embassy-os cd start-os
git submodule update --init --recursive git submodule update --init --recursive
cd frontend cd frontend
npm ci npm ci
@@ -58,7 +58,7 @@ npm run start:diagnostic-ui
## Running locally with proxied backend ## Running locally with proxied backend
This section enables you to run a local frontend with a remote backend (eg. hosted on a live Embassy). It assumes you have completed Step 1 and Step 2 in the [section above](#running-locally-with-mocks) This section enables you to run a local frontend with a remote backend (eg. hosted on a live Start9 server). It assumes you have completed Step 1 and Step 2 in the [section above](#running-locally-with-mocks)
1. Set `useMocks: false` in `config.json` 1. Set `useMocks: false` in `config.json`

View File

@@ -1,12 +1,12 @@
{ {
"name": "embassy-os", "name": "start-os",
"version": "0.3.4.1", "version": "0.3.4.2",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "embassy-os", "name": "start-os",
"version": "0.3.4.1", "version": "0.3.4.2",
"dependencies": { "dependencies": {
"@angular/animations": "^14.1.0", "@angular/animations": "^14.1.0",
"@angular/common": "^14.1.0", "@angular/common": "^14.1.0",

View File

@@ -1,6 +1,6 @@
{ {
"name": "embassy-os", "name": "start-os",
"version": "0.3.4.1", "version": "0.3.4.2",
"author": "Start9 Labs, Inc", "author": "Start9 Labs, Inc",
"homepage": "https://start9.com/", "homepage": "https://start9.com/",
"scripts": { "scripts": {

View File

@@ -5,7 +5,7 @@
class="ion-text-center" class="ion-text-center"
style="padding-bottom: 36px; font-size: calc(2vw + 14px)" style="padding-bottom: 36px; font-size: calc(2vw + 14px)"
> >
embassyOS - Diagnostic Mode StartOS - Diagnostic Mode
</h1> </h1>
<ng-container *ngIf="error"> <ng-container *ngIf="error">
@@ -16,7 +16,7 @@
font-weight: bold; font-weight: bold;
" "
> >
embassyOS launch error: StartOS launch error:
</h2> </h2>
<div class="code-block"> <div class="code-block">
<code> <code>
@@ -28,7 +28,7 @@
</span> </span>
</code> </code>
</div> </div>
<ion-button routerLink="logs"> View Logs </ion-button> <ion-button routerLink="logs">View Logs</ion-button>
<h2 <h2
style=" style="
padding: 32px 0 16px 0; padding: 32px 0 16px 0;
@@ -41,7 +41,7 @@
<div class="code-block"> <div class="code-block">
<code><ion-text color="success">{{ error.solution }}</ion-text></code> <code><ion-text color="success">{{ error.solution }}</ion-text></code>
</div> </div>
<ion-button (click)="restart()"> Restart Embassy </ion-button> <ion-button (click)="restart()">Restart Server</ion-button>
<ion-button <ion-button
class="ion-padding-start" class="ion-padding-start"
*ngIf="error.code === 15 || error.code === 25" *ngIf="error.code === 15 || error.code === 25"
@@ -52,15 +52,15 @@
</ion-button> </ion-button>
<div class="ion-padding-top"> <div class="ion-padding-top">
<ion-button (click)="presentAlertSystemRebuild()" color="warning" <ion-button (click)="presentAlertSystemRebuild()" color="warning">
>System Rebuild</ion-button System Rebuild
> </ion-button>
</div> </div>
<div class="ion-padding-top"> <div class="ion-padding-top">
<ion-button (click)="presentAlertRepairDisk()" color="danger" <ion-button (click)="presentAlertRepairDisk()" color="danger">
>Repair Drive</ion-button Repair Drive
> </ion-button>
</div> </div>
</ng-container> </ng-container>
</ng-container> </ng-container>
@@ -70,12 +70,12 @@
class="ion-text-center" class="ion-text-center"
style="padding-bottom: 36px; font-size: calc(2vw + 12px)" style="padding-bottom: 36px; font-size: calc(2vw + 12px)"
> >
Embassy is restarting Server is restarting
</h1> </h1>
<h2 style="padding-bottom: 16px; font-size: calc(1vw + 12px)"> <h2 style="padding-bottom: 16px; font-size: calc(1vw + 12px)">
Wait for Embassy restart, then refresh this page or click REFRESH below. Wait for the server to restart, then refresh this page.
</h2> </h2>
<ion-button (click)="refreshPage()"> Refresh </ion-button> <ion-button (click)="refreshPage()">Refresh</ion-button>
</ng-template> </ng-template>
</div> </div>
</ion-content> </ion-content>

View File

@@ -32,7 +32,7 @@ export class HomePage {
code: 15, code: 15,
problem: 'Unknown storage drive detected', problem: 'Unknown storage drive detected',
solution: solution:
'To use a different storage drive, replace the current one and click RESTART EMBASSY below. To use the current storage drive, click USE CURRENT DRIVE below, then follow instructions. No data will be erased during this process.', 'To use a different storage drive, replace the current one and click RESTART SERVER below. To use the current storage drive, click USE CURRENT DRIVE below, then follow instructions. No data will be erased during this process.',
details: error.data?.details, details: error.data?.details,
} }
// no drive // no drive
@@ -41,7 +41,7 @@ export class HomePage {
code: 20, code: 20,
problem: 'Storage drive not found', problem: 'Storage drive not found',
solution: solution:
'Insert your embassyOS storage drive and click RESTART EMBASSY below.', 'Insert your StartOS storage drive and click RESTART SERVER below.',
details: error.data?.details, details: error.data?.details,
} }
// drive corrupted // drive corrupted
@@ -60,7 +60,7 @@ export class HomePage {
code: 2, code: 2,
problem: 'Filesystem I/O error.', problem: 'Filesystem I/O error.',
solution: solution:
'Repairing the disk could help resolve this issue. Please DO NOT unplug the drive or Embassy during this time or the situation will become worse.', 'Repairing the disk could help resolve this issue. Please DO NOT unplug the drive or server during this time or the situation will become worse.',
details: error.data?.details, details: error.data?.details,
} }
// disk management error - disk needs repair // disk management error - disk needs repair
@@ -69,7 +69,7 @@ export class HomePage {
code: 48, code: 48,
problem: 'Disk management error.', problem: 'Disk management error.',
solution: solution:
'Repairing the disk could help resolve this issue. Please DO NOT unplug the drive or Embassy during this time or the situation will become worse.', 'Repairing the disk could help resolve this issue. Please DO NOT unplug the drive or server during this time or the situation will become worse.',
details: error.data?.details, details: error.data?.details,
} }
} else { } else {
@@ -122,7 +122,7 @@ export class HomePage {
const alert = await this.alertCtrl.create({ const alert = await this.alertCtrl.create({
header: 'Warning', header: 'Warning',
message: message:
'<p>This action will tear down all service containers and rebuild them from scratch. No data will be deleted.</p><p>A system rebuild can be useful if your system gets into a bad state, and it should only be performed if you are experiencing general performance or reliability issues.</p><p>It may take up to an hour to complete. During this time, you will lose all connectivity to your Embassy.</p>', '<p>This action will tear down all service containers and rebuild them from scratch. No data will be deleted.</p><p>A system rebuild can be useful if your system gets into a bad state, and it should only be performed if you are experiencing general performance or reliability issues.</p><p>It may take up to an hour to complete. During this time, you will lose all connectivity to your Start9 server.</p>',
buttons: [ buttons: [
{ {
text: 'Cancel', text: 'Cancel',

View File

@@ -9,7 +9,7 @@ export class MockApiService implements ApiService {
await pauseFor(1000) await pauseFor(1000)
return { return {
code: 15, code: 15,
message: 'Unknown Embassy', message: 'Unknown server',
data: { details: 'Some details about the error here' }, data: { details: 'Some details about the error here' },
} }
} }

View File

@@ -1,22 +1,23 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head>
<head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<title>embassyOS Diagnostic UI</title> <title>StartOS Diagnostic UI</title>
<base href="/" /> <base href="/" />
<meta name="color-scheme" content="light dark" /> <meta name="color-scheme" content="light dark" />
<meta name="viewport" content="viewport-fit=cover, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <meta
name="viewport"
content="viewport-fit=cover, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"
/>
<meta name="format-detection" content="telephone=no" /> <meta name="format-detection" content="telephone=no" />
<meta name="msapplication-tap-highlight" content="no" /> <meta name="msapplication-tap-highlight" content="no" />
<link rel="icon" type="image/png" href="assets/icon/favicon.ico" /> <link rel="icon" type="image/png" href="assets/icon/favicon.ico" />
</head> </head>
<body> <body>
<app-root></app-root> <app-root></app-root>
</body> </body>
</html> </html>

View File

@@ -70,11 +70,9 @@
></ion-icon> ></ion-icon>
<ion-label> <ion-label>
<h1> <h1>
<ion-text color="success" <ion-text color="success">Re-Install StartOS</ion-text>
>Re-Install embassyOS</ion-text
>
</h1> </h1>
<h2>Will preserve existing embassyOS data</h2> <h2>Will preserve existing StartOS data</h2>
</ion-label> </ion-label>
</ion-item> </ion-item>
@@ -92,7 +90,7 @@
[color]="(selectedDisk | guid) ? 'danger' : 'success'" [color]="(selectedDisk | guid) ? 'danger' : 'success'"
> >
{{ (selectedDisk | guid) ? 'Factory Reset' : 'Install {{ (selectedDisk | guid) ? 'Factory Reset' : 'Install
embassyOS' }} StartOS' }}
</ion-text> </ion-text>
</h1> </h1>
<h2>Will delete existing data on disk</h2> <h2>Will delete existing data on disk</h2>

View File

@@ -56,7 +56,7 @@ export class HomePage {
private async install(overwrite: boolean) { private async install(overwrite: boolean) {
const loader = await this.loadingCtrl.create({ const loader = await this.loadingCtrl.create({
message: 'Installing embassyOS...', message: 'Installing StartOS...',
}) })
await loader.present() await loader.present()
@@ -80,7 +80,7 @@ export class HomePage {
header: 'Warning', header: 'Warning',
message: `This action will COMPLETELY erase the disk ${ message: `This action will COMPLETELY erase the disk ${
vendor || 'Unknown Vendor' vendor || 'Unknown Vendor'
} - ${model || 'Unknown Model'} and install embassyOS in its place`, } - ${model || 'Unknown Model'} and install StartOS in its place`,
buttons: [ buttons: [
{ {
text: 'Cancel', text: 'Cancel',
@@ -102,7 +102,7 @@ export class HomePage {
const alert = await this.alertCtrl.create({ const alert = await this.alertCtrl.create({
header: 'Install Success', header: 'Install Success',
message: message:
'Remove the USB stick and reboot your device to begin using your new Embassy', 'Remove the USB stick and reboot your device to begin using your new Start9 server',
buttons: [ buttons: [
{ {
text: 'Reboot', text: 'Reboot',
@@ -133,7 +133,7 @@ export class HomePage {
private async presentAlertComplete() { private async presentAlertComplete() {
const alert = await this.alertCtrl.create({ const alert = await this.alertCtrl.create({
header: 'Rebooting', header: 'Rebooting',
message: 'Please wait for embassyOS to restart, then refresh this page', message: 'Please wait for StartOS to restart, then refresh this page',
buttons: ['OK'], buttons: ['OK'],
}) })
await alert.present() await alert.present()

View File

@@ -2,7 +2,7 @@
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<title>embassyOS Install Wizard</title> <title>StartOS Install Wizard</title>
<base href="/" /> <base href="/" />

View File

@@ -26,7 +26,7 @@ const routes: Routes = [
), ),
}, },
{ {
path: 'embassy', path: 'storage',
loadChildren: () => loadChildren: () =>
import('./pages/embassy/embassy.module').then(m => m.EmbassyPageModule), import('./pages/embassy/embassy.module').then(m => m.EmbassyPageModule),
}, },

View File

@@ -5,7 +5,7 @@ import {
ModalController, ModalController,
} from '@ionic/angular' } from '@ionic/angular'
import { ApiService, CifsBackupTarget } from 'src/app/services/api/api.service' import { ApiService, CifsBackupTarget } from 'src/app/services/api/api.service'
import { EmbassyOSDiskInfo } from '@start9labs/shared' import { StartOSDiskInfo } from '@start9labs/shared'
import { PasswordPage } from '../password/password.page' import { PasswordPage } from '../password/password.page'
@Component({ @Component({
@@ -41,7 +41,7 @@ export class CifsModal {
await loader.present() await loader.present()
try { try {
const embassyOS = await this.api.verifyCifs({ const diskInfo = await this.api.verifyCifs({
...this.cifs, ...this.cifs,
password: this.cifs.password password: this.cifs.password
? await this.api.encrypt(this.cifs.password) ? await this.api.encrypt(this.cifs.password)
@@ -50,20 +50,18 @@ export class CifsModal {
await loader.dismiss() await loader.dismiss()
this.presentModalPassword(embassyOS) this.presentModalPassword(diskInfo)
} catch (e) { } catch (e) {
await loader.dismiss() await loader.dismiss()
this.presentAlertFailed() this.presentAlertFailed()
} }
} }
private async presentModalPassword( private async presentModalPassword(diskInfo: StartOSDiskInfo): Promise<void> {
embassyOS: EmbassyOSDiskInfo,
): Promise<void> {
const target: CifsBackupTarget = { const target: CifsBackupTarget = {
...this.cifs, ...this.cifs,
mountable: true, mountable: true,
'embassy-os': embassyOS, 'embassy-os': diskInfo,
} }
const modal = await this.modalController.create({ const modal = await this.modalController.create({

View File

@@ -1,8 +1,6 @@
<ion-header> <ion-header>
<ion-toolbar> <ion-toolbar>
<ion-title> <ion-title>{{ storageDrive ? 'Set Password' : 'Unlock Drive' }}</ion-title>
{{ storageDrive ? 'Set Password' : 'Unlock Drive' }}
</ion-title>
</ion-toolbar> </ion-toolbar>
</ion-header> </ion-header>
@@ -13,7 +11,7 @@
</p> </p>
<ng-template #choose> <ng-template #choose>
<p> <p>
Choose a password for your Embassy. Choose a password for your server.
<i>Make it good. Write it down.</i> <i>Make it good. Write it down.</i>
</p> </p>
</ng-template> </ng-template>

View File

@@ -6,10 +6,9 @@
<ion-card-header class="ion-text-center"> <ion-card-header class="ion-text-center">
<ion-card-title>Use existing drive</ion-card-title> <ion-card-title>Use existing drive</ion-card-title>
<div class="center-wrapper"> <div class="center-wrapper">
<ion-card-subtitle <ion-card-subtitle>
>Select the physical drive containing your Embassy Select the physical drive containing your StartOS data
data</ion-card-subtitle </ion-card-subtitle>
>
</div> </div>
</ion-card-header> </ion-card-header>
@@ -24,8 +23,8 @@
<ion-item-group *ngIf="!loading" class="ion-text-center"> <ion-item-group *ngIf="!loading" class="ion-text-center">
<!-- drives --> <!-- drives -->
<p *ngIf="!drives.length"> <p *ngIf="!drives.length">
No valid Embassy data drives found. Please make sure the drive No valid StartOS data drives found. Please make sure the drive
is a valid Embassy data drive (not a backup) and is firmly is a valid StartOS data drive (not a backup) and is firmly
connected, then refresh the page. connected, then refresh the page.
</p> </p>

View File

@@ -11,7 +11,7 @@
<ion-card-title>Select storage drive</ion-card-title> <ion-card-title>Select storage drive</ion-card-title>
<div class="center-wrapper"> <div class="center-wrapper">
<ion-card-subtitle> <ion-card-subtitle>
This is the drive where your Embassy data will be stored. This is the drive where your StartOS data will be stored.
</ion-card-subtitle> </ion-card-subtitle>
</div> </div>
</ion-card-header> </ion-card-header>
@@ -23,8 +23,8 @@
<ion-card-title>No drives found</ion-card-title> <ion-card-title>No drives found</ion-card-title>
<div class="center-wrapper"> <div class="center-wrapper">
<ion-card-subtitle> <ion-card-subtitle>
Please connect an external storage drive to your Embassy, if Please connect a storage drive to your server. Then click
applicable. Next, click "Refresh". "Refresh".
</ion-card-subtitle> </ion-card-subtitle>
</div> </div>
</ion-card-header> </ion-card-header>

View File

@@ -21,8 +21,8 @@
<ion-icon slot="icon-only" name="arrow-back"></ion-icon> <ion-icon slot="icon-only" name="arrow-back"></ion-icon>
</ion-button> </ion-button>
<ion-card-title> <ion-card-title>
{{ swiper?.activeIndex === 0 ? 'embassyOS Setup' : 'Recover {{ swiper?.activeIndex === 0 ? 'StartOS Setup' : 'Recover Options'
Options' }} }}
</ion-card-title> </ion-card-title>
</ion-card-header> </ion-card-header>
<ion-card-content class="ion-margin-bottom"> <ion-card-content class="ion-margin-bottom">
@@ -39,12 +39,12 @@
[disabled]="error" [disabled]="error"
detail="false" detail="false"
lines="none" lines="none"
routerLink="/embassy" routerLink="/storage"
> >
<ion-icon slot="start" name="add"></ion-icon> <ion-icon slot="start" name="add"></ion-icon>
<ion-label> <ion-label>
<h2><ion-text color="success">Start Fresh</ion-text></h2> <h2><ion-text color="success">Start Fresh</ion-text></h2>
<p>Get started with a brand new Embassy</p> <p>Get started with a brand new Start9 server</p>
</ion-label> </ion-label>
</ion-item> </ion-item>
@@ -59,7 +59,7 @@
<ion-icon slot="start" name="reload"></ion-icon> <ion-icon slot="start" name="reload"></ion-icon>
<ion-label> <ion-label>
<h2><ion-text color="danger">Recover</ion-text></h2> <h2><ion-text color="danger">Recover</ion-text></h2>
<p>Recover, restore, or transfer Embassy data</p> <p>Recover, restore, or transfer StartOS data</p>
</ion-label> </ion-label>
</ion-item> </ion-item>
</ng-template> </ng-template>
@@ -78,7 +78,11 @@
<h2> <h2>
<ion-text color="success">Use Existing Drive</ion-text> <ion-text color="success">Use Existing Drive</ion-text>
</h2> </h2>
<p>Attach an existing embassyOS data drive (<b>not</b> a backup)</p> <p>
Attach an existing StartOS data drive (
<b>not</b>
a backup)
</p>
</ion-label> </ion-label>
</ion-item> </ion-item>
@@ -95,7 +99,7 @@
<ion-text color="primary">Transfer</ion-text> <ion-text color="primary">Transfer</ion-text>
</h2> </h2>
<p> <p>
Transfer data from an existing embassyOS data drive (not a Transfer data from an existing StartOS data drive (not a
backup) to a new, preferred drive backup) to a new, preferred drive
<br /> <br />
</p> </p>
@@ -116,7 +120,7 @@
Restore From Backup (Disaster Recovery) Restore From Backup (Disaster Recovery)
</ion-text> </ion-text>
</h2> </h2>
<p>Restore embassyOS data from an encrypted backup</p> <p>Restore StartOS data from an encrypted backup</p>
</ion-label> </ion-label>
</ion-item> </ion-item>
</ng-template> </ng-template>

View File

@@ -7,7 +7,7 @@
color="dark" color="dark"
> >
<ion-card-header> <ion-card-header>
<ion-card-title>Initializing Embassy</ion-card-title> <ion-card-title>Initializing StartOS</ion-card-title>
<div class="center-wrapper"> <div class="center-wrapper">
<ion-card-subtitle *ngIf="progress.decimal as decimal"> <ion-card-subtitle *ngIf="progress.decimal as decimal">
Progress: {{ (decimal * 100).toFixed(0)}}% Progress: {{ (decimal * 100).toFixed(0)}}%

View File

@@ -37,7 +37,7 @@ export class ToMessagePipe implements PipeTransform {
transform(progress: number | null): string { transform(progress: number | null): string {
if (['fresh', 'attach'].includes(this.stateService.setupType || '')) { if (['fresh', 'attach'].includes(this.stateService.setupType || '')) {
return 'Setting up your Embassy' return 'Setting up your server'
} }
if (!progress) { if (!progress) {

View File

@@ -2,13 +2,13 @@
<!-- has backup --> <!-- has backup -->
<h2 *ngIf="hasValidBackup; else noBackup"> <h2 *ngIf="hasValidBackup; else noBackup">
<ion-icon name="cloud-done" color="success"></ion-icon> <ion-icon name="cloud-done" color="success"></ion-icon>
Embassy backup detected StartOS backup detected
</h2> </h2>
<!-- no backup --> <!-- no backup -->
<ng-template #noBackup> <ng-template #noBackup>
<h2> <h2>
<ion-icon name="cloud-offline" color="danger"></ion-icon> <ion-icon name="cloud-offline" color="danger"></ion-icon>
No Embassy backup No StartOS backup
</h2> </h2>
</ng-template> </ng-template>
</div> </div>

View File

@@ -19,8 +19,8 @@
<!-- cifs --> <!-- cifs -->
<h2 class="target-label">Network Folder</h2> <h2 class="target-label">Network Folder</h2>
<p class="ion-padding-bottom ion-text-left"> <p class="ion-padding-bottom ion-text-left">
Restore your Embassy from a folder on another computer that is Restore StartOS data from a folder on another computer that is
connected to the same network as your Embassy. connected to the same network as your server.
</p> </p>
<!-- connect --> <!-- connect -->
@@ -42,8 +42,8 @@
<h2 class="target-label">Physical Drive</h2> <h2 class="target-label">Physical Drive</h2>
<div class="ion-text-left ion-padding-bottom"> <div class="ion-text-left ion-padding-bottom">
<p> <p>
Restore your Embassy from a physical drive that is plugged Restore StartOS data from a physical drive that is plugged
directly into your Embassy. directly into your server.
</p> </p>
<br /> <br />
<b> <b>

View File

@@ -86,7 +86,7 @@ export class RecoverPage {
}, },
} }
this.stateService.recoveryPassword = res.data.recoveryPassword this.stateService.recoveryPassword = res.data.recoveryPassword
this.navCtrl.navigateForward('/embassy') this.navCtrl.navigateForward('/storage')
} }
}) })
await modal.present() await modal.present()
@@ -119,7 +119,7 @@ export class RecoverPage {
}, },
} }
this.stateService.recoveryPassword = password this.stateService.recoveryPassword = password
this.navCtrl.navigateForward(`/embassy`) this.navCtrl.navigateForward(`/storage`)
} }
} }

View File

@@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<title>Embassy Address Info</title> <title>StartOS Address Info</title>
</head> </head>
<body> <body>
<div <div
@@ -21,7 +21,7 @@
padding: 1rem; padding: 1rem;
" "
> >
Embassy Address Info StartOS Address Info
</h1> </h1>
<section <section
@@ -36,7 +36,7 @@
</h2> </h2>
<p> <p>
Visit the address below when you are connected to the same WiFi or Visit the address below when you are connected to the same WiFi or
Local Area Network (LAN) as your Embassy: Local Area Network (LAN) as your server:
</p> </p>
<p <p
style=" style="
@@ -60,15 +60,15 @@
> >
follow the instructions follow the instructions
</a> </a>
to establish a secure connection by installing your Embassy's to establish a secure connection by installing your server's root
certificate. certificate authority.
</p> </p>
</div> </div>
<div style="padding: 2rem; text-align: center"> <div style="padding: 2rem; text-align: center">
<a <a
id="cert" id="cert"
download="embassy.crt" [download]="crtName"
style=" style="
display: inline-block; display: inline-block;
padding: 1em 1.2em; padding: 1em 1.2em;

View File

@@ -1,7 +1,14 @@
import { Component } from '@angular/core' import { Component, Input } from '@angular/core'
@Component({ @Component({
selector: 'download-doc', selector: 'download-doc',
templateUrl: 'download-doc.component.html', templateUrl: 'download-doc.component.html',
}) })
export class DownloadDocComponent {} export class DownloadDocComponent {
@Input() lanAddress!: string
get crtName(): string {
const hostname = new URL(this.lanAddress).hostname
return `${hostname}.crt`
}
}

View File

@@ -46,17 +46,17 @@
You can now safely unplug your backup drive You can now safely unplug your backup drive
</h3> </h3>
<h3 *ngIf="setupType === 'transfer'"> <h3 *ngIf="setupType === 'transfer'">
You can now safely unplug your old Embassy drive You can now safely unplug your old StartOS data drive
</h3> </h3>
</div> </div>
<div class="card-container"> <div class="card-container">
<ion-card id="information" (click)="download()"> <ion-card id="information" (click)="download()">
<ion-card-content> <ion-card-content>
<ion-card-title <ion-card-title>
>Download permanent address info</ion-card-title Download permanent address info
> </ion-card-title>
<p> <p>
embassy.local was for setup purposes only. It will no start.local was for setup purposes only. It will no
longer work. longer work.
</p> </p>
</ion-card-content> </ion-card-content>
@@ -77,7 +77,7 @@
> >
<div class="container"> <div class="container">
<div class="inline"> <div class="inline">
<p>Go to Embassy login</p> <p>Login to StartOS</p>
<ion-icon name="open-outline"></ion-icon> <ion-icon name="open-outline"></ion-icon>
</div> </div>
</div> </div>
@@ -86,7 +86,11 @@
</ion-col> </ion-col>
</ion-row> </ion-row>
<!-- download elem --> <!-- download elem -->
<download-doc hidden id="downloadable"></download-doc> <download-doc
hidden
id="downloadable"
[lanAddress]="lanAddress"
></download-doc>
</ion-card> </ion-card>
</ng-template> </ng-template>
</ion-col> </ion-col>

View File

@@ -84,7 +84,7 @@ export class SuccessPage {
encodeURIComponent(this.cert), encodeURIComponent(this.cert),
) )
let html = this.document.getElementById('downloadable')?.innerHTML || '' let html = this.document.getElementById('downloadable')?.innerHTML || ''
this.downloadHtml.download('embassy-info.html', html).then(_ => { this.downloadHtml.download('StartOS-info.html', html).then(_ => {
this.disableLogin = false this.disableLogin = false
}) })
} }

View File

@@ -7,7 +7,7 @@
<ion-card-title>Transfer</ion-card-title> <ion-card-title>Transfer</ion-card-title>
<div class="center-wrapper"> <div class="center-wrapper">
<ion-card-subtitle> <ion-card-subtitle>
Select the physical drive containing your Embassy data Select the physical drive containing your StartOS data
</ion-card-subtitle> </ion-card-subtitle>
</div> </div>
</ion-card-header> </ion-card-header>

View File

@@ -1,12 +1,12 @@
import * as jose from 'node-jose' import * as jose from 'node-jose'
import { DiskListResponse, EmbassyOSDiskInfo } from '@start9labs/shared' import { DiskListResponse, StartOSDiskInfo } from '@start9labs/shared'
export abstract class ApiService { export abstract class ApiService {
pubkey?: jose.JWK.Key pubkey?: jose.JWK.Key
abstract getStatus(): Promise<StatusRes> // setup.status abstract getStatus(): Promise<StatusRes> // setup.status
abstract getPubKey(): Promise<void> // setup.get-pubkey abstract getPubKey(): Promise<void> // setup.get-pubkey
abstract getDrives(): Promise<DiskListResponse> // setup.disk.list abstract getDrives(): Promise<DiskListResponse> // setup.disk.list
abstract verifyCifs(cifs: CifsRecoverySource): Promise<EmbassyOSDiskInfo> // setup.cifs.verify abstract verifyCifs(cifs: CifsRecoverySource): Promise<StartOSDiskInfo> // setup.cifs.verify
abstract attach(importInfo: AttachReq): Promise<void> // setup.attach abstract attach(importInfo: AttachReq): Promise<void> // setup.attach
abstract execute(setupInfo: ExecuteReq): Promise<void> // setup.execute abstract execute(setupInfo: ExecuteReq): Promise<void> // setup.execute
abstract complete(): Promise<CompleteRes> // setup.complete abstract complete(): Promise<CompleteRes> // setup.complete
@@ -58,7 +58,7 @@ export type DiskBackupTarget = {
label: string | null label: string | null
capacity: number capacity: number
used: number | null used: number | null
'embassy-os': EmbassyOSDiskInfo | null 'embassy-os': StartOSDiskInfo | null
} }
export type CifsBackupTarget = { export type CifsBackupTarget = {
@@ -66,7 +66,7 @@ export type CifsBackupTarget = {
path: string path: string
username: string username: string
mountable: boolean mountable: boolean
'embassy-os': EmbassyOSDiskInfo | null 'embassy-os': StartOSDiskInfo | null
} }
export type DiskRecoverySource = { export type DiskRecoverySource = {

View File

@@ -1,7 +1,7 @@
import { Injectable } from '@angular/core' import { Injectable } from '@angular/core'
import { import {
DiskListResponse, DiskListResponse,
EmbassyOSDiskInfo, StartOSDiskInfo,
encodeBase64, encodeBase64,
HttpService, HttpService,
isRpcError, isRpcError,
@@ -59,7 +59,7 @@ export class LiveApiService extends ApiService {
async verifyCifs(source: CifsRecoverySource) { async verifyCifs(source: CifsRecoverySource) {
source.path = source.path.replace('/\\/g', '/') source.path = source.path.replace('/\\/g', '/')
return this.rpcRequest<EmbassyOSDiskInfo>({ return this.rpcRequest<StartOSDiskInfo>({
method: 'setup.cifs.verify', method: 'setup.cifs.verify',
params: source, params: source,
}) })

View File

@@ -150,7 +150,7 @@ export class MockApiService extends ApiService {
await pauseFor(1000) await pauseFor(1000)
return { return {
'tor-address': 'http://asdafsadasdasasdasdfasdfasdf.onion', 'tor-address': 'http://asdafsadasdasasdasdfasdfasdf.onion',
'lan-address': 'https://embassy-abcdefgh.local', 'lan-address': 'https://adjective-noun.local',
'root-ca': encodeBase64(rootCA), 'root-ca': encodeBase64(rootCA),
} }
} }

View File

@@ -1,23 +1,24 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head>
<head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<title>Embassy Setup</title> <title>StartOS Setup</title>
<base href="/" /> <base href="/" />
<meta name="viewport" content="viewport-fit=cover, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <meta
name="viewport"
content="viewport-fit=cover, width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"
/>
<meta name="format-detection" content="telephone=no" /> <meta name="format-detection" content="telephone=no" />
<meta name="msapplication-tap-highlight" content="no" /> <meta name="msapplication-tap-highlight" content="no" />
<script> <script>
var global = window; var global = window
</script> </script>
<link rel="icon" type="image/x-icon" href="assets/icon/favicon.ico"/> <link rel="icon" type="image/x-icon" href="assets/icon/favicon.ico" />
</head> </head>
<body> <body>
<app-root></app-root> <app-root></app-root>
</body> </body>
</html> </html>

View File

@@ -31,11 +31,11 @@ export interface PartitionInfo {
label: string | null label: string | null
capacity: number capacity: number
used: number | null used: number | null
'embassy-os': EmbassyOSDiskInfo | null 'embassy-os': StartOSDiskInfo | null
guid: string | null guid: string | null
} }
export type EmbassyOSDiskInfo = { export type StartOSDiskInfo = {
version: string version: string
full: boolean full: boolean
'password-hash': string | null 'password-hash': string | null

View File

@@ -41,7 +41,7 @@ export class AppComponent implements OnDestroy {
ngOnInit() { ngOnInit() {
this.patch this.patch
.watch$('ui', 'name') .watch$('ui', 'name')
.subscribe(name => this.titleService.setTitle(name || 'embassyOS')) .subscribe(name => this.titleService.setTitle(name || 'StartOS'))
} }
splitPaneVisible({ detail }: any) { splitPaneVisible({ detail }: any) {

View File

@@ -1,16 +1,20 @@
<div class="inline"> <div class="inline">
<h2 *ngIf="type === 'create'; else restore"> <h2 *ngIf="type === 'create'; else restore">
<ion-icon name="cloud-outline" color="success"></ion-icon> <ion-icon name="cloud-outline" color="success"></ion-icon>
{{ hasValidBackup ? 'Available, contains existing backup' : 'Available for fresh backup' }} {{
hasValidBackup
? 'Available, contains existing backup'
: 'Available for fresh backup'
}}
</h2> </h2>
<ng-template #restore> <ng-template #restore>
<h2 *ngIf="hasValidBackup"> <h2 *ngIf="hasValidBackup">
<ion-icon name="cloud-done-outline" color="success"></ion-icon> <ion-icon name="cloud-done-outline" color="success"></ion-icon>
Embassy backup detected StartOS backup detected
</h2> </h2>
<h2 *ngIf="!hasValidBackup"> <h2 *ngIf="!hasValidBackup">
<ion-icon name="cloud-offline-outline" color="danger"></ion-icon> <ion-icon name="cloud-offline-outline" color="danger"></ion-icon>
No Embassy backup No StartOS backup
</h2> </h2>
</ng-template> </ng-template>
</div> </div>

View File

@@ -27,11 +27,11 @@
<h2> <h2>
{{ {{
type === 'create' type === 'create'
? 'Backup your Embassy to' ? 'Backup server to'
: 'Restore your services from' : 'Restore your services from'
}} }}
a folder on another computer that is connected to the same network a folder on another computer that is connected to the same network
as your Embassy. View the as your Start9 server. View the
<a <a
href="https://docs.start9.com/latest/user-manual/backups/backup-create" href="https://docs.start9.com/latest/user-manual/backups/backup-create"
target="_blank" target="_blank"
@@ -103,11 +103,11 @@
<h2> <h2>
{{ {{
type === 'create' type === 'create'
? 'Backup your Embassy to' ? 'Backup server to'
: 'Restore your services from' : 'Restore your services from'
}} }}
a physcial drive that is plugged directly into your Embassy. View a physical drive that is plugged directly into your Start9 Server.
the View the
<a <a
href="https://docs.start9.com/latest/user-manual/backups/backup-setup/backup-physical" href="https://docs.start9.com/latest/user-manual/backups/backup-setup/backup-physical"
target="_blank" target="_blank"
@@ -118,12 +118,12 @@
<ion-icon name="open-outline" size="small"></ion-icon> <ion-icon name="open-outline" size="small"></ion-icon>
</a> </a>
. .
<ion-text color="warning" <ion-text color="warning">
>Warning. Do not use this option if you are using a Raspberry Pi Warning. Do not use this option if you are using a Raspberry Pi
with an external SSD. The Raspberry Pi does not support more with an external SSD. The Raspberry Pi does not support more
than one external drive without additional power and can cause than one external drive without additional power and can cause
data corruption.</ion-text data corruption.
> </ion-text>
</h2> </h2>
</ion-label> </ion-label>
</ion-item> </ion-item>
@@ -136,9 +136,10 @@
<br /> <br />
<p> <p>
No drives detected. No drives detected.
<a style="cursor: pointer" (click)="refresh()" <a style="cursor: pointer" (click)="refresh()">
>Refresh<ion-icon name="refresh"></ion-icon Refresh
></a> <ion-icon name="refresh"></ion-icon>
</a>
</p> </p>
</div> </div>
<!-- drives detected --> <!-- drives detected -->

View File

@@ -1,6 +1,6 @@
<toast <toast
*ngIf="visible$ | async as message" *ngIf="visible$ | async as message"
header="Embassy" header="StartOS"
[duration]="4000" [duration]="4000"
(dismiss)="onDismiss()" (dismiss)="onDismiss()"
> >

View File

@@ -1,10 +1,10 @@
<toast <toast
*ngIf="visible$ | async as message" *ngIf="visible$ | async as message"
class="success-toast" class="success-toast"
header="embassyOS download complete!" header="StartOS download complete!"
(dismiss)="onDismiss()" (dismiss)="onDismiss()"
> >
Restart your Embassy for these updates to take effect. It can take several Restart your server for these updates to take effect. It can take several
minutes to come back online. minutes to come back online.
<button toastButton icon="close" side="start" (click)="onDismiss()"></button> <button toastButton icon="close" side="start" (click)="onDismiss()"></button>
<button toastButton side="end" (click)="restart()">Restart</button> <button toastButton side="end" (click)="restart()">Restart</button>

View File

@@ -49,28 +49,28 @@ export class WidgetListComponent {
title: 'Secure LAN', title: 'Secure LAN',
icon: 'home-outline', icon: 'home-outline',
color: 'var(--alt-orange)', color: 'var(--alt-orange)',
description: `Download and trust your Embassy's certificate`, description: `Download and trust your server's certificate`,
link: '/system/lan', link: '/system/lan',
}, },
{ {
title: 'Create Backup', title: 'Create Backup',
icon: 'duplicate-outline', icon: 'duplicate-outline',
color: 'var(--alt-purple)', color: 'var(--alt-purple)',
description: 'Back up your Embassy and service data', description: 'Back up StartOS and service data',
link: '/system/backup', link: '/system/backup',
}, },
{ {
title: 'Embassy Info', title: 'Server Info',
icon: 'information-circle-outline', icon: 'information-circle-outline',
color: 'var(--alt-green)', color: 'var(--alt-green)',
description: 'View basic information about your Embassy', description: 'View basic information about your server',
link: '/system/specs', link: '/system/specs',
}, },
{ {
title: 'User Manual', title: 'User Manual',
icon: 'map-outline', icon: 'map-outline',
color: 'var(--alt-yellow)', color: 'var(--alt-yellow)',
description: 'Discover what your Embassy can do', description: 'Discover what StartOS can do',
link: 'https://docs.start9.com/latest/user-manual/index', link: 'https://docs.start9.com/latest/user-manual/index',
}, },
{ {

View File

@@ -29,7 +29,7 @@
</p> </p>
<p *ngIf="option['newer-eos']"> <p *ngIf="option['newer-eos']">
<ion-text color="danger"> <ion-text color="danger">
Unavailable. Backup was made on a newer version of embassyOS. Unavailable. Backup was made on a newer version of StartOS.
</ion-text> </ion-text>
</p> </p>
</ion-label> </ion-label>

View File

@@ -1,9 +1,9 @@
<ion-header> <ion-header>
<ion-toolbar> <ion-toolbar>
<div style="padding: 10px 0"> <div style="padding: 10px 0">
<ion-title style="font-size: 32px" <ion-title style="font-size: 32px">
>embassyOS {{ versions[0].version }}</ion-title StartOS {{ versions[0].version }}
> </ion-title>
<div class="underline"></div> <div class="underline"></div>
<ion-title> <ion-title>
<i>Release Notes</i> <i>Release Notes</i>

View File

@@ -12,11 +12,35 @@
<ion-content class="ion-padding"> <ion-content class="ion-padding">
<h2>This Release</h2> <h2>This Release</h2>
<h4>0.3.4.2</h4>
<p class="note-padding">
View the complete
<a
href="https://github.com/Start9Labs/start-os/releases/tag/v0.3.4.2"
target="_blank"
noreferrer
>
release notes
</a>
for more details.
</p>
<h6>Highlights</h6>
<ul class="spaced-list">
<li>Update build system for Server Lite and NUC-based Server One</li>
<li>Rename embassyOS to StartOS</li>
<li>
PWA support for StartOS web interface. You can now save StartOS to your
phone as an app!
</li>
</ul>
<h2>Previous Releases</h2>
<h4>0.3.4.1</h4> <h4>0.3.4.1</h4>
<p class="note-padding"> <p class="note-padding">
View the complete View the complete
<a <a
href="https://github.com/Start9Labs/embassy-os/releases/tag/v0.3.4.1" href="https://github.com/Start9Labs/start-os/releases/tag/v0.3.4.1"
target="_blank" target="_blank"
noreferrer noreferrer
> >
@@ -29,13 +53,11 @@
<li>0.3.4 bug fixes</li> <li>0.3.4 bug fixes</li>
</ul> </ul>
<h2>Previous Releases</h2>
<h4>0.3.4</h4> <h4>0.3.4</h4>
<p class="note-padding"> <p class="note-padding">
View the complete View the complete
<a <a
href="https://github.com/Start9Labs/embassy-os/releases/tag/v0.3.4" href="https://github.com/Start9Labs/start-os/releases/tag/v0.3.4"
target="_blank" target="_blank"
noreferrer noreferrer
> >

View File

@@ -14,17 +14,16 @@
<app-actions-item <app-actions-item
[action]="{ [action]="{
name: 'Uninstall', name: 'Uninstall',
description: 'This will uninstall the service from your Embassy and delete all data permanently.', description: 'This will uninstall the service from StartOS and delete all data permanently.',
icon: 'trash-outline' icon: 'trash-outline'
}" }"
(click)="tryUninstall(pkg)" (click)="tryUninstall(pkg)"
> ></app-actions-item>
</app-actions-item>
<!-- ** specific actions ** --> <!-- ** specific actions ** -->
<ion-item-divider *ngIf="!(pkg.manifest.actions | empty)" <ion-item-divider *ngIf="!(pkg.manifest.actions | empty)">
>Actions for {{ pkg.manifest.title }}</ion-item-divider Actions for {{ pkg.manifest.title }}
> </ion-item-divider>
<app-actions-item <app-actions-item
*ngFor="let action of pkg.manifest.actions | keyvalue: asIsOrder" *ngFor="let action of pkg.manifest.actions | keyvalue: asIsOrder"
[action]="{ [action]="{
@@ -33,7 +32,6 @@
icon: 'play-circle-outline' icon: 'play-circle-outline'
}" }"
(click)="handleAction(pkg, action)" (click)="handleAction(pkg, action)"
> ></app-actions-item>
</app-actions-item>
</ion-item-group> </ion-item-group>
</ion-content> </ion-content>

View File

@@ -12,7 +12,7 @@
<ng-container *ngIf="pkgs$ | async as pkgs; else loading"> <ng-container *ngIf="pkgs$ | async as pkgs; else loading">
<ng-container *ngIf="!pkgs.length; else list"> <ng-container *ngIf="!pkgs.length; else list">
<div class="welcome-header"> <div class="welcome-header">
<h1>Welcome to embassyOS</h1> <h1>Welcome to StartOS</h1>
</div> </div>
<widget-list></widget-list> <widget-list></widget-list>
</ng-container> </ng-container>
@@ -38,6 +38,6 @@
<!-- loading --> <!-- loading -->
<ng-template #loading> <ng-template #loading>
<text-spinner text="Connecting to Embassy"></text-spinner> <text-spinner text="Connecting to server"></text-spinner>
</ng-template> </ng-template>
</ion-content> </ion-content>

View File

@@ -63,8 +63,10 @@
<a <a
[routerLink]="['/system', 'lan']" [routerLink]="['/system', 'lan']"
style="color: var(--ion-color-dark)" style="color: var(--ion-color-dark)"
>download and trust your Embassy's certificate</a >
>. download and trust your server's certificate
</a>
.
</p> </p>
<ion-button (click)="launchHttps()"> <ion-button (click)="launchHttps()">
Open https Open https

View File

@@ -46,7 +46,7 @@ export function getBasicInfoSpec(devData: DevProjectData): ConfigSpec {
type: 'string', type: 'string',
name: 'Service Version', name: 'Service Version',
description: description:
'Service version - accepts up to four digits, where the last confirms to revisions necessary for embassyOS - see documentation: https://github.com/Start9Labs/emver-rs. This value will change with each release of the service', 'Service version - accepts up to four digits, where the last confirms to revisions necessary for StartOS - see documentation: https://github.com/Start9Labs/emver-rs. This value will change with each release of the service',
placeholder: 'e.g. 0.1.2.3', placeholder: 'e.g. 0.1.2.3',
nullable: false, nullable: false,
masked: false, masked: false,

View File

@@ -6,7 +6,7 @@
<ion-card class="card"> <ion-card class="card">
<ion-card-header> <ion-card-header>
<ion-card-title class="title">Embassy Login</ion-card-title> <ion-card-title class="title">StartOS Login</ion-card-title>
</ion-card-header> </ion-card-header>
<ion-card-content class="ion-margin"> <ion-card-content class="ion-margin">

View File

@@ -60,8 +60,8 @@
name="mail-outline" name="mail-outline"
></ion-icon> ></ion-icon>
<h4 style="color: #767676; margin-top: 0px; font-weight: 600"> <h4 style="color: #767676; margin-top: 0px; font-weight: 600">
Important system alerts and notifications from your Embassy will Important system alerts and notifications from StartOS will display
display here here
</h4> </h4>
</div> </div>
</ion-item-group> </ion-item-group>

View File

@@ -18,14 +18,15 @@
href="https://docs.start9.com/latest/user-manual/connecting/connecting-lan" href="https://docs.start9.com/latest/user-manual/connecting/connecting-lan"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
>follow instructions</a
> >
to download and trust your Embassy's Root Certificate Authority follow instructions
</a>
to download and trust your server's Root Certificate Authority
</h2> </h2>
</ion-label> </ion-label>
</ion-item> </ion-item>
<ion-item button (click)="installCert()"> <ion-item button (click)="installCert()" [disabled]="!(crtName$ | async)">
<ion-icon slot="start" name="download-outline" size="large"></ion-icon> <ion-icon slot="start" name="download-outline" size="large"></ion-icon>
<ion-label> <ion-label>
<h1>Download Certificate</h1> <h1>Download Certificate</h1>
@@ -37,6 +38,6 @@
<a <a
id="install-cert" id="install-cert"
href="/public/eos/local.crt" href="/public/eos/local.crt"
download="Embassy Local CA.crt" [download]="crtName$ | async"
></a> ></a>
</ion-content> </ion-content>

View File

@@ -1,4 +1,7 @@
import { ChangeDetectionStrategy, Component } from '@angular/core' import { ChangeDetectionStrategy, Component, Input } from '@angular/core'
import { PatchDB } from 'patch-db-client'
import { map } from 'rxjs'
import { DataModel } from 'src/app/services/patch-db/data-model'
@Component({ @Component({
selector: 'lan', selector: 'lan',
@@ -7,6 +10,12 @@ import { ChangeDetectionStrategy, Component } from '@angular/core'
changeDetection: ChangeDetectionStrategy.OnPush, changeDetection: ChangeDetectionStrategy.OnPush,
}) })
export class LANPage { export class LANPage {
readonly crtName$ = this.patch
.watch$('server-info', 'lan-address')
.pipe(map(addr => `${new URL(addr).hostname}.crt`))
constructor(private readonly patch: PatchDB<DataModel>) {}
installCert(): void { installCert(): void {
document.getElementById('install-cert')?.click() document.getElementById('install-cert')?.click()
} }

View File

@@ -49,7 +49,7 @@ export class ServerBackupPage {
.pipe(skip(1), takeUntil(this.destroy$)) .pipe(skip(1), takeUntil(this.destroy$))
.subscribe(isBackingUp => { .subscribe(isBackingUp => {
if (!isBackingUp) { if (!isBackingUp) {
this.navCtrl.navigateRoot('/embassy') this.navCtrl.navigateRoot('/system')
} }
}) })
} }

View File

@@ -1,6 +1,6 @@
<ion-header> <ion-header>
<ion-toolbar> <ion-toolbar>
<ion-title> System </ion-title> <ion-title>System</ion-title>
<ion-buttons slot="end"> <ion-buttons slot="end">
<badge-menu-button></badge-menu-button> <badge-menu-button></badge-menu-button>
</ion-buttons> </ion-buttons>
@@ -10,7 +10,7 @@
<ion-content class="ion-padding with-widgets"> <ion-content class="ion-padding with-widgets">
<!-- loading --> <!-- loading -->
<ng-template #loading> <ng-template #loading>
<text-spinner text="Connecting to Embassy"></text-spinner> <text-spinner text="Connecting to server"></text-spinner>
</ng-template> </ng-template>
<!-- loaded --> <!-- loaded -->
@@ -22,7 +22,7 @@
<p style="font-weight: 600"> <p style="font-weight: 600">
Click the button on the right to switch to https. Your browser may Click the button on the right to switch to https. Your browser may
warn you that the page is insecure. You can safely bypass this warn you that the page is insecure. You can safely bypass this
warning. It will go away after you download and trust your Embassy's warning. It will go away after you download and trust your server's
certificate certificate
</p> </p>
</ion-label> </ion-label>

View File

@@ -65,7 +65,7 @@ export class ServerShowPage {
message: `This value will be displayed as the title of your browser tab.`, message: `This value will be displayed as the title of your browser tab.`,
label: 'Device Name', label: 'Device Name',
useMask: false, useMask: false,
placeholder: 'embassyOS', placeholder: 'StartOS',
nullable: true, nullable: true,
initialValue: chosenName, initialValue: chosenName,
buttonText: 'Save', buttonText: 'Save',
@@ -113,7 +113,7 @@ export class ServerShowPage {
const alert = await this.alertCtrl.create({ const alert = await this.alertCtrl.create({
header: 'Restart', header: 'Restart',
message: message:
'Are you sure you want to restart your Embassy? It can take several minutes to come back online.', 'Are you sure you want to restart your server? It can take several minutes to come back online.',
buttons: [ buttons: [
{ {
text: 'Cancel', text: 'Cancel',
@@ -135,7 +135,7 @@ export class ServerShowPage {
const alert = await this.alertCtrl.create({ const alert = await this.alertCtrl.create({
header: 'Warning', header: 'Warning',
message: message:
'Are you sure you want to power down your Embassy? This can take several minutes, and your Embassy will not come back online automatically. To power on again, You will need to physically unplug your Embassy and plug it back in', 'Are you sure you want to power down your server? This can take several minutes, and your server will not come back online automatically. To power on again, You will need to physically unplug your server and plug it back in',
buttons: [ buttons: [
{ {
text: 'Cancel', text: 'Cancel',
@@ -159,7 +159,7 @@ export class ServerShowPage {
const minutes = Object.keys(localPkgs).length * 2 const minutes = Object.keys(localPkgs).length * 2
const alert = await this.alertCtrl.create({ const alert = await this.alertCtrl.create({
header: 'Warning', header: 'Warning',
message: `This action will tear down all service containers and rebuild them from scratch. No data will be deleted. This action is useful if your system gets into a bad state, and it should only be performed if you are experiencing general performance or reliability issues. It may take up to ${minutes} minutes to complete. During this time, you will lose all connectivity to your Embassy.`, message: `This action will tear down all service containers and rebuild them from scratch. No data will be deleted. This action is useful if your system gets into a bad state, and it should only be performed if you are experiencing general performance or reliability issues. It may take up to ${minutes} minutes to complete. During this time, you will lose all connectivity to your server.`,
buttons: [ buttons: [
{ {
text: 'Cancel', text: 'Cancel',
@@ -325,7 +325,7 @@ export class ServerShowPage {
private async presentAlertLatest() { private async presentAlertLatest() {
const alert = await this.alertCtrl.create({ const alert = await this.alertCtrl.create({
header: 'Up to date!', header: 'Up to date!',
message: 'You are on the latest version of embassyOS.', message: 'You are on the latest version of StartOS.',
buttons: [ buttons: [
{ {
text: 'OK', text: 'OK',
@@ -341,7 +341,7 @@ export class ServerShowPage {
private async presentAlertInProgress(verb: string, message: string) { private async presentAlertInProgress(verb: string, message: string) {
const alert = await this.alertCtrl.create({ const alert = await this.alertCtrl.create({
header: `${verb} In Progress...`, header: `${verb} In Progress...`,
message: `Stopping all services gracefully. This can take a while.<br /><br />If you have a speaker, your Embassy will <b>♫ play a melody ♫</b> before shutting down. Your Embassy will then become unreachable${message}`, message: `Stopping all services gracefully. This can take a while.<br /><br />If you have a speaker, your server will <b>♫ play a melody ♫</b> before shutting down. Your server will then become unreachable${message}`,
buttons: [ buttons: [
{ {
text: 'OK', text: 'OK',
@@ -357,7 +357,7 @@ export class ServerShowPage {
Backups: [ Backups: [
{ {
title: 'Create Backup', title: 'Create Backup',
description: 'Back up your Embassy and service data', description: 'Back up StartOS and service data',
icon: 'duplicate-outline', icon: 'duplicate-outline',
action: () => action: () =>
this.navCtrl.navigateForward(['backup'], { relativeTo: this.route }), this.navCtrl.navigateForward(['backup'], { relativeTo: this.route }),
@@ -380,7 +380,7 @@ export class ServerShowPage {
Manage: [ Manage: [
{ {
title: 'Software Update', title: 'Software Update',
description: 'Get the latest version of embassyOS', description: 'Get the latest version of StartOS',
icon: 'cloud-download-outline', icon: 'cloud-download-outline',
action: () => action: () =>
this.eosService.updateAvailable$.getValue() this.eosService.updateAvailable$.getValue()
@@ -399,7 +399,7 @@ export class ServerShowPage {
}, },
{ {
title: 'LAN', title: 'LAN',
description: `Download and trust your Embassy's certificate for a secure local connection`, description: `Download and trust your server's certificate for a secure local connection`,
icon: 'home-outline', icon: 'home-outline',
action: () => action: () =>
this.navCtrl.navigateForward(['lan'], { relativeTo: this.route }), this.navCtrl.navigateForward(['lan'], { relativeTo: this.route }),
@@ -409,7 +409,7 @@ export class ServerShowPage {
{ {
title: 'SSH', title: 'SSH',
description: description:
'Manage your SSH keys to access your Embassy from the command line', 'Manage your SSH keys to access your server from the command line',
icon: 'terminal-outline', icon: 'terminal-outline',
action: () => action: () =>
this.navCtrl.navigateForward(['ssh'], { relativeTo: this.route }), this.navCtrl.navigateForward(['ssh'], { relativeTo: this.route }),
@@ -440,7 +440,7 @@ export class ServerShowPage {
Insights: [ Insights: [
{ {
title: 'About', title: 'About',
description: 'Basic information about your Embassy', description: 'Basic information about your server',
icon: 'information-circle-outline', icon: 'information-circle-outline',
action: () => action: () =>
this.navCtrl.navigateForward(['specs'], { relativeTo: this.route }), this.navCtrl.navigateForward(['specs'], { relativeTo: this.route }),
@@ -492,7 +492,7 @@ export class ServerShowPage {
Support: [ Support: [
{ {
title: 'User Manual', title: 'User Manual',
description: 'Discover what your Embassy can do', description: 'Discover what StartOS can do',
icon: 'map-outline', icon: 'map-outline',
action: () => action: () =>
window.open( window.open(
@@ -518,7 +518,7 @@ export class ServerShowPage {
}, },
{ {
title: 'Donate to Start9', title: 'Donate to Start9',
description: `Support embassyOS development`, description: `Support StartOS development`,
icon: 'logo-bitcoin', icon: 'logo-bitcoin',
action: () => action: () =>
this.document.defaultView?.open( this.document.defaultView?.open(

View File

@@ -9,7 +9,7 @@
<ion-content class="with-widgets"> <ion-content class="with-widgets">
<ion-item-group *ngIf="server$ | async as server"> <ion-item-group *ngIf="server$ | async as server">
<ion-item-divider>embassyOS Info</ion-item-divider> <ion-item-divider>StartOS Info</ion-item-divider>
<ion-item> <ion-item>
<ion-label> <ion-label>
<h2>Version</h2> <h2>Version</h2>

View File

@@ -13,11 +13,11 @@
<ion-item> <ion-item>
<ion-label> <ion-label>
<h2> <h2>
Adding SSH keys to your Embassy is useful for command line access, as Adding SSH keys to StartOS is useful for command line access, as well
well as for debugging purposes. as for debugging purposes.
<a [href]="docsUrl" target="_blank" rel="noreferrer" <a [href]="docsUrl" target="_blank" rel="noreferrer">
>View instructions</a View instructions
> </a>
</h2> </h2>
</ion-label> </ion-label>
</ion-item> </ion-item>

View File

@@ -119,7 +119,7 @@ const sshSpec = {
type: 'string', type: 'string',
name: 'SSH Key', name: 'SSH Key',
description: description:
'Enter the SSH public key you would like to authorize for root access to your Embassy.', 'Enter the SSH public key you would like to authorize for root access to your server.',
nullable: false, nullable: false,
masked: false, masked: false,
copyable: false, copyable: false,

View File

@@ -19,15 +19,16 @@
<ion-item> <ion-item>
<ion-label> <ion-label>
<h2> <h2>
Adding WiFi credentials to your Embassy allows you to remove the Adding WiFi credentials to your StartOS allows you to remove the
Ethernet cable and move the device anywhere you want. Embassy will Ethernet cable and move the device anywhere you want. StartOS will
automatically connect to available networks. automatically connect to available networks.
<a <a
href="https://docs.start9.com/latest/user-manual/wifi" href="https://docs.start9.com/latest/user-manual/wifi"
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
>View instructions</a
> >
View instructions
</a>
</h2> </h2>
</ion-label> </ion-label>
</ion-item> </ion-item>
@@ -42,9 +43,9 @@
[disabled]="loading" [disabled]="loading"
> >
<ion-icon slot="start" name="earth-outline" size="large"></ion-icon> <ion-icon slot="start" name="earth-outline" size="large"></ion-icon>
<ion-label *ngIf="wifi.country" <ion-label *ngIf="wifi.country">
>{{ wifi.country }} - {{ this.countries[wifi.country] }}</ion-label {{ wifi.country }} - {{ this.countries[wifi.country] }}
> </ion-label>
<ion-label *ngIf="!wifi.country">Select Country</ion-label> <ion-label *ngIf="!wifi.country">Select Country</ion-label>
</ion-item> </ion-item>
@@ -79,9 +80,9 @@
<!-- not loading --> <!-- not loading -->
<ng-container *ngIf="!loading && wifi.country"> <ng-container *ngIf="!loading && wifi.country">
<ion-item-divider *ngIf="!(wifi.ssids | empty)" <ion-item-divider *ngIf="!(wifi.ssids | empty)">
>Saved Networks</ion-item-divider Saved Networks
> </ion-item-divider>
<ion-item <ion-item
button button
detail="false" detail="false"

View File

@@ -61,7 +61,7 @@ export class WifiPage {
const alert = await this.alertCtrl.create({ const alert = await this.alertCtrl.create({
header: 'Cannot Complete Action', header: 'Cannot Complete Action',
message: message:
'You must be connected to your Embassy via LAN to change the country.', 'You must be connected to your server via LAN to change the country.',
buttons: [ buttons: [
{ {
text: 'OK', text: 'OK',
@@ -89,7 +89,7 @@ export class WifiPage {
const alert = await this.alertCtrl.create({ const alert = await this.alertCtrl.create({
header: 'Select Country', header: 'Select Country',
subHeader: subHeader:
'Warning: Changing the country will delete all saved networks from the Embassy.', 'Warning: Changing the country will delete all saved networks from StartOS.',
inputs, inputs,
buttons: [ buttons: [
{ {
@@ -225,7 +225,7 @@ export class WifiPage {
const alert = await this.alertCtrl.create({ const alert = await this.alertCtrl.create({
header: `Connected to "${ssid}"`, header: `Connected to "${ssid}"`,
message: message:
'Note. It may take several minutes to an hour for your Embassy to reconnect over Tor.', 'Note. It may take several minutes to an hour for StartOS to reconnect over Tor.',
buttons: [ buttons: [
{ {
text: 'Ok', text: 'Ok',

View File

@@ -480,7 +480,7 @@ export module Mock {
description: 'LND needs bitcoin to live.', description: 'LND needs bitcoin to live.',
requirement: { requirement: {
type: 'opt-out', type: 'opt-out',
how: 'You can use an external node from your Embassy if you prefer.', how: 'You can use an external node from your server if you prefer.',
}, },
config: null, config: null,
}, },
@@ -776,7 +776,7 @@ export module Mock {
code: 1, code: 1,
level: NotificationLevel.Success, level: NotificationLevel.Success,
title: 'Backup Complete', title: 'Backup Complete',
message: 'Embassy and services have been successfully backed up.', message: 'StartOS and services have been successfully backed up.',
data: { data: {
server: { server: {
attempted: false, attempted: false,
@@ -942,7 +942,7 @@ export module Mock {
{ {
timestamp: '2019-12-26T14:21:30.872Z', timestamp: '2019-12-26T14:21:30.872Z',
message: message:
'\u001b[34mPOST \u001b[0;32;49m200\u001b[0m photoview.embassy/api/graphql \u001b[0;36;49m1.169406ms\u001b', '\u001b[34mPOST \u001b[0;32;49m200\u001b[0m photoview.startos/api/graphql \u001b[0;36;49m1.169406ms\u001b',
}, },
{ {
timestamp: '2019-12-26T14:22:30.872Z', timestamp: '2019-12-26T14:22:30.872Z',
@@ -1047,7 +1047,7 @@ export module Mock {
hsbdjhasbasda: { hsbdjhasbasda: {
type: 'cifs', type: 'cifs',
hostname: 'smb://192.169.10.0', hostname: 'smb://192.169.10.0',
path: '/Desktop/embassy-backups', path: '/Desktop/startos-backups',
username: 'TestUser', username: 'TestUser',
mountable: false, mountable: false,
'embassy-os': { 'embassy-os': {
@@ -1072,7 +1072,7 @@ export module Mock {
csgashbdjkasnd: { csgashbdjkasnd: {
type: 'cifs', type: 'cifs',
hostname: 'smb://192.169.10.0', hostname: 'smb://192.169.10.0',
path: '/Desktop/embassy-backups-2', path: '/Desktop/startos-backups-2',
username: 'TestUser', username: 'TestUser',
mountable: true, mountable: true,
'embassy-os': null, 'embassy-os': null,

View File

@@ -7,7 +7,7 @@ import {
DependencyError, DependencyError,
Manifest, Manifest,
} from 'src/app/services/patch-db/data-model' } from 'src/app/services/patch-db/data-model'
import { EmbassyOSDiskInfo, LogsRes, ServerLogsReq } from '@start9labs/shared' import { StartOSDiskInfo, LogsRes, ServerLogsReq } from '@start9labs/shared'
export module RR { export module RR {
// DB // DB
@@ -347,7 +347,7 @@ export interface DiskBackupTarget {
label: string | null label: string | null
capacity: number capacity: number
used: number | null used: number | null
'embassy-os': EmbassyOSDiskInfo | null 'embassy-os': StartOSDiskInfo | null
} }
export interface CifsBackupTarget { export interface CifsBackupTarget {
@@ -356,7 +356,7 @@ export interface CifsBackupTarget {
path: string path: string
username: string username: string
mountable: boolean mountable: boolean
'embassy-os': EmbassyOSDiskInfo | null 'embassy-os': StartOSDiskInfo | null
} }
export type RecoverySource = DiskRecoverySource | CifsRecoverySource export type RecoverySource = DiskRecoverySource | CifsRecoverySource

View File

@@ -12,7 +12,7 @@ import { BUILT_IN_WIDGETS } from '../../pages/widgets/built-in/widgets'
export const mockPatchData: DataModel = { export const mockPatchData: DataModel = {
ui: { ui: {
name: `Matt's Embassy`, name: `Matt's Server`,
'ack-welcome': '1.0.0', 'ack-welcome': '1.0.0',
theme: 'Dark', theme: 'Dark',
widgets: BUILT_IN_WIDGETS.filter( widgets: BUILT_IN_WIDGETS.filter(
@@ -46,7 +46,7 @@ export const mockPatchData: DataModel = {
id: 'abcdefgh', id: 'abcdefgh',
version: '0.3.4', version: '0.3.4',
'last-backup': new Date(new Date().valueOf() - 604800001).toISOString(), 'last-backup': new Date(new Date().valueOf() - 604800001).toISOString(),
'lan-address': 'https://embassy-abcdefgh.local', 'lan-address': 'https://adjective-noun.local',
'tor-address': 'http://myveryownspecialtoraddress.onion', 'tor-address': 'http://myveryownspecialtoraddress.onion',
'ip-info': { 'ip-info': {
eth0: { eth0: {
@@ -609,7 +609,7 @@ export const mockPatchData: DataModel = {
description: 'LND needs bitcoin to live.', description: 'LND needs bitcoin to live.',
requirement: { requirement: {
type: 'opt-out', type: 'opt-out',
how: 'You can use an external node from your Embassy if you prefer.', how: 'You can use an external node from your server if you prefer.',
}, },
config: null, config: null,
}, },

View File

@@ -2,7 +2,7 @@
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<title>embassyOS</title> <title>StartOS</title>
<base href="/" /> <base href="/" />

View File

@@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<title>Embassy | Initializing</title> <title>StartOS | Initializing</title>
<style> <style>
body { body {
background: #333333; background: #333333;
@@ -29,7 +29,7 @@
</style> </style>
</head> </head>
<body> <body>
<h2 class="header-title"><span>embassyOS Initializing</span></h2> <h2 class="header-title"><span>StartOS Initializing</span></h2>
<p style="padding: 20px;">This process can take up to several minutes to complete.</p> <p style="padding: 20px;">This process can take up to several minutes to complete.</p>
</body> </body>
</html> </html>

View File

@@ -1,38 +1,39 @@
export namespace ExpectedExports { export namespace ExpectedExports {
/** Set configuration is called after we have modified and saved the configuration in the embassy ui. Use this to make a file for the docker to read from for configuration. */ /** Set configuration is called after we have modified and saved the configuration in the StartOS ui. Use this to make a file for the docker to read from for configuration. */
export type setConfig = ( export type setConfig = (
effects: Effects, effects: Effects,
input: Config, input: Config
) => Promise<ResultType<SetResult>>; ) => Promise<ResultType<SetResult>>;
/** Get configuration returns a shape that describes the format that the embassy ui will generate, and later send to the set config */ /** Get configuration returns a shape that describes the format that the StartOS ui will generate, and later send to the set config */
export type getConfig = (effects: Effects) => Promise<ResultType<ConfigRes>>; export type getConfig = (effects: Effects) => Promise<ResultType<ConfigRes>>;
/** These are how we make sure the our dependency configurations are valid and if not how to fix them. */ /** These are how we make sure the our dependency configurations are valid and if not how to fix them. */
export type dependencies = Dependencies; export type dependencies = Dependencies;
/** Properties are used to get values from the docker, like a username + password, what ports we are hosting from */ /** Properties are used to get values from the docker, like a username + password, what ports we are hosting from */
export type properties = ( export type properties = (
effects: Effects, effects: Effects
) => Promise<ResultType<Properties>>; ) => Promise<ResultType<Properties>>;
export type health = { export type health = {
/** Should be the health check id */ /** Should be the health check id */
[id: string]: ( [id: string]: (
effects: Effects, effects: Effects,
dateMs: number, dateMs: number
) => Promise<ResultType<null | void>>; ) => Promise<ResultType<null | void>>;
}; };
export type migration = ( export type migration = (
effects: Effects, effects: Effects,
version: string, version: string
) => Promise<ResultType<MigrationRes>>; ) => Promise<ResultType<MigrationRes>>;
} }
/** Used to reach out from the pure js runtime */ /** Used to reach out from the pure js runtime */
export type Effects = { export type Effects = {
/** Usable when not sandboxed */ /** Usable when not sandboxed */
writeFile( writeFile(input: {
input: { path: string; volumeId: string; toWrite: string }, path: string;
): Promise<void>; volumeId: string;
toWrite: string;
}): Promise<void>;
readFile(input: { volumeId: string; path: string }): Promise<string>; readFile(input: { volumeId: string; path: string }): Promise<string>;
metadata(input: { volumeId: string; path: string }): Promise<Metadata>; metadata(input: { volumeId: string; path: string }): Promise<Metadata>;
/** Create a directory. Usable when not sandboxed */ /** Create a directory. Usable when not sandboxed */
@@ -42,9 +43,11 @@ export type Effects = {
removeFile(input: { volumeId: string; path: string }): Promise<void>; removeFile(input: { volumeId: string; path: string }): Promise<void>;
/** Write a json file into an object. Usable when not sandboxed */ /** Write a json file into an object. Usable when not sandboxed */
writeJsonFile( writeJsonFile(input: {
input: { volumeId: string; path: string; toWrite: object }, volumeId: string;
): Promise<void>; path: string;
toWrite: object;
}): Promise<void>;
/** Read a json file into an object */ /** Read a json file into an object */
readJsonFile(input: { volumeId: string; path: string }): Promise<object>; readJsonFile(input: { volumeId: string; path: string }): Promise<object>;
@@ -62,22 +65,21 @@ export type Effects = {
/** Sandbox mode lets us read but not write */ /** Sandbox mode lets us read but not write */
is_sandboxed(): boolean; is_sandboxed(): boolean;
}; };
export type Metadata = { export type Metadata = {
fileType: string, fileType: string;
isDir: boolean, isDir: boolean;
isFile: boolean, isFile: boolean;
isSymlink: boolean, isSymlink: boolean;
len: number, len: number;
modified?: Date, modified?: Date;
accessed?: Date, accessed?: Date;
created?: Date, created?: Date;
readonly: boolean, readonly: boolean;
uid: number, uid: number;
gid: number, gid: number;
mode: number mode: number;
} };
export type MigrationRes = { export type MigrationRes = {
configured: boolean; configured: boolean;
@@ -151,19 +153,17 @@ export type DefaultString =
len: number; len: number;
}; };
export type ValueSpecString = export type ValueSpecString = (
& (
| {} | {}
| { | {
pattern: string; pattern: string;
"pattern-description": string; "pattern-description": string;
} }
) ) & {
& {
copyable?: boolean; copyable?: boolean;
masked?: boolean; masked?: boolean;
placeholder?: string; placeholder?: string;
}; };
export type ValueSpecNumber = { export type ValueSpecNumber = {
/** Something like [3,6] or [0, *) */ /** Something like [3,6] or [0, *) */
range?: string; range?: string;
@@ -275,14 +275,7 @@ export type ValueSpecList =
> >
| Subtype< | Subtype<
"enum", "enum",
WithDescription< WithDescription<WithDefault<ListSpec<ValueSpecEnum>, string[]>>
WithDefault<
ListSpec<
ValueSpecEnum
>,
string[]
>
>
> >
| Subtype< | Subtype<
"object", "object",
@@ -338,9 +331,11 @@ export type SetResult = {
}; };
}; };
export type KnownError = { error: String } | { export type KnownError =
| { error: String }
| {
"error-code": [number, string] | readonly [number, string]; "error-code": [number, string] | readonly [number, string];
}; };
export type ResultType<T> = KnownError | { result: T }; export type ResultType<T> = KnownError | { result: T };
export type PackagePropertiesV2 = { export type PackagePropertiesV2 = {

View File

@@ -130,7 +130,7 @@ impl ErrorKind {
DiskManagement => "Disk Management Error", DiskManagement => "Disk Management Error",
OpenSsl => "OpenSSL Internal Error", OpenSsl => "OpenSSL Internal Error",
PasswordHashGeneration => "Password Hash Generation Error", PasswordHashGeneration => "Password Hash Generation Error",
DiagnosticMode => "Embassy is in Diagnostic Mode", DiagnosticMode => "Server is in Diagnostic Mode",
ParseDbField => "Database Field Parse Error", ParseDbField => "Database Field Parse Error",
Duplicate => "Duplication Error", Duplicate => "Duplication Error",
MultipleErrors => "Multiple Errors", MultipleErrors => "Multiple Errors",