Экран авторизации с вводом адреса и логина {#sec.autorise.part1}
-----------------------------------------------------------------

При первом входе в приложение должен открываться экран с вводом 
адреса и логина (илл. «Авторизация, ввод адреса и логина»).

![Авторизация, ввод адреса и логина](resources/img/autorise/authorization1.png)

**Элементы управления экрана.**

+---------------------------------------------------+--------------------------------+-----------------------------------------------+
| Элемент управления                                | Расположение на экране         | Описание                                      |
+===================================================+================================+===============================================+
| ![](resources/img/autorise/elements/icon_qr.png)\ | Верхняя половина, левая часть  | Иконка                                        |
+---------------------------------------------------+--------------------------------+-----------------------------------------------+
| Войти с помощью QR-кода                           | Верхняя половина, правая часть | Лейбл                                         |
+---------------------------------------------------+--------------------------------+-----------------------------------------------+
| Сканировать код                                   | Под лейблом                    | Кнопка запуска камеры для сканирования        |
|                                                   |                                | QR-кода (илл. «Сканирование QR-кода»)         |
+---------------------------------------------------+--------------------------------+-----------------------------------------------+
| Либо ввести данные вручную                        | По центру экрана               | Лейбл                                         |
+---------------------------------------------------+--------------------------------+-----------------------------------------------+
| Адрес                                             | Нижняя половина                | Содержит лейбл "Адрес", подпись в скобках     |
|                                                   |                                | "например: synergy.tm" и поле для ввода хоста |
|                                                   |                                | (placeholder отсутствует)                     |
+---------------------------------------------------+--------------------------------+-----------------------------------------------+
| Логин                                             | Ниже адреса                    | Содержит лейбл "Логин" и поле для ввода       |
|                                                   |                                | логина (placeholder отсутствует)              |
+---------------------------------------------------+--------------------------------+-----------------------------------------------+
| Далее                                             | Ниже логина                    | Кнопка для перехода на следующий экран        |
|                                                   |                                | авторизации (илл. «Авторизация, ввод пароля») |
+---------------------------------------------------+--------------------------------+-----------------------------------------------+
|                                                   | Самый низ экрана               | Фиксированная область для вывода ошибок       |
+---------------------------------------------------+--------------------------------+-----------------------------------------------+

В поле *"Адрес"* вводится URL приложения (причем регистр букв не 
имеет значения). Если сервер работает не на дефолтном порту (80), 
то указывается "Хост:порт". Например, *somehost* или 
*somehost:8080*.

В поле *"Логин"* вводится логин пользователя.

При наличии введенных символов в указанных полях справа должна 
появляться иконка "крестика" 
![](resources/img/autorise/elements/icon_clear.png), по нажатию 
которой поле должно очиститься, а курсор установиться в его 
начало (+ автоматическое открытие клавиатуры).

По нажатию на кнопку *"Далее"* (как вручную, так и автоматически 
после сканирования QR-кода) приложение должно попытаться 
привести введенный URL к рабочему по правилам, описанным ниже.

*   Если не введен протокол (*http://* или *https://*), то 
    добавлять его при отправке запросов. Сперва *https* 
    (шифрованное соединение), возможно исполнение альтернативного 
    потока событий №3. Если сервер не поддерживает шифрование, то 
    затем необходимо добавить *http*, возможно исполнение 
    альтернативного потока событий №4.

*   Если введен протокол *http://*, но сервером поддерживется 
    шифрованное соединение, то заменить протокол на *https://*.

*   Если введен протокол *https://*, но сервером не поддерживется 
    шифрованное соединение, то заменить протокол на *http://*.

*   Если адрес не заканчивается на "/", то добавлять его 
    автоматически.

*   Если не удается подключиться по адресу, указанному в строке, 
    попробовать подключиться к серверу по адресу 
    *"хост" + "/" (если необходимо) + Synergy*.

*   Если не удается подключиться по адресу, указанному в строке 
    и преобразованному согласно вышеописанным правилам, 
    попробовать подключиться к серверу по адресу:
    
    *   *"хост" + "/" (если необходимо) + Synergy* (если порт 
        был введен);

    *   *"хост" + ":8443" + "/Synergy"* (наоборот, если порт не 
        был введен, для шифрованного соединения).

    *   *"хост" + ":8080" + "/Synergy"* (если порт не был 
        введен, для нешифрованного соединения).

Если не заполнены обязательные поля адреса и логина, исполняется 
альтернативный поток событий 1. Если в результате всех правил 
преобразования URL не удалось получить доступ к серверу - №2. 
Корректность логина проверяется на следующем шаге авторизации.

По нажатию на кнопку "Назад" на экране ввода адреса и логина 
происходит [выход из приложения](#sec.app_exit).

В результате успешного прохождения валидации обоих полей 
открывается следующий экран для ввода пароля.

***Альтернативные потоки событий.***

*Альтернативный поток №1. Не заполнены обязательные поля адреса 
приложения и/или логина.*

Действие не осуществляется, выходит ошибка:

`Заполните все поля`

*Альтернативный поток №2. Некорректно введен адрес приложения.*

Действие не осуществляется, выходит ошибка:

`Невозможно подключиться к серверу`

Ошибки должны выводиться в фиксированной области внизу экрана. 
Текст ошибки должен быть обрамлен в рамку красного цвета. 
Кроме того, соответствующее ошибке поле должно подсветиться 
красным цветом (илл. «Авторизация, вывод ошибки»).

![Авторизация, вывод ошибки](resources/img/autorise/authorization4.png)

*Альтернативные потоки событий, связанные с наличием 
шифрованного соединения.*

> Примечание:
> 
> В связи с особенностями iOS, альтернативные потоки 3-6 для 
> данной ОС будут отсутствовать. Если настроено http соединение, 
> то произойдет нешифрованное соединение (см. альтернативный 
> поток №7). Если не настроено, то выйдет ошибка подключения к 
> серверу, останется открытым данный экран авторизации.

*   Альтернативный поток №3. Если сертификат не является 
    безопасным (в т.ч. является самоподписанным), то 
    необходимо отобразить системное диалоговое окно с 
    кнопками "Принять" и "Отменить" и сообщением:

    `Сертификат безопасности не является доверенным`

*   Альтернативный поток №4. Если сертификат просрочен, то 
    необходимо отобразить системное диалоговое окно с 
    кнопками "Принять" и "Отменить" и сообщением:

    `Сертификат безопасности является просроченным`

*   Альтернативный поток №5. Если сертификат выписан не на 
    введенный адрес, то необходимо отобразить системное 
    диалоговое окно с кнопками "Принять" и "Отменить" и 
    сообщением:

    `Сертификат безопасности данного адреса был выдан для 
    другого адреса`

*   Альтернативный поток №6. В случае, если выполняются 
    одновременно несколько альтернативных потоков событий 
    3-5, то необходимо выполнять альтернативный поток №3.

Во всех этих случаях по нажатию на кнопку "Принять" 
необходимо продолжить авторизацию по нешифрованному соединению, 
по нажатию на кнопку "Отменить" - не выполнять действие и 
оставаться на данном экране.

*Альтернативный поток событий №7.* Если происходит авторизация 
по нешифрованному соединению, то необходимо отобразить 
системное диалоговое окно с кнопками "Принять" и "Отменить" и 
сообщением:

`Ваше подключение не защищено. Продолжить?`

По нажатию на кнопку "Принять" необходимо продолжить авторизацию 
по нешифрованному соединению, по нажатию на кнопку "Отменить" - 
не выполнять действие и оставаться на данном экране.
