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
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
Metadata Files
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.ruOauth__MIREA__ClientSecret: секрет приложения для аутентификации через login.mirea.ruOauth__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
- Repositories: 2
- Profile: https://github.com/AnakovaK
GitHub Events
Total
- Push event: 2
- Create event: 2
Last Year
- Push event: 2
- Create event: 2
Dependencies
- postgres 15
- redis 7
- registry.gitlab.com/rtu-tc/rtu-attend/backend/api latest
- base latest build
- build latest build
- mcr.microsoft.com/dotnet/aspnet 7.0 build
- mcr.microsoft.com/dotnet/sdk 7.0 build
- 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
- 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
- Grpc.Tools 2.57.0 development
- Google.Protobuf 3.24.2
- Grpc.AspNetCore.Server 2.56.0
- Grpc.Net.ClientFactory 2.56.0
- 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
- 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