Compare commits

...

13 Commits

Author SHA1 Message Date
Inex Code b8b1e5be25 docs(en): Remove TODO from backups article 2023-09-27 11:58:36 +03:00
NaiJi ✨ 490e3221f8 docs: Upload screenshots for Backups article
- part 2
2023-09-27 11:58:36 +03:00
NaiJi ✨ 0d10c2472a docs: Upload screenshots for Backups article
- part 1
2023-09-27 11:58:36 +03:00
dettlaff f5118b3899 docs: fix typos 2023-09-27 11:58:36 +03:00
Houkime 2ff47840b8 add proto-documentation for backups 2023-09-27 11:58:36 +03:00
Inex Code c2956c9187 Merge pull request 'release-0-9-0' (#50) from release-0-9-0 into master
continuous-integration/drone/push Build is passing Details
Reviewed-on: #50
Reviewed-by: Inex Code <inex.code@selfprivacy.org>
2023-09-22 19:28:14 +03:00
NaiJi ✨ d8b3a01344 docs: fix ru typo 2023-09-22 19:26:23 +03:00
NaiJi ✨ 69f24f01a7 docs: fix ru typo 2023-09-22 19:25:45 +03:00
NaiJi ✨ 7c5e2a1bb1 docs: fix ru 2023-09-22 19:24:48 +03:00
NaiJi ✨ 0cf7a36c4b docs: fix typo 2023-09-22 19:12:47 +03:00
NaiJi ✨ 7120efc267 Update 'content/ru/blog/releases/0.9.0.md' 2023-09-22 19:08:33 +03:00
dettlaff cf168f5dc3 docs: add ru version 2023-09-13 13:57:54 +04:00
Inex Code df90b1f74b docs(en): Stub of 0.9.0 release notes 2023-09-10 15:49:56 +03:00
11 changed files with 423 additions and 0 deletions

View File

@ -0,0 +1,162 @@
---
title: "Version 0.9.0 Release"
linkTitle: "0.9.0"
date: 2023-09-10
description: >
Backups, DeSEC DNS and more!
---
![Release banner showcasing new UI](/images/releases/0.9.0-banner.png)
{{% pageinfo color="primary" %}}
This release is made possible with the support of [NlNet foundation](https://nlnet.nl/project/SelfPrivacy/)
{{% /pageinfo %}}
## Changelog
### Features
- **New backups implementation** ([#228](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/228), [#274](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/274), [#324](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/324), [#325](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/325), [#326](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/326), [#331](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/331), [#332](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/332))
- **DeSEC as a DNS provider** ([#211](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/211))
- **DigitalOcean as a DNS provider** ([#213](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/213))
- Support drawer and basic support documentation logic unit ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Automatic day/night theme ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- New router and adaptive layouts ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- New Material 3 animation curves ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Add jobs button to the app bar of more screens ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Refreshed UI of modal sheets ([#228](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/228))
- Support for `XDG_DATA_HOME` storage path on Linux for app data ([#240](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/240))
- Accept-Language header for the server API ([#243](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/243), resolves [#205](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/205))
- Visible providers names during server recovery ([#264](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/264), resolves [#249](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/249))
- Volume and IPv4 cost added to overall monthly cost of the server ([#270](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/270), resolves [#115](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/115))
- Support for autofocus on text fields for keyboard displaying ([#294](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/294), resolves [#292](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/292))
- New dialogue to choose a domain if user DNS token provides access to several ([#330](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/330), resolves [#328](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/328))
- New app log console ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
### Bug Fixes
- Fix opening URLs from the app ([#213](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/213))
- Fix parsing of RAM size with DigitalOcean ([#200](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/200), resolves [#199](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/199))
- Devices and Recovery Key cubits couldn't initialize right after server installation ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Fix BottomBar showing incorrect animation when navigating from sibling routes ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- PopUpDialogs couldn't find the context. ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Update recovery flow to use new support drawer ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Improve installation failure dialogues ([#213](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/213))
- Privacy policy link pointed at wrong domain ([#207](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/207))
- Remove price lists for DNS ([#211](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/211))
- Implement better domain id check on DNS restoration ([#211](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/211))
- Add forced JSON content type to REST APIs ([#212](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/212))
- Remove unneded DNS check depending on CLOUDFLARE ([#212](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/212))
- Add background for dialogue pop ups and move them to root navigator ([#233](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/233), resolves [#231](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/231))
- Make currency be properly shown again via shortcode ([#234](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/234), related to [#223](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/223))
- Add proper server type value loading ([#236](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/236), resolves [#215](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/215))
- Implement proper load functions for DNS and Server providers ([#237](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/237), resolves [#220](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/220))
- Prevent moving a service if volume is null for some reason ([#245](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/245))
- Replace hard reset from server provider with direct server reboot ([#269](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/269), resolves [#266](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/266))
- Normalize Hetzner CPU usage percentage by cached amount of cores ([#272](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/272), resolves [#156](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/156))
- Change broken validations string for superuser SSH ([#276](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/27))
- Don't let service migration to start if the same volume was picked ([#297](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/297), resolves [#289](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/289))
- Wrap DNS check in catch to avoid runtime crash ([#322](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/322))
- Implement Backblaze bucket restoration on server recovery ([#324](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/324))
### Refactor
- Migrate to Flutter 3.10 and Dart 3.0
- Migrate to AutoRouter v6 ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Get rid of BrandText and restructure the buttons ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Remove brand alert dialogs and bottom sheet ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Remove unused UI components ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Remove BrandCards ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Allow changing values for TLS settings
- Replace String shortcode with Currency class ([#226](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/226))
- Rearrange Server Provider interface ([#227](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/227))
- Remove unused service state getters ([#228](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/228))
- Remove unused utils, add duration formatter ([#228](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/228))
- Move rest api methods according to their business logic files positions ([#235](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/235), partially resolves [#217](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/217) and [#219](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/219))
- Make flag getter a part of server provider location object ([#238](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/238), resolves [#222](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/222))
### Translation contributions
* Ukrainian
* FoxMeste (3)
* Mithras (31)
* Latvian
* Not Telling Lol (183)
* German
* Mithras (41)
* FoxMeste (213)
* Thai
* FoxMeste (77)
* Polish
* Mithras (41)
* Thary (43)
* FoxMeste (163)
* Slovenian
* Mithras (212)
* Czech
* NaiJi ✨ (2)
* Mithras (109)
* FoxMeste (308)
* Russian
* FoxMeste (4)
* Revertron (8)
* NaiJi ✨ (23)
* Mithras (54)
* Inex Code (59)
* Slovak
* Mithras (29)
* Revertron (396)
* Macedonian
* FoxMeste (7)
* Belarusian
* Thary (1)
* FoxMeste (3)
* Mithras (47)
* French
* Côme (211)
* Spanish
* FoxMeste (7)
* Azerbaijani
* Mithras (28)
* Ortibexon (403)

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

View File

@ -0,0 +1,95 @@
---
title: "Backups"
linkTitle: "Backups"
date: 2023-07-31T
weight: 2
description: >
Backing up your services so that they are not lost
---
## Why backing up
When your service is broken but it worked yesterday you have two options:
* Spend some time reading logs and debugging what went wrong. Meanwhile the service is unusable and maybe some data is irreversibly lost.
* Rewind the service to the working state and then debug at a more relaxed pace. Hopefully it was just solar flare or a glitch in the Matrix.
This second, nerve-saving option is enabled by backing up regularly, and even better, automatically.
As an extra benefit, backing up makes it easy to transfer a service from one machine to another with minimal hassle.
This is useful for datacenters on fire, if your server provider gets bought out by another corporation or if shareholders decide that it is finally time to make more profit.
This document covers the basic terms and usage of SelfPrivacy backup subsystem.
## What is a snapshot?
SelfPrivacy does not make backups of the whole machine.
Instead, it saves the states of each service.
The state of files used by a service, taken at a certain time, is called a Snapshot.
In the interface, you can see a snapshot as having an id, a service it backs up, and a date of creation.
## When backups occur?
A snapshot is created in 3 cases:
* By user's manual command to back up a service
* Automatically at certain intervals if Automatic Backups are enabled
* As a precaution before an inplace restore of a service
## How the data is stored?
The service's files are stored at the cloud of user's choosing.
At the moment we support Backblaze but more are to be added.
All of the service data is encrypted with a local secret which the cloud never receives.
Under the hood, we use Restic for transfers of encrypted data.
Clouds like Backblaze have an option to disallow immediate removal of data.
SelfPrivacy app uses this option so that in case when the server is hacked the data cannot be erased.
## Listing snapshots
There are 2 factors to keep in mind when looking at the list:
* For the sake of performance, the list is cached. If some snapshots are missing which you think should be there, invalidate the cache so it reloads.
* If you remove some snapshots, they will disappear from the list, but for some limited time they are still restorable with the help of the cloud.
## Restoring a snapshot
When you restore a snapshot, the service is stopped, and all of its files are restored to the state when the snapshot was taken.
There are 2 ways to do it.
The safest one, the default one, is to download the snapshot in its entirety, verify that data is not damaged, and replace the service files with the files from the snapshot.
This has a downside that you need to have extra space to store the snapshot.
A somewhat riskier way is to overwrite the service files directly, without intermediate storage. This needs less space, but if the transfer goes wrong, you end up with a broken service.
To somewhat mitigate this, a pre-restore snapshot is made just before the restoration.
The app does check that we have enough space before attempting a restore.
## Forgetting a snapshot
Forgetting makes the snapshot inaccessible from the server, but deletion itself is reversible from cloud UI for some time (30 days for Backblaze by default).
## Automatic Backup
If you set up an automatic backup period, all of the services will be backed up regularly according to the period.
Note that backups are independent per service. If you have services A and B backed up automatically every day in the morning, and then you back up service B manually at noon, then service A's next backup will be in the morning as usual, but B's backups will occur at noons.
If set to zero, autobackups will be disabled.
## Restoring after someone has deleted all the snapshots
* Go to your Backblaze/other cloud interface directly.
* Rewind the bucket's state to prior the deletion event.
* Open SelfPrivacy app
* Invalidate snapshot cache
* List the snapshots
* Restore from snapshots as usual
## Troubleshooting backups
* If you suspect that the snapshot list is inaccurate, try discarding the cache
* If an inplace restore failed, make sure that your cloud is accessible and your contract is active, then try to either restore a snapshot you tried to restore, or a pre-restore snapshot generated automatically
* If you do not have enough space on the disk for a safe restore, try restoring inplace

View File

@ -0,0 +1,166 @@
---
title: "Версия 0.9.0 Релиз"
linkTitle: "0.9.0"
date: 2023-09-10
description: >
Бекапы, DeSEC DNS и не только!
---
![Релизный баннер, демонстрирующий новый пользовательский интерфейс](/images/releases/0.9.0-banner.png)
{{% pageinfo color="primary" %}}
Релиз стал возможен при поддержке [NlNet foundation](https://nlnet.nl/project/SelfPrivacy/)
{{% /pageinfo %}}
## Список изменений
### Нововведения
- **Новая реализация резервного копирования (бекапов)** ([#228](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/228), [#274](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/274), [#324](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/324), [#325](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/325), [#326](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/326), [#331](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/331), [#332](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/332))
- **DeSEC в качестве DNS провайдера** ([#211](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/211))
- **DigitalOcean в качестве DNS провайдера** ([#213](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/213))
- Вспомогательные механизмы и окна подсказок ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Автоматическая смена дневной/ночной темы ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Новая адаптивная компоновка и порядок страниц ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Новые анимации из Material 3 ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Поддержка кнопки "Задач" для большинства экранов ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Новый интерфейс модальных окон ([#228](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/228))
- Поддержка `XDG_DATA_HOME` директории в Linux ([#240](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/240))
- Поддержка Accept-Language заголовка для API сервера ([#243](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/243), реализует [#205](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/205))
- Отображение имен провайдеров при восстановлении доступа ([#264](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/264), реализует [#249](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/249))
- Отображение стоимости IPv4 и отдельного хранилища при расчёте стоимости сервера ([#270](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/270), относится к [#115](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/115))
- Поддержка автофокуса на текстовых полях для отображения клавиатуры ([#294](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/294), реализует [#292](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/292))
- Новый диалог для выбора домена из множества во время установки ([#330](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/330), реализует [#328](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/328))
- Новый журнал логов приложения ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
### Исправления
- Исправление URL-адресов из приложения ([#213](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/213))
- Исправление парсинга количества оперативной памяти в DigitalOcean ([#200](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/200), реализует [#199](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/199))
- Исправление инициализации кубитов во время восстановления ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Исправление некорректной анимации нижней панели ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Исправление потерянного контекста для всплывающих диалогов ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Обновление поведения окон подсказок во время восстановления ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Улучшение диалогов о сбоях при установке ([#213](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/213))
- Исправление ссылки на политику конфиденциальности ([#207](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/207))
- Удаление прайс-листов для DNS ([#211](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/211))
- Реализация улучшенной проверки идентификатора домена при восстановлении DNS ([#211](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/211))
- Добавление принудительного типа содержимого JSON в REST API ([#212](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/212))
- Устранение незарегистрированной проверки DNS для CLOUDFLARE ([#212](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/212))
- Добавление фона для всплывающих диалоговых окон и перемещение их в корневой навигатор ([#233](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/233), реализует [#231](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/231))
- Исправление отображения валюты ([#234](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/234), относится к [#223](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/223))
- Реализация правильной загрузки значения типа сервера из хранилища ([#236](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/236), реализует [#215](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/215))
- Исправление функций загрузки для DNS и сервер провайдеров ([#237](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/237), реализует [#220](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/220))
- Запрет перемещения сервиса, если диск по какой-либо причине пустой ([#245](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/245))
- Заменен сброс от сервер провайдера на перезагрузку через API сервера ([#269](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/269), реализует [#266](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/266))
- Нормализация нагрузки на процессор для Hetzner с помощью кеширования ([#272](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/272), реализует [#156](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/156))
- Изменение неработающей строки валидации для SSH суперпользователя ([#276](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/27))
- Запрет запуска миграции сервиса если был выбран один и тот же раздел ([#297](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/297), реализует [#289](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/289))
- Исправление сбоя DNS проверки во время установки ([#322](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/322))
- Реализация восстановления хранилища Backblaze при восстановлении сервера ([#324](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/324))
### Улучшения
- Обновление до Flutter 3.10 и Dart 3.0
- Обновление до AutoRouter v6 ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Удаление BrandText и реструктуризация кнопок ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Удаление Brand диалогов и всплывающих страниц ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Удаление неиспользуемых компонентов интерфейса ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Удаление BrandCards ([#203](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/203))
- Разрешение изменения значений для настроек TLS
- Исправление шорткода String на класс Currency ([#226](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/226))
- Изменение интерфейса провайдера сервера ([#227](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/227))
- Удаление неиспользуемых геттеров состояния сервиса ([#228](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/228))
- Удаление неиспользуемых утилит ([#228](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/228))
- Реструктуризация методов REST API в соответствии с их позициями в файлах бизнес-логики ([#235](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/235), частично реализует [#217](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/217) и [#219](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/219))
- Добавление геттера для флага в объект локации сервера ([#238](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/238), реализует [#222](https://git.selfprivacy.org/SelfPrivacy/selfprivacy.org.app/issues/222))
### Помогли с переводом
* Украинский
* FoxMeste (3)
* Mithras (31)
* Латвийский
* Not Telling Lol (183)
* Немецкий
* Mithras (41)
* FoxMeste (213)
* Тайский
* FoxMeste (77)
* Польский
* Mithras (41)
* Thary (43)
* FoxMeste (163)
* Словенский
* Mithras (212)
* Чешский
* NaiJi ✨ (2)
* Mithras (109)
* FoxMeste (308)
* Русский
* FoxMeste (4)
* Revertron (8)
* NaiJi ✨ (23)
* Mithras (54)
* Inex Code (59)
* Словацкий
* Mithras (29)
* Revertron (396)
* Македонский
* FoxMeste (7)
* Белорусский
* Thary (1)
* FoxMeste (3)
* Mithras (47)
* Французский
* Côme (211)
* Испанский
* FoxMeste (7)
* Азербайджанский
* Mithras (28)
* Ortibexon (403)

Binary file not shown.

After

Width:  |  Height:  |  Size: 401 KiB