From 7e27b0742b88baefc99cf3f837e322c31835bcff Mon Sep 17 00:00:00 2001 From: Sergey Karmanov Date: Mon, 12 Oct 2026 13:35:51 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B7=D0=B0=D0=B2=D0=B8=D1=81=D0=B8=D0=BC=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B8=20=D0=B8=20=D1=83=D0=BB=D1=83=D1=87=D1=88=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D1=83?= =?UTF-8?q?=20MFA=20=D0=B2=20MicrosoftLoginHelper?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.idea/.gitignore | 15 +++++++++++ src/BrowserScripts/MicrosoftLoginHelper.cs | 25 ++++++++++++++++++- src/Dockerfile | 4 +-- src/ModeusSchedule.MSAuth.csproj | 4 +-- 4 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 .idea/.idea.ModeusSchedule.MSAuth/.idea/.gitignore diff --git a/.idea/.idea.ModeusSchedule.MSAuth/.idea/.gitignore b/.idea/.idea.ModeusSchedule.MSAuth/.idea/.gitignore new file mode 100644 index 0000000..c779a28 --- /dev/null +++ b/.idea/.idea.ModeusSchedule.MSAuth/.idea/.gitignore @@ -0,0 +1,15 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Rider ignored files +/modules.xml +/contentModel.xml +/projectSettingsUpdater.xml +/.idea.ModeusSchedule.MSAuth.iml +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/src/BrowserScripts/MicrosoftLoginHelper.cs b/src/BrowserScripts/MicrosoftLoginHelper.cs index d0f1bba..6070e10 100644 --- a/src/BrowserScripts/MicrosoftLoginHelper.cs +++ b/src/BrowserScripts/MicrosoftLoginHelper.cs @@ -1,5 +1,4 @@ using System.Text.RegularExpressions; -using Microsoft.Extensions.Logging; using Microsoft.Playwright; namespace ModeusSchedule.MSAuth.BrowserScripts; @@ -122,6 +121,30 @@ public static class MicrosoftLoginHelper #endregion + // Microsoft может предложить добавить еще один способ проверки после успешного MFA. + // Ссылка определяется по адресу, чтобы обработка не зависела от языка страницы. + var skipMfaRegistration = page.Locator("a[href*='skipmfaregistration=1']").First; + var canSkipMfaRegistration = false; + try + { + await skipMfaRegistration.WaitForAsync(new() + { + State = WaitForSelectorState.Visible, + Timeout = 8_000 + }); + canSkipMfaRegistration = true; + } + catch (TimeoutException) + { + logger.LogDebug("Предложение настроить дополнительный способ MFA не появилось — пропускаем шаг."); + } + + if (canSkipMfaRegistration) + { + logger.LogInformation("Откладываем настройку дополнительного способа MFA."); + await skipMfaRegistration.ClickAsync(); + } + await page.WaitForSelectorAsync("button, input[type='submit'], a", new PageWaitForSelectorOptions { Timeout = 8000 }); var locator = page.Locator("#idSIButton9, #idBtn_Back").First; diff --git a/src/Dockerfile b/src/Dockerfile index a8f13a9..50d3618 100644 --- a/src/Dockerfile +++ b/src/Dockerfile @@ -1,11 +1,11 @@ -FROM mcr.microsoft.com/dotnet/sdk:9.0-alpine3.22 AS build +FROM mcr.microsoft.com/dotnet/sdk:10.0-alpine3.24 AS build ARG BUILD_CONFIGURATION=Release WORKDIR /src COPY . . RUN dotnet restore "ModeusSchedule.MSAuth.csproj" RUN dotnet publish "ModeusSchedule.MSAuth.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false -FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS final +FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS final EXPOSE 8080 WORKDIR /app diff --git a/src/ModeusSchedule.MSAuth.csproj b/src/ModeusSchedule.MSAuth.csproj index b043672..5c7fe9f 100644 --- a/src/ModeusSchedule.MSAuth.csproj +++ b/src/ModeusSchedule.MSAuth.csproj @@ -1,13 +1,13 @@ - net9.0 + net10.0 enable enable - +