2024-12-09 21:11:46 +01:00
|
|
|
// 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;
|
2024-12-08 20:17:30 +01:00
|
|
|
using Foxnouns.Backend.Dto;
|
2024-09-30 21:44:41 +02:00
|
|
|
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
|
|
|
{
|
2024-07-13 03:09:00 +02:00
|
|
|
private const string Repository = "https://codeberg.org/pronounscc/pronouns.cc";
|
|
|
|
|
2024-06-08 21:02:12 +02:00
|
|
|
[HttpGet]
|
2024-07-13 19:38:40 +02:00
|
|
|
[ProducesResponseType<MetaResponse>(StatusCodes.Status200OK)]
|
2024-12-08 15:07:25 +01:00
|
|
|
public IActionResult GetMeta() =>
|
|
|
|
Ok(
|
2024-10-02 00:28:07 +02:00
|
|
|
new MetaResponse(
|
|
|
|
Repository,
|
|
|
|
BuildInfo.Version,
|
|
|
|
BuildInfo.Hash,
|
|
|
|
(int)FoxnounsMetrics.MemberCount.Value,
|
2024-12-08 20:17:30 +01:00
|
|
|
new UserInfoResponse(
|
2024-10-02 00:28:07 +02:00
|
|
|
(int)FoxnounsMetrics.UsersCount.Value,
|
|
|
|
(int)FoxnounsMetrics.UsersActiveMonthCount.Value,
|
|
|
|
(int)FoxnounsMetrics.UsersActiveWeekCount.Value,
|
|
|
|
(int)FoxnounsMetrics.UsersActiveDayCount.Value
|
|
|
|
),
|
2024-12-08 20:17:30 +01:00
|
|
|
new LimitsResponse(
|
2024-12-08 15:07:25 +01:00
|
|
|
MembersController.MaxMemberCount,
|
|
|
|
ValidationUtils.MaxBioLength,
|
|
|
|
ValidationUtils.MaxCustomPreferences,
|
2024-12-08 20:17:30 +01:00
|
|
|
AuthUtils.MaxAuthMethodsPerType,
|
|
|
|
FlagsController.MaxFlagCount
|
2024-10-02 00:28:07 +02:00
|
|
|
)
|
|
|
|
)
|
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);
|
|
|
|
}
|
|
|
|
|
2024-07-12 17:12:24 +02:00
|
|
|
[HttpGet("/api/v2/coffee")]
|
2024-10-02 00:28:07 +02:00
|
|
|
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();
|
2024-10-02 00:28:07 +02:00
|
|
|
}
|