shortener-server

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

Types

Contents

Description

В этом модуле описаны типы, которые используются в нескольких других модулях.

Synopsis

Конфигурация приложения

data Config Source #

Конфигурация приложения

Для работы с OpenID Connect нужны client id и client secret. Возможны также другие схемы аутентификации клиента (JWT; сертификаты X.509; JWT, подписанный секретом клиента) на сервере авторизации (AS), но этот способ проще всего для понимания.

Разумеется, в реальном коде эти данные не должны храниться в коде, поэтому мы храним их в файле конфигурации.

Также понадобится redirect uri, на который AS будет перенаправлять после логина. Возможные варианты redirect uri (с вайлдкардами) должны быть настроены для каждого клиента на AS. Мы используем поле base в функции redirectUri для генерации этого URI.

Кроме того, конфигурация содержит ключ jwk для подписи собственных токенов приложения, которые выдаются пользователям после авторизации и которые содержат информацию о пользователе User.

Более подробная информация о процессе авторизации находится в модуле Auth.

Кроме этого, в конфигурации записана информация об используемой БД. Работа с БД происходит в модуле DB.

Пример файла конфигурации

  {
    "connStr": "demo.sqlite",
    "base": "https://s.chgk.me",
    "clientId": "s-chgk-me",
    "clientSecret": "41bc...cedf",
    "jwk": {"k": "NDFiY2...ZWRm", "kty":"oct"}
  }

Constructors

Config 

Fields

  • connStr :: Text

    Строка соединения с БД. По сути - имя файла Sqlite

  • base :: String

    Базовый URL

  • clientId :: Text

    Идентификатор клиента

  • clientSecret :: Text

    Секрет клиента

  • jwk :: JWK

    Ключ для подписи JWT-токенов приложения

Instances
Eq Config Source # 
Instance details

Defined in Types

Methods

(==) :: Config -> Config -> Bool #

(/=) :: Config -> Config -> Bool #

Show Config Source # 
Instance details

Defined in Types

Generic Config Source # 
Instance details

Defined in Types

Associated Types

type Rep Config :: * -> * #

Methods

from :: Config -> Rep Config x #

to :: Rep Config x -> Config #

FromJSON Config Source # 
Instance details

Defined in Types

Methods

parseJSON :: Value -> Parser Config

parseJSONList :: Value -> Parser [Config]

type Rep Config Source # 
Instance details

Defined in Types

Типы для авторизации

data OIDCEnv Source #

Информация, необходимая для работы клиента OpenID Connect. Создаётся при помощи функции initializeOIDC из конфигурации Config

Constructors

OIDCEnv 

Fields

  • oidc :: OIDC

    Клиент OpenID Connect

  • manager :: Manager

    Менеджер соединений

  • provider :: Provider

    Информация о сервере авторизации

  • config :: Config

    Исходная конфигурация

  • cookieSettings :: CookieSettings

    Настройки Cookies для авторизации в приложении

  • jwtSettings :: JWTSettings

    Настройки JWT-токенов для авторизации в приложении

data User Source #

Информация о пользователе

Constructors

User 

Fields

  • username :: Text

    Имя пользователя

  • mail :: Text

    Электронная почта пользователя

  • token :: Text

    Токен доступа (access token), выдаваемый сервером авторизации

Instances
Eq User Source # 
Instance details

Defined in Types

Methods

(==) :: User -> User -> Bool #

(/=) :: User -> User -> Bool #

Read User Source # 
Instance details

Defined in Types

Show User Source # 
Instance details

Defined in Types

Methods

showsPrec :: Int -> User -> ShowS #

show :: User -> String #

showList :: [User] -> ShowS #

Generic User Source # 
Instance details

Defined in Types

Associated Types

type Rep User :: * -> * #

Methods

from :: User -> Rep User x #

to :: Rep User x -> User #

FromJSON User Source # 
Instance details

Defined in Types

Methods

parseJSON :: Value -> Parser User

parseJSONList :: Value -> Parser [User]

ToJSON User Source # 
Instance details

Defined in Types

Methods

toJSON :: User -> Value

toEncoding :: User -> Encoding

toJSONList :: [User] -> Value

toEncodingList :: [User] -> Encoding

FromJWT User Source # 
Instance details

Defined in Types

Methods

decodeJWT :: ClaimsSet -> Either Text User

ToJWT User Source # 
Instance details

Defined in Types

Methods

encodeJWT :: User -> ClaimsSet

type Rep User Source # 
Instance details

Defined in Types

Типы для логики приложения

newtype Short Source #

Сокращённая ссылка

Constructors

Short 

Fields

  • unShort :: Text

    Текст сокращённой ссылки (то, что идёт после https://s.chgk.me/u/)

Instances
Eq Short Source # 
Instance details

Defined in Types

Methods

(==) :: Short -> Short -> Bool #

(/=) :: Short -> Short -> Bool #

Read Short Source # 
Instance details

Defined in Types

Show Short Source # 
Instance details

Defined in Types

Methods

showsPrec :: Int -> Short -> ShowS #

show :: Short -> String #

showList :: [Short] -> ShowS #

Generic Short Source # 
Instance details

Defined in Types

Associated Types

type Rep Short :: * -> * #

Methods

from :: Short -> Rep Short x #

to :: Rep Short x -> Short #

FromJSON Short Source # 
Instance details

Defined in Types

Methods

parseJSON :: Value -> Parser Short

parseJSONList :: Value -> Parser [Short]

ToJSON Short Source # 
Instance details

Defined in Types

Methods

toJSON :: Short -> Value

toEncoding :: Short -> Encoding

toJSONList :: [Short] -> Value

toEncodingList :: [Short] -> Encoding

FromHttpApiData Short Source # 
Instance details

Defined in Types

type Rep Short Source # 
Instance details

Defined in Types

type Rep Short = D1 (MetaData "Short" "Types" "main" True) (C1 (MetaCons "Short" PrefixI True) (S1 (MetaSel (Just "unShort") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Text)))

newtype Long Source #

Исходная «длинная» ссылка

Constructors

Long 

Fields

  • unLong :: Text

    Полный текст исходной ссылки

Instances
Eq Long Source # 
Instance details

Defined in Types

Methods

(==) :: Long -> Long -> Bool #

(/=) :: Long -> Long -> Bool #

Read Long Source # 
Instance details

Defined in Types

Show Long Source # 
Instance details

Defined in Types

Methods

showsPrec :: Int -> Long -> ShowS #

show :: Long -> String #

showList :: [Long] -> ShowS #

Generic Long Source # 
Instance details

Defined in Types

Associated Types

type Rep Long :: * -> * #

Methods

from :: Long -> Rep Long x #

to :: Rep Long x -> Long #

FromJSON Long Source # 
Instance details

Defined in Types

Methods

parseJSON :: Value -> Parser Long

parseJSONList :: Value -> Parser [Long]

ToJSON Long Source # 
Instance details

Defined in Types

Methods

toJSON :: Long -> Value

toEncoding :: Long -> Encoding

toJSONList :: [Long] -> Value

toEncodingList :: [Long] -> Encoding

FromHttpApiData Long Source # 
Instance details

Defined in Types

type Rep Long Source # 
Instance details

Defined in Types

type Rep Long = D1 (MetaData "Long" "Types" "main" True) (C1 (MetaCons "Long" PrefixI True) (S1 (MetaSel (Just "unLong") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Text)))