vityaman-edu / lms

A simple learning management system.
Apache License 2.0
4 stars 0 forks source link

Implement Yandex OAuth essentials #100

Closed vityaman closed 4 months ago

vityaman commented 4 months ago

Requirement for #79

References

vityaman commented 4 months ago

Design draft

REST API

typealias TokenPair = (RefreshToken, AccessToken)

// Exchange a given refresh token to new tokens pair
POST   /auth/token/refreshed: (RefreshToken)     -> TokenPair

// Invalidate current tokens pair, logout
DELETE /auth/token:           (AccessToken)      -> Unit

// Sign in via yandex id and create a new user if not exists
POST   /auth/token/yandex:    (YandexOAuthToken) -> TokenPair

// Extension points
POST   /auth/token/github:    (GitHubOAuthToken) -> TokenPair
POST   /auth/token/vk:        (VKOAuthToken)     -> TokenPair

Database

CREATE TABLE lms.user (
    id              serial      PRIMARY KEY,
    creation_moment timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE lms.auth (
    user_id            integer      PRIMARY KEY REFERENCES lms.user(id),
    refresh_token_hash varchar(256)
);

CREATE TABLE lms.auth_yandex (
    user_id            integer      PRIMARY KEY REFERENCES lms.user(id),
    id                 integer      NOT NULL,
    login              varchar(256) NOT NULL
);