https://github.com/anakovak/vkr-attendance

https://github.com/anakovak/vkr-attendance

Science Score: 26.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (1.5%) to scientific vocabulary
Last synced: 6 months ago · JSON representation

Repository

Basic Info
  • Host: GitHub
  • Owner: AnakovaK
  • Language: C#
  • Default Branch: main
  • Size: 113 KB
Statistics
  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • Open Issues: 0
  • Releases: 0
Created 10 months ago · Last pushed 10 months ago
Metadata Files
Readme

README.md

Backend

Конфигурация

Локально удобно пользоваться user secrets

  • PublicOrigin__Uri: Публичный домен, по которому доступен API. Вынесен отдельно а не берется из заголовков запроса, поскольку frontend может ходить по внутренней сети, и домен там будет неверным.

Хранилища данных

  • ConnectionStrings__AttendPostgresDatabase: Строка подключения к БД Postgres, используется в EFCore и healthcheck.

Аутентификация

Аутентификация ведется через Cookie. Клиенты с других доменов должны находиться в списке доступных origin-ов для того чтобы присылать cookie из браузера.

Предусмотрено два механизма аутентификации, для production и для тестирования при работе разработчиков.

При существовании секции Oauth__MIREA используется она. Её необходимо указывать только для Production. В противном случае используется Development аутентификация, где данные о пользователе берутся из конфигурации.

Подтверждения студентов через QR код

  • StudentSelfApproveLinkOptions__DelayBetweenCreatingLinks: TimeSpan время между показами нового QR кода
  • StudentSelfApproveLinkOptions__LinkLifetime: TimeSpan время валидности QR кода
  • StudentSelfApproveLinkOptions__LinkTemplate: Шаблон строки для string.Format, который будет использоваться для подстановки единственного аргумента - токена подтверждения посещения

Автоматическое создание занятий

  • CreateLessonFromScheduleOptions__RangeToScan: Период времени, который будет захвачен при создании занятий от момента начала создания занятий.

Production

Указывается только при развертывании на продакшн сервере

  • Oauth__MIREA__ClientId: id приложения для аутентификации через login.mirea.ru
  • Oauth__MIREA__ClientSecret: секрет приложения для аутентификации через login.mirea.ru
  • Oauth__MIREA__AuthorizationEndpoint: адрес авторизации
  • Oauth__MIREA__TokenEndpoint: адрес получения токена
  • Oauth__MIREA__UserInformationEndpoint: адрес получения информации о пользователе

Система login.mirea.ru может возвращать не только идентификатор человека, для обхода этой особенности данные о пользователе запрашиваются из системы ТАНДЕМ, если информация о человеке не может быть взята из БД. При ошибке во время этого процесса или при отказе пользователя аутентифицироваться он будет перенаправлен на страницу /auth_error. API проект ничего не предоставляет по маршруту. Его должен обработать некоторый фронтенд, что будет расположен на том же домене, что и API. При перенаправлении может присутствовать query параметр ReturnUrl, на который необходимо перенаправить пользователя после ознакомления с информацией о произошедшей ситуации.

Development

  • Oauth__MIREAStatic__Claims__<индекс>__(Type|Value): Массив объектов, описыващих клеймы пользователя, под которым будет произведена аутентификация. Для корректной работы желательно указать все клеймы, что настроены в MIREAOptions.cs

Id пользователя, под которым происходит аутентификация можно переопределить, указав заголовок human-id. При наличии он перекроет id, указанный в конфигурации. Это полезно для тестирования различных ролей, этот же маханизм используется в автоматических тестах.

Для аутентификации через данный механизм из инструментов по типу Postman/Insomnia можно выполнить запрос на /debug-login(доступен только в Development режиме).

Sentry

В проекте добавлен Senrty с трассировками, для настройки можно использовать опции Sentry

Миграции

Миграции как и все модели данных находятся в src/AttendDatabase. Для работы с миграциями нужно указывать Startup проект через -s Например, для создания новой необходимо выполнить следующие команды bash cd src/AttendDatabase dotnet ef migrations add ИМЯ_МИГРАЦИИ -s ..\API\API.csproj

Разработка

Для обращения к сервису желательно использовать не http[s]://localhost:(5025|5026), а http[s]://127.0.0.1.nip.io:(5025|5026), так как это необходимо для корректной работы с Cookie.

Порты

5025 HTTP1.1 (dev TLS/prod no TLS)

Данный порт используется для gRPC Web + аутентификации с Oauth.

Для работы аутентификации в dev режиме используется TLS(для верной работы с Secure Cookie). В продакшене он не используется, так как эту работу на себя берет выше стоящий прокси.

5026 HTTP2 (no TLS)

Используется для взаимодействия с Frontend по внутренней сети.

Добавление enum в сущности

Чтобы созданные enum были подходящими для postgres, после добавления их в сущность нужно указать на их существование:

В src/AttendDatabase/AttendDbContext.cs добавляется строка modelBuilder.HasPostgresEnum<(название enum)>();

В src/AttendDatabase/DlHelper.cs добавляется строка dataSourceBuilder.MapEnum<(название enum)>();

Использование базы данных для выполнения фоновых работ

Ссылка на скачивание данных указывается в appsettings.json в поле ConnectionStrings__BackgroundScheduleLinks

В проекте используется библиотека Quartz - библиотека планирования задач. Для выполнения только одной задачи (без возможности параллельного включения одной и той же задачи) можно подключить БД в appsettings.json для Quartz через ConnectionStrings__QuartzDatabase.

Чтобы подключаемая БД появилась, нужно создать новую базу данных и провести в нее миграции из файла

В противном случае (без подключения БД) будет использоваться RAM память, что запустит две и более задачи (триггера)

Настройка частоты срабатывания сервиса делается через строку BackgroundScheduleMode в appsettings.json. Там используется cron-выражение

Настройка частоты срабатывания сервиса расписания "в моменте" делается в CurrentDayScheduleMode в appsettings.json также через cron-выражение.

Owner

  • Login: AnakovaK
  • Kind: user

GitHub Events

Total
  • Push event: 2
  • Create event: 2
Last Year
  • Push event: 2
  • Create event: 2

Dependencies

docker-compose.override.yml docker
  • postgres 15
docker-compose.production.yml docker
  • redis 7
docker-compose.yml docker
  • registry.gitlab.com/rtu-tc/rtu-attend/backend/api latest
src/API/Dockerfile docker
  • base latest build
  • build latest build
  • mcr.microsoft.com/dotnet/aspnet 7.0 build
  • mcr.microsoft.com/dotnet/sdk 7.0 build
src/API/API.csproj nuget
  • Microsoft.EntityFrameworkCore.Design 7.0.10 development
  • Ardalis.Specification 7.0.0
  • AspNetCore.HealthChecks.NpgSql 7.0.0
  • Bogus 34.0.2
  • Grpc.AspNetCore 2.56.0
  • Grpc.AspNetCore.Server.Reflection 2.56.0
  • Grpc.AspNetCore.Web 2.56.0
  • Ical.Net 4.2.0
  • Microsoft.AspNetCore.DataProtection.EntityFrameworkCore 7.0.10
  • Microsoft.AspNetCore.OpenApi 7.0.10
  • Microsoft.Extensions.Caching.StackExchangeRedis 7.0.10
  • Microsoft.VisualStudio.Azure.Containers.Tools.Targets 1.19.5
  • OneOf 3.0.255
  • Quartz 3.7.0
  • Quartz.AspNetCore 3.7.0
  • Quartz.Extensions.DependencyInjection 3.7.0
  • Quartz.Serialization.Json 3.7.0
  • Sentry.AspNetCore 3.36.0
  • Swashbuckle.AspNetCore 6.5.0
src/AttendDatabase/AttendDatabase.csproj nuget
  • Microsoft.EntityFrameworkCore.Tools 7.0.10 development
  • Ardalis.Specification 7.0.0
  • Ardalis.Specification.EntityFrameworkCore 7.0.0
  • Microsoft.AspNetCore.DataProtection.EntityFrameworkCore 7.0.10
  • Microsoft.EntityFrameworkCore 7.0.10
  • Npgsql.EntityFrameworkCore.PostgreSQL 7.0.4
src/Proto/Proto.csproj nuget
  • Grpc.Tools 2.57.0 development
  • Google.Protobuf 3.24.2
  • Grpc.AspNetCore.Server 2.56.0
  • Grpc.Net.ClientFactory 2.56.0
tests/Tests.Specs/Tests.Specs.csproj nuget
  • xunit.runner.visualstudio 2.5.0 development
  • FluentAssertions 6.12.0
  • Google.Protobuf 3.24.2
  • Grpc.Net.ClientFactory 2.56.0
  • Grpc.Tools 2.57.0
  • JunitXml.TestLogger 3.0.134
  • Microsoft.AspNetCore.Mvc.Testing 7.0.10
  • Microsoft.EntityFrameworkCore.Relational 7.0.10
  • Microsoft.NET.Test.Sdk 17.7.1
  • SpecFlow.Plus.LivingDocPlugin 3.9.57
  • SpecFlow.xUnit 3.9.74
  • Testcontainers.PostgreSql 3.4.0
  • xunit 2.5.0
tests/Tests.Unit/Tests.Unit.csproj nuget
  • JunitXml.TestLogger 3.0.134
  • Microsoft.NET.Test.Sdk 17.7.1
  • coverlet.collector 6.0.0
  • xunit 2.5.0
  • xunit.runner.visualstudio 2.5.0