shortener-server

Copyright(c) Mansur Ziiatdinov 2018-2019
LicenseBSD-3
Maintainerchgk@pm.me
Stabilityexperimental
PortabilityPOSIX
Safe HaskellNone
LanguageHaskell2010

Server

Contents

Description

В данном модуле находится реализация API собственно приложения. Описанием API собственно приложения является тип LinkApi.

Synopsis

Реализация сервера

linkServer Source #

Arguments

:: OIDCEnv

Информация, необходимая для работы клиента OpenID Connect

-> Server LinkApi

Реализация API собственно приложения

Информация OIDCEnv необходима для выполнения запросов о токене пользователя внутри withUser

listAllLinks Source #

Arguments

:: OIDCEnv

Информация, необходимая для работы клиента OpenID Connect

-> Server ListAllLinks

Реализация получения списка ссылок

Требует авторизации. Если текущий пользователь является админом в приложении, возвращает все ссылки, иначе - только ссылки, созданные пользователем

Использует функцию selectUrls для работы с БД

createLink Source #

Arguments

:: OIDCEnv

Информация, необходимая для работы клиента OpenID Connect

-> Server CreateLink

Реализация создания ссылки

Использует функцию insertUrl для работы с БД

redirectLink Source #

Arguments

:: OIDCEnv

Информация, необходимая для работы клиента OpenID Connect

-> Server RedirectLink

Реализация переадресации по короткой ссылке

В случае, если ссылка не найдена, возвращает ошибку 404

Использует функцию getUrl для работы с БД

Вспомогательные функции

withAuthenticated Source #

Arguments

:: AuthResult a

Результат авторизации с информацией об a

-> (a -> Handler b)

Обработчик информации a, который возвращает b

-> Handler b

Результат обработки

Проверка AuthResult (туда после раскодирования и проверки попадает информация из JWT-токена приложения, передаваемого в заголовке Authorization).

Либо выбрасывает ошибки 401 (если пользователь не авторизован), либо выполняет заданную функцию-обработчик с результатом авторизации

withUser Source #

Arguments

:: OIDCEnv

Информация, необходимая для работы клиента OpenID Connect

-> ([Text] -> User -> Handler b)

Функция-обработчик, которая принимает список ролей и текущего пользователя

-> User

Текущий пользователь

-> Handler b

Результат обработки

Получение и проверка информации о пользователе и запуск функций со списком ролей и пользователем.

Получает информацию о токене при помощи getUserInfo и, если токен действует, получает список ролей текущего пользователя.

Далее вызывает функцию-обработчик с этим (возможно, пустым) списком ролей и текущим пользователем.

Если токен недействителен, возвращает код 401 с текстом ошибки.