# ZTerton

<img style="margin-top: 1em;width: 500px;border: 0" alt="Fork me on GitHub" src="logo/zterton.svg?sanitize=true">

## WebServices and Clouds Monitoring for [LibreCloud](https://librecloud.online)

This was created to play and sync different roles:

### As WebServer

- Run several webservers with different settings at once
- Handle pre-configured routes for requests (GET/POST)
- Use SSL for HTTPS webservers
- Serve web client frontend applications and provide them sign-on mechanism
- Run a websever with templates ([Tera](https://tera.netlify.app)), multi-language and style customized
- Run as a File server from a preconfigured directory
- Implement authenticated files upload (backend & frontend via templates)

### As Multilanguage server

- Allow languages settings for request responses
- Language autosense for data definition

### As DataServer

- Manage Data sets from or to (JSON,YAML,TOML)
- Use several alternatives as [Data Store](https://en.wikipedia.org/wiki/Data_store) (in memory, key-value)
- Simple data caching or preload
- Use [Async GraphQL](https://async-graphql.github.io/async-graphql/en/index.html) or API mode to handle data requests

### As Authentication / Authorization server

- Manage JSON Web Tokens [JWT](https://en.wikipedia.org/wiki/JSON_Web_Token)
- Include simple authentication and user authorization policies with [Casbin](https://casbin.org/)
- Handle User login/logout with several [Data Store](https://en.wikipedia.org/wiki/Data_store) or [Databases](https://en.wikipedia.org/wiki/Database)
- Manage Sessions and profiles in [key-value storage](https://en.wikipedia.org/wiki/Key%E2%80%93value_database)
- Able to encrypt/decrypt data

### As Customizable server

- Declare from config and enviroment files: resources path, settings, etc
- Run several tasks in [Async mode](https://tokio.rs/tokio/tutorial), with customizable running time
- Use modules (with data and resources) to configure services
- Use several running services level: basic,development
- Simple license and versioning

## As Monitor and Supervision server

- Scan [Clouds setting](https://rlung.librecloud.online/LibreCloud/CloudMandala#cloudmandala) to create a global info with current status periodically
- Watch and monitor declared [Cloud services](https://rlung.librecloud.online/LibreCloud/CloudMandala#cloudmandala) status and apply configured custom rules

## Why

To explore [Rust](https://www.rust-lang.org/) programming language excelence for backend services, handle web requests with dynamic responses, resources access, data sources, etc.

[ZTerton](/LibreCloud/ZTerton) code relies on [LibreCloud Libraries](LibreCloud) with different funcionalities for backend developments, so it feeds libraries to reuse code as much as it is possible, by follwing priciple of: <i>to make good programs use the very best libraries</i>.

To elevate all [CloudMandala](/LibreCloud/CloudMandala) definitions, settings and management to a next level:

- A way to collect Cloud settings for frontend web client to create Cloud dashboards
- A Cloud resources state watcher with preconfigured rules to apply according or in response to predictable states

## Inspiration

[Terton](https://en.wikipedia.org/wiki/Tert%C3%B6n) is a term within Tibetan Buddhism meaning a person who is a discoverer of ancient hidden texts or [terma](https://en.wikipedia.org/wiki/Terma_(religion)). The <u>Termas</u> are sometimes objects like statues, and can also exist as dharma texts and experiences. [Tertöns](https://en.wikipedia.org/wiki/Tert%C3%B6n) discover the texts at the right time and place.

[ZTerton](/LibreCloud/ZTerton) was conceived as a __Bridge__  (image in logo) to achive latest **Z** [termas](https://en.wikipedia.org/wiki/Terma_(religion)) as resources or data from __sources of truth__.


## Build

Build is automated in [Rlung](/) repository as a [CD/CI](https://en.wikipedia.org/wiki/CI/CD) in [LibreCloud](/librecloud) Clouds infraestructure:

- Release is build upon request
- Binaries for some platforms are build and published as release attachments

### Requirements for build

- [Rust](https://www.rust-lang.org/) infraestructure for Linux or MacOs platforms
- [JQ](https://stedolan.github.io/jq/), [YQ](https://mikefarah.gitbook.io/yq/) as tools to handle JSON and YAML

### Build from source

- Clone this repository and go to folder:

```bash
git clone https://rlung.librecloud.online/LibreCloud/ZTerton zterton
cd zterton
```

- Build:

```bash
cargo build --release
```

- Install ():

```bash
copy target/release/zterton /usr/local/bin
```

## Running

Several components are need it, due to [ZTerton](/LibreCloud/ZTerton) modularity and configurability, a lot of features and funcionalities can be set, enable, extended, etc.

In some specific cases like: data sources, data storage, [graphql](https://graphql.org/), etc some [Rust](https://www.rust-lang.org/) coding is need it.

### Resources

- Home
- html
- data
- languages
- modules

### Run arguments

```txt
ZTerton: WebServices and Clouds Monitoring for LibreCloud

USAGE:
    zterton [OPTIONS]

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

OPTIONS:
    -c, --config <config>    config
    -d, --debug <debug>      Debug level
    -e, --env <env>          environment
```

### Configuration

- File **config.toml**

### Environment

- File **env**

Use to preset settings:

| Arg | Env. var |
|---|---|

## Running as a service

### Container settings

### Run examples

Use evironment variables like this:

```bash
```

```txt
```

### Optionals

As an option it is possible to encrypt sensitive informations like:

- Credentials (username/password)
- Data config file in yaml

- Help

```bash
# Getting help 
```

```txt
```

- That's all! 🎉

#### YAML Config Example

```yaml

```

#### Coders and encoders

It is possible to encrypt sensitive informations like:

- Credentials (username/password)
- Data config file in yaml

Coders are called using operating system command (exec)

> [Tecoder]() from [ZTerton]()
> backend developments is fully supported

Coder definition to be used:
| var | content |
|---|---|
| cmd | command-path |

## Author

- [Jesús Pérez](https://github.com/jesusperez).

## Article assistance

If you want to say «thank you»:

1. Twit about article [on your Twitter](https://twitter.com/intent/tweet?text=Let%27s%20write%20config%20for%20your%20Golang%20web%20app%20on%20right%20way%20%E2%80%94%20YAML%20%F0%9F%91%8C%20https%3A%2F%2Fdev.to%2Fkoddr%2Flet-s-write-config-for-your-golang-web-app-on-right-way-yaml-5ggp).
2. Add a GitHub Star and make Fork to this repository.
3. Donate some money to project author via PayPal: [@paypal.me/](https://paypal.me/).
4. Join UpCloud at my [referral link](https://upcloud.com/signup/?promo=CVR337) (your profit is **\$25** credits and I will receive \$50 worth of free credits).

Thanks for your support! 😘

## References

## License

MIT