initial commit

This commit is contained in:
Hampus Kraft
2026-01-01 20:42:59 +00:00
commit 2f557eda8c
9029 changed files with 1490197 additions and 0 deletions

View File

@@ -0,0 +1,22 @@
//// Copyright (C) 2026 Fluxer Contributors
////
//// This file is part of Fluxer.
////
//// Fluxer 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.
////
//// Fluxer 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 Fluxer. If not, see <https://www.gnu.org/licenses/>.
import gleeunit
pub fn main() {
gleeunit.main()
}

View File

@@ -0,0 +1,142 @@
//// Copyright (C) 2026 Fluxer Contributors
////
//// This file is part of Fluxer.
////
//// Fluxer 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.
////
//// Fluxer 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 Fluxer. If not, see <https://www.gnu.org/licenses/>.
import fluxer_marketing/geoip
import gleam/list
import gleam/string
import gleeunit
import gleeunit/should
pub fn main() {
gleeunit.main()
}
fn gh(headers: List(#(String, String))) -> fn(String) -> Result(String, Nil) {
fn(name) {
let lname = string.lowercase(name)
let found =
list.find(headers, fn(pair) {
let #(k, _) = pair
string.lowercase(k) == lname
})
case found {
Ok(#(_, v)) -> Ok(v)
Error(_) -> Error(Nil)
}
}
}
fn gh_empty() -> fn(String) -> Result(String, Nil) {
fn(_) { Error(Nil) }
}
fn http_ok(body: String) -> fn(String) -> Result(String, Nil) {
fn(_url) { Ok(body) }
}
fn http_err() -> fn(String) -> Result(String, Nil) {
fn(_url) { Error(Nil) }
}
pub fn no_host_defaults_to_us_test() {
let cc = geoip.country_code_core(gh_empty(), "", http_ok("SE"))
cc |> should.equal("US")
}
pub fn missing_ip_defaults_to_us_test() {
let cc = geoip.country_code_core(gh_empty(), "geoip:8080", http_ok("SE"))
cc |> should.equal("US")
}
pub fn invalid_ip_defaults_to_us_test() {
let cc =
geoip.country_code_core(
gh([#("x-forwarded-for", "not_an_ip")]),
"geoip:8080",
http_ok("SE"),
)
cc |> should.equal("US")
}
pub fn ipv4_success_uppercases_and_validates_test() {
let cc =
geoip.country_code_core(
gh([#("x-forwarded-for", "8.8.8.8")]),
"geoip:8080",
http_ok("se"),
)
cc |> should.equal("SE")
}
pub fn ipv6_bracketed_success_test() {
let cc =
geoip.country_code_core(
gh([#("x-forwarded-for", "[2001:db8::1]")]),
"geoip:8080",
http_ok("de"),
)
cc |> should.equal("DE")
}
pub fn multiple_xff_uses_first_token_test() {
let cc =
geoip.country_code_core(
gh([#("x-forwarded-for", "1.1.1.1, 8.8.8.8")]),
"geoip:8080",
http_ok("gb"),
)
cc |> should.equal("GB")
}
pub fn http_error_falls_back_test() {
let cc =
geoip.country_code_core(
gh([#("x-forwarded-for", "8.8.4.4")]),
"geoip:8080",
http_err(),
)
cc |> should.equal("US")
}
pub fn invalid_body_falls_back_test() {
let cc =
geoip.country_code_core(
gh([#("x-forwarded-for", "8.8.4.4")]),
"geoip:8080",
http_ok("USA"),
)
cc |> should.equal("US")
}
pub fn strip_brackets_helper_test() {
geoip.strip_brackets("[::1]") |> should.equal("::1")
geoip.strip_brackets("127.0.0.1") |> should.equal("127.0.0.1")
}
pub fn percent_encode_ip_helper_test() {
geoip.percent_encode_ip("2001:db8::1") |> should.equal("2001%3Adb8%3A%3A1")
geoip.percent_encode_ip("100% legit") |> should.equal("100%25%20legit")
}
pub fn is_ascii_upper_alpha2_helper_test() {
geoip.is_ascii_upper_alpha2("US") |> should.equal(True)
geoip.is_ascii_upper_alpha2("uS") |> should.equal(False)
geoip.is_ascii_upper_alpha2("USA") |> should.equal(False)
geoip.is_ascii_upper_alpha2("") |> should.equal(False)
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,42 @@
//// Copyright (C) 2026 Fluxer Contributors
////
//// This file is part of Fluxer.
////
//// Fluxer 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.
////
//// Fluxer 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 Fluxer. If not, see <https://www.gnu.org/licenses/>.
import fluxer_marketing/locale
import fluxer_marketing/router
import gleeunit
import gleeunit/should
pub fn main() {
gleeunit.main()
}
pub fn update_locale_in_article_path_rebuilds_slug_test() {
let path = "/help/en-us/articles/1445730947679911936-requesting-data-deletion"
router.update_locale_in_path(path, locale.Ar)
|> should.equal("/help/ar/articles/1445730947679911936-طلب-حذف-البيانات")
}
pub fn update_locale_in_article_path_keeps_extra_segments_test() {
let path =
"/help/en-us/articles/1445730947679911936-requesting-data-deletion/extra"
router.update_locale_in_path(path, locale.Ar)
|> should.equal(
"/help/ar/articles/1445730947679911936-طلب-حذف-البيانات/extra",
)
}