This commit is contained in:
2025-10-07 23:49:05 +10:00
parent d5e5136de6
commit 068af736e6
4 changed files with 51 additions and 4 deletions

View File

@@ -16,6 +16,7 @@
<ItemGroup>
<PackageReference Include="Saturn" Version="0.16.1" />
<PackageReference Include="Thoth.Json.Giraffe" Version="6.0.0" />
<PackageReference Include="Thoth.Json.Net" Version="11.0.0" />
</ItemGroup>
@@ -27,6 +28,9 @@
<None Include="wwwroot\scripts\htmx.min.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="wwwroot\images\loading.svg">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="wwwroot\scripts\index.js">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>

View File

@@ -3,12 +3,13 @@ module Controller
open System
open System.Net.Http
open System.Text.RegularExpressions
open Giraffe
open Giraffe.ViewEngine.HtmlElements
open Types
open System.Text
open System.Net
open Thoth.Json.Net
let parseUsername (username: string) =
let pattern = @"https?://(?:www\.)?my\.flightradar24\.com/([^/?#]+)"
let matches = Regex.Match(username, pattern)
@@ -24,12 +25,19 @@ let getJsonResult result =
let makePostRequest<'x> (url: string) payload =
async {
use httpClient = new HttpClient()
use handler = new HttpClientHandler()
handler.AutomaticDecompression <- DecompressionMethods.GZip ||| DecompressionMethods.Deflate
use httpClient = new HttpClient(handler)
let content = new StringContent(payload, Encoding.UTF8, "application/x-www-form-urlencoded")
let request = new HttpRequestMessage(HttpMethod.Post, url)
request.Content <- content
request.Headers.Add("User-Agent", "Mozilla/5.0") // mimic browser
request.Headers.Add("Accept", "application/json")
let! response = httpClient.SendAsync(request) |> Async.AwaitTask
let! responseContent = response.Content.ReadAsStringAsync() |> Async.AwaitTask
return responseContent
}
|> Async.RunSynchronously
@@ -106,6 +114,7 @@ let processAirports (alphabet: char[]) (allAirports: Airport[]) =
let RenderAirportList (user: usernameQuery) =
let username = parseUsername user.fr24user
let alphabet = [|'A'..'Z'|]
let airports =
$"username={username}&listType={user.searchType}&order=no&limit=0"
|> makePostRequest<AirportResponseData> "https://my.flightradar24.com/public-scripts/profileToplist"

View File

@@ -2,10 +2,14 @@ open Microsoft.AspNetCore.Http
open Microsoft.Extensions.DependencyInjection
open Saturn
open Giraffe
open Types
open Types
open Thoth.Json.Giraffe
open System
open System.Net
open System.Net.Sockets
open System.IO
module Program =
@@ -23,6 +27,7 @@ module Program =
let ServiceConfig (services: IServiceCollection) =
// Get the server IP address
services.AddSingleton<Json.ISerializer>(ThothSerializer()) |> ignore
let serverIpAddress =
match Dns.GetHostEntry(Dns.GetHostName()).AddressList |> Array.tryFind(fun ip -> ip.AddressFamily = AddressFamily.InterNetwork) with
| Some ip -> ip.ToString()
@@ -40,8 +45,8 @@ module Program =
let app =
application {
use_mime_types [(".woff", "application/font-woff")]
use_static "wwwroot"
use_router router
use_static (Path.Combine(AppContext.BaseDirectory, "wwwroot"))
use_developer_exceptions
service_config ServiceConfig
url "http://0.0.0.0:5001"

View File

@@ -0,0 +1,29 @@
# Use a full Ubuntu image
FROM ubuntu:24.04 AS base
# Set working directory
WORKDIR /app
# Install dependencies: ICU, CA certs, curl (optional for debugging)
RUN apt-get update && \
apt-get install -y --no-install-recommends \
libicu-dev \
ca-certificates \
curl \
unzip \
wget \
git \
tzdata && \
rm -rf /var/lib/apt/lists/*
# Copy published .NET app
COPY bin/Release/net8.0/linux-x64/publish/ ./
# Expose port
EXPOSE 5001
# Set timezone (optional, avoids TZ issues)
ENV TZ=Australia/Brisbane
# Set entrypoint
ENTRYPOINT ["./AirportAlphabetGame"]