Foxnouns.NET/Foxnouns.Backend/Controllers/MetaController.cs

72 lines
2.7 KiB
C#
Raw Permalink Normal View History

// Copyright (C) 2023-present sam/u1f320 (vulpine.solutions)
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published
// by the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
2024-12-25 23:53:31 +01:00
using System.Text.RegularExpressions;
using Foxnouns.Backend.Dto;
using Foxnouns.Backend.Utils;
2024-06-08 21:02:12 +02:00
using Microsoft.AspNetCore.Mvc;
namespace Foxnouns.Backend.Controllers;
[Route("/api/v2/meta")]
2024-12-25 23:53:31 +01:00
public partial class MetaController : ApiControllerBase
2024-06-08 21:02:12 +02:00
{
private const string Repository = "https://codeberg.org/pronounscc/pronouns.cc";
2024-06-08 21:02:12 +02:00
[HttpGet]
[ProducesResponseType<MetaResponse>(StatusCodes.Status200OK)]
public IActionResult GetMeta() =>
Ok(
new MetaResponse(
Repository,
BuildInfo.Version,
BuildInfo.Hash,
(int)FoxnounsMetrics.MemberCount.Value,
new UserInfoResponse(
(int)FoxnounsMetrics.UsersCount.Value,
(int)FoxnounsMetrics.UsersActiveMonthCount.Value,
(int)FoxnounsMetrics.UsersActiveWeekCount.Value,
(int)FoxnounsMetrics.UsersActiveDayCount.Value
),
new LimitsResponse(
MembersController.MaxMemberCount,
ValidationUtils.MaxBioLength,
ValidationUtils.MaxCustomPreferences,
AuthUtils.MaxAuthMethodsPerType,
FlagsController.MaxFlagCount
)
)
2024-06-09 15:48:26 +02:00
);
2024-06-08 21:02:12 +02:00
2024-12-25 23:53:31 +01:00
[HttpGet("page/{page}")]
public async Task<IActionResult> GetStaticPageAsync(string page, CancellationToken ct = default)
{
if (!PageRegex().IsMatch(page))
{
throw new ApiError.BadRequest("Invalid page name");
}
string path = Path.Join(Directory.GetCurrentDirectory(), "static-pages", $"{page}.md");
string text = await System.IO.File.ReadAllTextAsync(path, ct);
return Ok(text);
}
[HttpGet("/api/v2/coffee")]
public IActionResult BrewCoffee() =>
Problem("Sorry, I'm a teapot!", statusCode: StatusCodes.Status418ImATeapot);
2024-12-25 23:53:31 +01:00
[GeneratedRegex(@"^[a-z\-_]+$")]
private static partial Regex PageRegex();
}