From e6f56938c18cb6990993e5585b9cee5656672290 Mon Sep 17 00:00:00 2001 From: yawaflua Date: Wed, 17 Apr 2024 22:55:21 +0300 Subject: [PATCH] fix errors --- Areas/MyFeature/Pages/Page1.cshtml | 13 ------ Areas/MyFeature/Pages/Page1.cshtml.cs | 13 ------ Controllers/RedirectController.cs | 9 ++-- Dockerfile | 58 +++++++++++++------------- Pages/Authorize.cshtml | 2 +- Pages/rrobotsTxt.cshtml | 12 ------ Program.cs | 7 ++-- Properties/launchSettings.json | 11 +++++ Startup.cs | 6 +-- api.yawaflua.ru.csproj | 10 +++-- libman.json | 5 +++ wwwroot/favicon.ico | Bin 662630 -> 0 bytes 12 files changed, 63 insertions(+), 83 deletions(-) delete mode 100644 Areas/MyFeature/Pages/Page1.cshtml delete mode 100644 Areas/MyFeature/Pages/Page1.cshtml.cs delete mode 100644 Pages/rrobotsTxt.cshtml create mode 100644 libman.json delete mode 100644 wwwroot/favicon.ico diff --git a/Areas/MyFeature/Pages/Page1.cshtml b/Areas/MyFeature/Pages/Page1.cshtml deleted file mode 100644 index 25e0304..0000000 --- a/Areas/MyFeature/Pages/Page1.cshtml +++ /dev/null @@ -1,13 +0,0 @@ -@page -@model yawaflua.ru.MyFeature.Pages.Page1Model - - - - - - - Page1 - - - - diff --git a/Areas/MyFeature/Pages/Page1.cshtml.cs b/Areas/MyFeature/Pages/Page1.cshtml.cs deleted file mode 100644 index 476d05b..0000000 --- a/Areas/MyFeature/Pages/Page1.cshtml.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; - -namespace yawaflua.ru.MyFeature.Pages -{ - public class Page1Model : PageModel - { - public void OnGet() - { - - } - } -} \ No newline at end of file diff --git a/Controllers/RedirectController.cs b/Controllers/RedirectController.cs index c9193be..65584d3 100644 --- a/Controllers/RedirectController.cs +++ b/Controllers/RedirectController.cs @@ -20,14 +20,13 @@ namespace yawaflua.ru.Controllers this.cache = cache; } [HttpGet("{uri}")] - public async Task FromGitHub(string uri) + public async Task FromGitHub(string uri, [FromQuery(Name = "to")] string? to, [FromQuery(Name = "debug")] string debug = "false") { - Console.WriteLine(uri); Redirects redirects; - if (!cache.TryGetValue($"redirectsWithUrl-{uri}", out redirects) || ctx.Redirects.TryGetValue(k => k.uri == uri, out redirects)) - cache.Set($"redirectsWithUrl-{uri}", redirects, DateTime.Now.AddMinutes(10)); + if (!cache.TryGetValue($"redirectsWithUrl-{uri}", out redirects) || ctx.Redirects.TryGetValue(k => k.uri == uri, out redirects) ) + cache.Set($"redirectsWithUrl-{uri}", redirects, DateTime.Now.AddMinutes(20)); - return Redirect(redirects?.redirectTo ?? "/404"); + return Redirect(redirects?.redirectTo + to?.Replace("%", "/") ?? "/404"); } } diff --git a/Dockerfile b/Dockerfile index fba78db..2fbb145 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,31 +1,33 @@ -FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base +# ASP.NET Core SDK +FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build + +# WORKDIR /app + +# +COPY . ./ +RUN dotnet restore "api.yawaflua.ru.csproj" + +# +RUN dotnet publish -c Release -o /app/out "api.yawaflua.ru.csproj" + + +# , ASP.NET Core runtime +FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime +WORKDIR /app +COPY --from=build /app/out ./ +# , EXPOSE 80 -EXPOSE 443 +# +ENV CLIENTID=123 +ENV CLIENTSECRET=aAbB +ENV REDIRECTURL=http://example.org/ +ENV PSQL_HOST=localhost +ENV PSQL_USER=root +ENV PSQL_PASSWORD=root +ENV PSQL_DATABASE=database +ENV OWNERID=1111111 +ENV READMEFILE=https://raw.githubusercontent.com/yawaflua/yawaflua/main/README.md -FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build - - -WORKDIR /src -COPY ["yaflay.ru.csproj", "."] -RUN dotnet restore "./yaflay.ru.csproj" -COPY . . -WORKDIR "/src/." -RUN dotnet build "yaflay.ru.csproj" -c Release -o /app/build - -FROM build AS publish -ENV CLIENTID 123 -ENV CLIENTSECRET aAbB -ENV REDIRECTURL http://example.org/ -ENV PSQL_HOST localhost -ENV PSQL_USER root -ENV PSQL_PASSWORD root -ENV PSQL_DATABASE database -ENV OWNERID 1111111 -ENV READMEFILE https://raw.githubusercontent.com/yawaflua/yawaflua/main/README.md -RUN dotnet publish "yaflay.ru.csproj" -c Release -o /app/publish /p:UseAppHost=false - -FROM base AS final -WORKDIR /app -COPY --from=publish /app/publish . -ENTRYPOINT ["dotnet", "yaflay.ru.dll"] \ No newline at end of file +# ASP.NET Core +ENTRYPOINT ["dotnet", "api.yawaflua.ru.dll"] diff --git a/Pages/Authorize.cshtml b/Pages/Authorize.cshtml index b9b9bcc..cc22814 100644 --- a/Pages/Authorize.cshtml +++ b/Pages/Authorize.cshtml @@ -53,7 +53,7 @@ message = await Startup.client.SendAsync(requestMessage); } string responseBody = await message.Content.ReadAsStringAsync(); - JsonNode body = JsonNode.Parse(responseBody); + JsonNode? body = JsonNode.Parse(responseBody); if (body["access_token"]?.ToString() == null) {

Ошибка! Попробуй авторизоваться заново

diff --git a/Pages/rrobotsTxt.cshtml b/Pages/rrobotsTxt.cshtml deleted file mode 100644 index 263d25e..0000000 --- a/Pages/rrobotsTxt.cshtml +++ /dev/null @@ -1,12 +0,0 @@ -@page -@{ - Layout = null; - this.Response.ContentType = "text/plain"; -} -User-agent: * -Disallow: /* -Disallow: /* -Allow: /Blog -Allow: /Blog/* -Allow: /Privacy -Allow: / \ No newline at end of file diff --git a/Program.cs b/Program.cs index 7eccd3b..d7fbad2 100644 --- a/Program.cs +++ b/Program.cs @@ -22,8 +22,7 @@ public class Program } public static class StaticProgram { - public static bool isNull(this object? value) - { - return value == null; - } + public static bool isNull(this object? value) => + value == null; + } \ No newline at end of file diff --git a/Properties/launchSettings.json b/Properties/launchSettings.json index 58d7044..332116a 100644 --- a/Properties/launchSettings.json +++ b/Properties/launchSettings.json @@ -20,6 +20,17 @@ "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.SpaProxy" } }, + "Docker": { + "commandName": "Docker", + "dotnetRunMessages": true, + "launchBrowser": true, + "launchUrl": ".", + "applicationUrl": "http://localhost:5144", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.SpaProxy" + } + }, "https": { "commandName": "Project", "dotnetRunMessages": true, diff --git a/Startup.cs b/Startup.cs index 9ba3bfc..5492098 100644 --- a/Startup.cs +++ b/Startup.cs @@ -47,7 +47,7 @@ namespace yawaflua.ru services.AddControllers() .AddRazorPagesOptions(options => { - options.Conventions.AddPageRoute("/RobotsTxt", "/Robots.txt"); + options.Conventions.AddPageRoute("/RobotsTxt", "/robots.txt"); options.Conventions.AddPageRoute("/NotFound", "/404"); options.Conventions.AddPageRoute("/IternalErrorPage", "/500"); @@ -83,8 +83,7 @@ namespace yawaflua.ru services.AddMvc() .AddRazorPagesOptions(options => { - options.Conventions.AddPageRoute("/RobotsTxt", "/Robots.txt"); - options.Conventions.AddPageRoute("/rrobotsTxt", "/robots.txt"); + options.Conventions.AddPageRoute("/RobotsTxt", "/robots.txt"); options.Conventions.AddPageRoute("/NotFound", "/404"); options.Conventions.AddPageRoute("/IternalErrorPage", "/500"); options.Conventions.AddPageRoute("/Authorize", "/authorize"); @@ -106,6 +105,7 @@ namespace yawaflua.ru { app.UseDeveloperExceptionPage(); app.UseHsts(); + app.UseSpa(x => x.UseProxyToSpaDevelopmentServer("http://localhost:8080")); } // Configure the HTTP request pipeline. diff --git a/api.yawaflua.ru.csproj b/api.yawaflua.ru.csproj index efdbc0d..8461100 100644 --- a/api.yawaflua.ru.csproj +++ b/api.yawaflua.ru.csproj @@ -1,4 +1,4 @@ - + net8.0 @@ -10,15 +10,16 @@ true yawaflua yawaflua - npm run serve -- --host 0.0.0.0 --port 8080 - http://localhost:8080 - ..\frontend.yawaflua.ru + + 8.*-* + + @@ -26,6 +27,7 @@ false + diff --git a/libman.json b/libman.json new file mode 100644 index 0000000..ceee271 --- /dev/null +++ b/libman.json @@ -0,0 +1,5 @@ +{ + "version": "1.0", + "defaultProvider": "cdnjs", + "libraries": [] +} \ No newline at end of file diff --git a/wwwroot/favicon.ico b/wwwroot/favicon.ico deleted file mode 100644 index 6270ab1d8336da1e4fd3ce49c155ee7b1b7e6d20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 662630 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