diff options
| author | Leitwolf11 | 2026-11-09 01:18:34 +0300 |
|---|---|---|
| committer | Leitwolf11 | 2026-11-09 01:18:34 +0300 |
| commit | c0bafe9050161ea6ca0c49f54897f908ca16ce84 (patch) | |
| tree | 7496e782c0a82a9ff5ea9b59b85e3607fd7794d6 | |
| parent | 66f3cc196a9b91d471a90e021b12630100181c4a (diff) | |
| parent | 3ac256e69f10a3bb78d394c77d03a88a72261597 (diff) | |
| download | progmaweb-security/cloudflare-real-ip.tar.gz | |
Merge remote-tracking branch 'origin/main' into security/cloudflare-real-ipsecurity/cloudflare-real-ip
| -rw-r--r-- | apps/web/app/ides/layout.tsx | 11 | ||||
| -rw-r--r-- | apps/web/app/ides/page.tsx | 53 | ||||
| -rw-r--r-- | apps/web/app/ides/xide/page.tsx | 93 | ||||
| -rw-r--r-- | apps/web/lib/product-sites.ts | 174 | ||||
| -rw-r--r-- | apps/web/lib/products.ts | 63 | ||||
| -rw-r--r-- | apps/web/lib/sites.ts | 9 | ||||
| -rw-r--r-- | apps/web/proxy.ts | 3 | ||||
| -rw-r--r-- | apps/web/tests/sites.test.mjs | 9 | ||||
| -rw-r--r-- | ops/README.md | 3 | ||||
| -rw-r--r-- | ops/nginx/progmaweb.conf | 50 |
10 files changed, 13 insertions, 455 deletions
diff --git a/apps/web/app/ides/layout.tsx b/apps/web/app/ides/layout.tsx deleted file mode 100644 index 8b1c6b7..0000000 --- a/apps/web/app/ides/layout.tsx +++ /dev/null @@ -1,11 +0,0 @@ -// SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> -// SPDX-License-Identifier: AGPL-3.0-or-later WITH AdditionRef-Progmasoft-Patent-Grant-1.1 - -import type { ReactNode } from "react"; -import "../site.css"; - -export default function IdesLayout({ - children, -}: Readonly<{ children: ReactNode }>) { - return children; -} diff --git a/apps/web/app/ides/page.tsx b/apps/web/app/ides/page.tsx deleted file mode 100644 index 3a832a8..0000000 --- a/apps/web/app/ides/page.tsx +++ /dev/null @@ -1,53 +0,0 @@ -// SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> -// SPDX-License-Identifier: AGPL-3.0-or-later WITH AdditionRef-Progmasoft-Patent-Grant-1.1 - -import type { Metadata } from "next"; -import { Footer } from "@/components/Footer"; -import { SiteHeader } from "@/components/SiteHeader"; -import { getLocale } from "@/lib/locale.server"; -import { forwardArrow } from "@/lib/localization"; -import { getCatalogMessages, products } from "@/lib/products"; -import { getSitesMessages } from "@/lib/product-sites"; - -export async function generateMetadata(): Promise<Metadata> { - const { ides } = getSitesMessages(await getLocale()); - return { - title: ides.title, - description: ides.description, - alternates: { canonical: "https://ides.progmasoft.com/" }, - }; -} - -/** ides.progmasoft.com: the development environments of Progmasoft. */ -export default async function IdesPage() { - const locale = await getLocale(); - const { ides } = getSitesMessages(locale); - const xide = getCatalogMessages(locale).products.xide; - return ( - <div className="pm-page"> - <SiteHeader locale={locale} /> - <main> - <section className="pm-hero"> - <div className="pm-shell pm-product-hero"> - <h1>{ides.title}</h1> - <p className="pm-lede">{ides.description}</p> - </div> - </section> - <section className="pm-section"> - <div className="pm-shell pm-product-grid"> - <a className="pm-card pm-product-card" href="/xide"> - <span className={`pm-accent pm-accent-${products.xide.accent}`} /> - <span className="pm-tag">{xide.category}</span> - <h3>{products.xide.name}</h3> - <p>{xide.tagline}</p> - <span className="pm-more"> - {ides.open} {forwardArrow(locale)} - </span> - </a> - </div> - </section> - </main> - <Footer locale={locale} /> - </div> - ); -} diff --git a/apps/web/app/ides/xide/page.tsx b/apps/web/app/ides/xide/page.tsx deleted file mode 100644 index 86022e0..0000000 --- a/apps/web/app/ides/xide/page.tsx +++ /dev/null @@ -1,93 +0,0 @@ -// SPDX-FileCopyrightText: 2026 Progmasoft <support@progmasoft.com> -// SPDX-License-Identifier: AGPL-3.0-or-later WITH AdditionRef-Progmasoft-Patent-Grant-1.1 - -import type { Metadata } from "next"; -import { Footer } from "@/components/Footer"; -import { SiteHeader } from "@/components/SiteHeader"; -import { getLocale } from "@/lib/locale.server"; -import { products } from "@/lib/products"; -import { getSitesMessages } from "@/lib/product-sites"; - -export async function generateMetadata(): Promise<Metadata> { - const { xide } = getSitesMessages(await getLocale()); - return { - title: `Xide · ${xide.tagline}`, - description: xide.description, - alternates: { canonical: "https://ides.progmasoft.com/xide" }, - }; -} - -/** ides.progmasoft.com/xide: the site of Xide. */ -export default async function XidePage() { - const locale = await getLocale(); - const { xide, common } = getSitesMessages(locale); - return ( - <div className="pm-page"> - <SiteHeader locale={locale} /> - <main> - <section className="pm-hero"> - <div className="pm-shell pm-hero-inner"> - <div> - <p className="eyebrow">{xide.eyebrow}</p> - <h1> - Xide <span>{xide.tagline}</span> - </h1> - <p className="pm-lede">{xide.description}</p> - <div className="pm-actions"> - <a className="button" href={products.xide.source}> - {common.source} - </a> - <a - className="button button-secondary" - href="https://product.progmasoft.com/xide" - > - {common.productPage} - </a> - </div> - </div> - <aside className="pm-aside"> - <span className="pm-tag">{common.status}</span> - <p>{xide.status}</p> - </aside> - </div> - </section> - - <section className="pm-section"> - <div className="pm-shell"> - <div className="pm-heading"> - <h2>{xide.layoutTitle}</h2> - </div> - <div className="pm-bento"> - {xide.layout.map(([title, description]) => ( - <article className="pm-card" key={title}> - <h3>{title}</h3> - <p>{description}</p> - </article> - ))} - </div> - </div> - </section> - - <section className="pm-section pm-section-muted"> - <div className="pm-shell pm-detail"> - <div className="pm-heading"> - <h2>{xide.languagesTitle}</h2> - <p>{xide.languagesDescription}</p> - </div> - <div> - <div className="pm-heading"> - <h2>{xide.architectureTitle}</h2> - </div> - <ul className="pm-features"> - {xide.architecture.map((item) => ( - <li key={item}>{item}</li> - ))} - </ul> - </div> - </div> - </section> - </main> - <Footer locale={locale} /> - </div> - ); -} diff --git a/apps/web/lib/product-sites.ts b/apps/web/lib/product-sites.ts index f88ecda..d6c5af3 100644 --- a/apps/web/lib/product-sites.ts +++ b/apps/web/lib/product-sites.ts @@ -4,9 +4,8 @@ import type { Locale } from "./localization"; /** - * The text of the product sites Progmaweb serves itself: ides.progmasoft.com - * (with Xide at /xide) and catch3.progmasoft.com. The facts follow the - * READMEs and documentation of the product repositories. + * The text of the product site Progmaweb serves itself, catch3.progmasoft.com. + * The facts follow the READMEs and documentation of the product repositories. */ interface SitesMessages { common: { @@ -14,23 +13,6 @@ interface SitesMessages { productPage: string; status: string; }; - ides: { - title: string; - description: string; - open: string; - }; - xide: { - eyebrow: string; - tagline: string; - description: string; - status: string; - layoutTitle: string; - layout: [title: string, description: string][]; - languagesTitle: string; - languagesDescription: string; - architectureTitle: string; - architecture: string[]; - }; catch3: { eyebrow: string; tagline: string; @@ -51,44 +33,6 @@ export const sitesMessages: Record<Locale, SitesMessages> = { productPage: "Product page", status: "Status", }, - ides: { - title: "Progmasoft IDEs", - description: - "Development environments by Progmasoft, built around the Tala tools and the languages next to them.", - open: "Open", - }, - xide: { - eyebrow: "Progmasoft IDEs", - tagline: "The planned IDE for Tala.", - description: - "Xide is an integrated development environment written in Kotlin with Compose Multiplatform. It brings the editor, the project and the Tala compiler's diagnostics into one window.", - status: - "Early work: Xide is not ready for daily use. Today it lays the foundation that keeps the architecture coherent.", - layoutTitle: "A familiar layout", - layout: [ - [ - "Project", - "Open a folder as a tree; directories load one level at a time and symbolic links are never followed.", - ], - [ - "Editor", - "A tab per document, line numbers, a marker on each line with a problem, and no silent closing of modified files.", - ], - [ - "Problems", - "Diagnostics bound to the exact document version that was checked; results that went stale are dropped.", - ], - ], - languagesTitle: "Languages", - languagesDescription: - "Tala, Kotlin, Java, Groovy and Python open, edit and save, with syntax colouring for all five. Checking is connected for Tala: Xide runs talac and reads its structured diagnostics instead of scraping terminal text.", - architectureTitle: "Architecture", - architecture: [ - "Kotlin/JVM components with a Compose Multiplatform desktop interface", - "A minimized Java runtime ships with Xide; no separate JDK to install", - "Extensions are Kotlin/JVM JARs loaded from the extension directory", - ], - }, catch3: { eyebrow: "Progmasoft Catch3", tagline: "C++ testing beyond assertions.", @@ -141,44 +85,6 @@ export const sitesMessages: Record<Locale, SitesMessages> = { productPage: "Produktseite", status: "Status", }, - ides: { - title: "Progmasoft-IDEs", - description: - "Entwicklungsumgebungen von Progmasoft, gebaut um die Tala-Werkzeuge und die Sprachen daneben.", - open: "Öffnen", - }, - xide: { - eyebrow: "Progmasoft-IDEs", - tagline: "Die geplante IDE für Tala.", - description: - "Xide ist eine integrierte Entwicklungsumgebung in Kotlin mit Compose Multiplatform. Sie vereint Editor, Projekt und die Diagnosen des Tala-Compilers in einem Fenster.", - status: - "Frühes Stadium: Xide ist noch nicht für den täglichen Einsatz bereit. Derzeit entsteht das Fundament, das die Architektur zusammenhält.", - layoutTitle: "Eine vertraute Anordnung", - layout: [ - [ - "Projekt", - "Einen Ordner als Baum öffnen; Verzeichnisse laden Ebene für Ebene, symbolischen Links wird nie gefolgt.", - ], - [ - "Editor", - "Ein Tab pro Dokument, Zeilennummern, eine Markierung an jeder Zeile mit einem Problem und kein stilles Schließen geänderter Dateien.", - ], - [ - "Probleme", - "Diagnosen gehören genau zu der geprüften Dokumentversion; veraltete Ergebnisse werden verworfen.", - ], - ], - languagesTitle: "Sprachen", - languagesDescription: - "Tala, Kotlin, Java, Groovy und Python lassen sich öffnen, bearbeiten und speichern, alle fünf mit Syntaxhervorhebung. Die Prüfung ist für Tala angebunden: Xide startet talac und liest seine strukturierten Diagnosen, statt Terminaltext auszuwerten.", - architectureTitle: "Architektur", - architecture: [ - "Kotlin/JVM-Komponenten mit einer Desktop-Oberfläche in Compose Multiplatform", - "Xide bringt eine minimierte Java-Laufzeit mit; kein separates JDK nötig", - "Erweiterungen sind Kotlin/JVM-JARs aus dem Erweiterungsverzeichnis", - ], - }, catch3: { eyebrow: "Progmasoft Catch3", tagline: "C++-Tests jenseits von Assertions.", @@ -231,44 +137,6 @@ export const sitesMessages: Record<Locale, SitesMessages> = { productPage: "Страница продукта", status: "Статус", }, - ides: { - title: "Среды разработки Progmasoft", - description: - "Среды разработки Progmasoft, построенные вокруг инструментов Tala и соседних языков.", - open: "Открыть", - }, - xide: { - eyebrow: "Среды разработки Progmasoft", - tagline: "Будущая среда разработки для Tala.", - description: - "Xide — интегрированная среда разработки на Kotlin и Compose Multiplatform. Она объединяет редактор, проект и диагностику компилятора Tala в одном окне.", - status: - "Ранняя стадия: Xide ещё не готова к повседневной работе. Сейчас закладывается основа, которая сохраняет архитектуру цельной.", - layoutTitle: "Привычная компоновка", - layout: [ - [ - "Проект", - "Папка открывается деревом; каталоги загружаются по одному уровню, по символическим ссылкам переход не выполняется.", - ], - [ - "Редактор", - "Вкладка на каждый документ, номера строк, отметка у каждой строки с проблемой и никакого тихого закрытия изменённых файлов.", - ], - [ - "Проблемы", - "Диагностика привязана к той версии документа, которая проверялась; устаревшие результаты отбрасываются.", - ], - ], - languagesTitle: "Языки", - languagesDescription: - "Tala, Kotlin, Java, Groovy и Python открываются, редактируются и сохраняются, все пять — с подсветкой синтаксиса. Проверка подключена для Tala: Xide запускает talac и читает его структурированную диагностику, а не разбирает текст терминала.", - architectureTitle: "Архитектура", - architecture: [ - "Компоненты на Kotlin/JVM с настольным интерфейсом на Compose Multiplatform", - "Вместе с Xide поставляется минимальная среда Java; отдельный JDK не нужен", - "Расширения — это JAR для Kotlin/JVM из каталога расширений", - ], - }, catch3: { eyebrow: "Progmasoft Catch3", tagline: "Тестирование C++ за пределами утверждений.", @@ -321,44 +189,6 @@ export const sitesMessages: Record<Locale, SitesMessages> = { productPage: "דף המוצר", status: "מצב", }, - ides: { - title: "סביבות הפיתוח של Progmasoft", - description: - "סביבות פיתוח של Progmasoft, שנבנות סביב כלי Tala והשפות שלצידם.", - open: "לפתוח", - }, - xide: { - eyebrow: "סביבות הפיתוח של Progmasoft", - tagline: "סביבת הפיתוח המתוכננת ל־Tala.", - description: - "Xide היא סביבת פיתוח משולבת שנכתבת ב־Kotlin עם Compose Multiplatform. היא מביאה את העורך, הפרויקט והאבחונים של מהדר Tala לחלון אחד.", - status: - "שלב מוקדם: Xide עדיין לא מוכנה לשימוש יומיומי. כרגע נבנה הבסיס ששומר על ארכיטקטורה עקבית.", - layoutTitle: "פריסה מוכרת", - layout: [ - [ - "פרויקט", - "פתיחת תיקייה כעץ; תיקיות נטענות רמה אחר רמה, וקישורים סימבוליים לא נעקבים לעולם.", - ], - [ - "עורך", - "לשונית לכל מסמך, מספרי שורות, סימון בכל שורה עם בעיה, ואין סגירה שקטה של קבצים שהשתנו.", - ], - [ - "בעיות", - "האבחונים קשורים לגרסת המסמך המדויקת שנבדקה; תוצאות שהתיישנו נזרקות.", - ], - ], - languagesTitle: "שפות", - languagesDescription: - "Tala, Kotlin, Java, Groovy ו־Python נפתחות, נערכות ונשמרות, כולן עם צביעת תחביר. הבדיקה מחוברת ל־Tala: Xide מריצה את talac וקוראת את האבחונים המובנים שלו במקום לפענח טקסט מהמסוף.", - architectureTitle: "ארכיטקטורה", - architecture: [ - "רכיבי Kotlin/JVM עם ממשק לשולחן העבודה ב־Compose Multiplatform", - "סביבת Java מצומצמת מגיעה עם Xide; אין צורך להתקין JDK נפרד", - "הרחבות הן קובצי JAR של Kotlin/JVM מתיקיית ההרחבות", - ], - }, catch3: { eyebrow: "Progmasoft Catch3", tagline: "בדיקות C++ מעבר לטענות.", diff --git a/apps/web/lib/products.ts b/apps/web/lib/products.ts index db7a08f..4fe8dfd 100644 --- a/apps/web/lib/products.ts +++ b/apps/web/lib/products.ts @@ -13,7 +13,6 @@ export const productSlugs = [ "talafmt", "talalint", "tazel", - "xide", "catch3", ] as const; export type ProductSlug = (typeof productSlugs)[number]; @@ -62,12 +61,6 @@ export const products: Record<ProductSlug, ProductFacts> = { source: "https://github.com/Progmasoft/tazel", accent: "orange", }, - xide: { - name: "Xide", - site: "https://ides.progmasoft.com/xide", - source: "https://github.com/Progmasoft/xide", - accent: "slate", - }, catch3: { name: "Catch3", site: "https://catch3.progmasoft.com/", @@ -101,7 +94,7 @@ export const catalogMessages: Record<Locale, CatalogMessages> = { "en-US": { metadataTitle: "Products", metadataDescription: - "The products of Progmasoft: the Tala language and its tools, the Xide IDE and the Catch3 testing toolkit.", + "The products of Progmasoft: the Tala language with its tools, and the Catch3 testing toolkit.", eyebrow: "Progmasoft products", title: "Products", description: @@ -172,18 +165,6 @@ export const catalogMessages: Record<Locale, CatalogMessages> = { "Extensible with DSL plugins", ], }, - xide: { - category: "Integrated development environment", - tagline: "The planned IDE for Tala.", - description: - "Xide is the integrated development environment for Tala, written in Kotlin with Compose Multiplatform. It is early work and not yet ready for daily use.", - features: [ - "A desktop shell with a project tree, tabbed editor and problems view", - "Tala, Kotlin, Java, Groovy and Python with syntax colouring", - "Checks Tala files with the structured diagnostics of talac", - "Extensions as Kotlin/JVM JARs", - ], - }, catch3: { category: "Testing toolkit", tagline: "C++ testing beyond assertions.", @@ -201,7 +182,7 @@ export const catalogMessages: Record<Locale, CatalogMessages> = { "de-DE": { metadataTitle: "Produkte", metadataDescription: - "Die Produkte von Progmasoft: die Sprache Tala und ihre Werkzeuge, die IDE Xide und das Testwerkzeug Catch3.", + "Die Produkte von Progmasoft: die Sprache Tala mit ihren Werkzeugen und das Testwerkzeug Catch3.", eyebrow: "Progmasoft-Produkte", title: "Produkte", description: @@ -272,18 +253,6 @@ export const catalogMessages: Record<Locale, CatalogMessages> = { "Erweiterbar mit DSL-Plugins", ], }, - xide: { - category: "Integrierte Entwicklungsumgebung", - tagline: "Die geplante IDE für Tala.", - description: - "Xide ist die integrierte Entwicklungsumgebung für Tala, geschrieben in Kotlin mit Compose Multiplatform. Sie ist in einem frühen Stadium und noch nicht für den täglichen Einsatz bereit.", - features: [ - "Eine Desktop-Oberfläche mit Projektbaum, Editor-Tabs und Problemansicht", - "Tala, Kotlin, Java, Groovy und Python mit Syntaxhervorhebung", - "Prüft Tala-Dateien mit den strukturierten Diagnosen von talac", - "Erweiterungen als Kotlin/JVM-JARs", - ], - }, catch3: { category: "Testwerkzeug", tagline: "C++-Tests jenseits von Assertions.", @@ -301,7 +270,7 @@ export const catalogMessages: Record<Locale, CatalogMessages> = { "ru-RU": { metadataTitle: "Продукты", metadataDescription: - "Продукты Progmasoft: язык Tala и его инструменты, среда разработки Xide и набор для тестирования Catch3.", + "Продукты Progmasoft: язык Tala с его инструментами и набор для тестирования Catch3.", eyebrow: "Продукты Progmasoft", title: "Продукты", description: @@ -372,18 +341,6 @@ export const catalogMessages: Record<Locale, CatalogMessages> = { "Расширяется DSL-плагинами", ], }, - xide: { - category: "Интегрированная среда разработки", - tagline: "Будущая среда разработки для Tala.", - description: - "Xide — интегрированная среда разработки для Tala на Kotlin и Compose Multiplatform. Это ранняя стадия, ещё не готовая к повседневной работе.", - features: [ - "Настольная оболочка с деревом проекта, вкладками редактора и окном проблем", - "Tala, Kotlin, Java, Groovy и Python с подсветкой синтаксиса", - "Проверка файлов Tala через структурированную диагностику talac", - "Расширения в виде JAR для Kotlin/JVM", - ], - }, catch3: { category: "Набор для тестирования", tagline: "Тестирование C++ за пределами утверждений.", @@ -401,7 +358,7 @@ export const catalogMessages: Record<Locale, CatalogMessages> = { "he-IL": { metadataTitle: "מוצרים", metadataDescription: - "המוצרים של Progmasoft: שפת Tala והכלים שלה, סביבת הפיתוח Xide וערכת הבדיקות Catch3.", + "המוצרים של Progmasoft: שפת Tala עם הכלים שלה וערכת הבדיקות Catch3.", eyebrow: "המוצרים של Progmasoft", title: "מוצרים", description: @@ -472,18 +429,6 @@ export const catalogMessages: Record<Locale, CatalogMessages> = { "ניתן להרחבה בתוספי DSL", ], }, - xide: { - category: "סביבת פיתוח משולבת", - tagline: "סביבת הפיתוח המתוכננת ל־Tala.", - description: - "Xide היא סביבת הפיתוח המשולבת ל־Tala, שנכתבת ב־Kotlin עם Compose Multiplatform. היא בשלב מוקדם ועדיין לא מוכנה לשימוש יומיומי.", - features: [ - "מעטפת לשולחן העבודה עם עץ פרויקט, לשוניות עורך ותצוגת בעיות", - "Tala, Kotlin, Java, Groovy ו־Python עם צביעת תחביר", - "בודקת קובצי Tala עם האבחונים המובנים של talac", - "הרחבות כקובצי JAR של Kotlin/JVM", - ], - }, catch3: { category: "ערכת בדיקות", tagline: "בדיקות C++ מעבר לטענות.", diff --git a/apps/web/lib/sites.ts b/apps/web/lib/sites.ts index bcfc358..9f456fc 100644 --- a/apps/web/lib/sites.ts +++ b/apps/web/lib/sites.ts @@ -23,15 +23,6 @@ export function productRoute(pathname: string): string | null { : null; } -/** The public pages of ides.progmasoft.com: the list and Xide. */ -export function idesRoute(pathname: string): string | null { - const path = trimmed(pathname); - if (path === "/") { - return "/ides"; - } - return path === "/xide" ? "/ides/xide" : null; -} - /** The public page of catch3.progmasoft.com. */ export function catch3Route(pathname: string): string | null { return trimmed(pathname) === "/" ? "/catch3" : null; diff --git a/apps/web/proxy.ts b/apps/web/proxy.ts index 4c09ce4..17a34da 100644 --- a/apps/web/proxy.ts +++ b/apps/web/proxy.ts @@ -10,7 +10,7 @@ import { requestHost, } from "@/lib/localization"; import { authorizeRoute, consoleRoute, issuerRoute } from "@/lib/credentials"; -import { catch3Route, idesRoute, productRoute } from "@/lib/sites"; +import { catch3Route, productRoute } from "@/lib/sites"; import { contentSecurityPolicy, createNonce, @@ -57,7 +57,6 @@ const ownSites: OwnSite[] = [ route: productRoute, api: false, }, - { hosts: hostsOf("ides"), root: "/ides", route: idesRoute, api: false }, { hosts: hostsOf("catch3"), root: "/catch3", route: catch3Route, api: false }, ]; diff --git a/apps/web/tests/sites.test.mjs b/apps/web/tests/sites.test.mjs index 7aa2b5a..c366c11 100644 --- a/apps/web/tests/sites.test.mjs +++ b/apps/web/tests/sites.test.mjs @@ -12,7 +12,7 @@ import { productSlugs, products, } from "../lib/products.ts"; -import { catch3Route, idesRoute, productRoute } from "../lib/sites.ts"; +import { catch3Route, productRoute } from "../lib/sites.ts"; function shape(value) { if (Array.isArray(value)) { @@ -40,7 +40,7 @@ test("every language has the same home, catalog and product-site text", () => { test("the catalog lists the products the user named, each with a site", () => { assert.deepEqual( [...productSlugs], - ["tala-lang", "talac", "talafmt", "talalint", "tazel", "xide", "catch3"], + ["tala-lang", "talac", "talafmt", "talalint", "tazel", "catch3"], ); for (const slug of productSlugs) { assert.match(products[slug].site, /^https:\/\//, slug); @@ -50,9 +50,9 @@ test("the catalog lists the products the user named, each with a site", () => { slug, ); } - assert.equal(products.xide.site, "https://ides.progmasoft.com/xide"); assert.equal(products.catch3.site, "https://catch3.progmasoft.com/"); assert.equal(isProductSlug("viget"), false); + assert.equal(isProductSlug("xide"), false); }); test("the home page names areas, not products", () => { @@ -73,9 +73,6 @@ test("the product hosts map to their internal routes", () => { assert.equal(productRoute("/tala-lang/"), "/products/tala-lang"); assert.equal(productRoute("/talac/extra"), null); assert.equal(productRoute("/../x"), null); - assert.equal(idesRoute("/"), "/ides"); - assert.equal(idesRoute("/xide"), "/ides/xide"); - assert.equal(idesRoute("/other"), null); assert.equal(catch3Route("/"), "/catch3"); assert.equal(catch3Route("/docs"), null); }); diff --git a/ops/README.md b/ops/README.md index 554f085..0457499 100644 --- a/ops/README.md +++ b/ops/README.md @@ -192,8 +192,7 @@ clients still hold; replacing the encryption key invalidates every access token, token, so every application has to ask again. Back up both files with the database. The certificate of `progmasoft.com` must name `credentials.progmasoft.com`, `authorize.progmasoft.com`, -`console.progmasoft.com`, `product.progmasoft.com`, `ides.progmasoft.com` and `catch3.progmasoft.com` as well; expand -it with certbot's webroot plugin before the vhosts are enabled, then check +`console.progmasoft.com`, `product.progmasoft.com` and `catch3.progmasoft.com` as well; expand it with certbot's webroot plugin before the vhosts are enabled, then check `/.well-known/openid-configuration`, the sign-in page and the console from outside. ## Reserved accounts diff --git a/ops/nginx/progmaweb.conf b/ops/nginx/progmaweb.conf index daa81ef..f752b80 100644 --- a/ops/nginx/progmaweb.conf +++ b/ops/nginx/progmaweb.conf @@ -418,9 +418,8 @@ server { } } -# The product catalog (product.progmasoft.com) and the product sites Progmaweb -# serves itself (ides.progmasoft.com, catch3.progmasoft.com): pages of the -# Next.js site only. +# The product catalog (product.progmasoft.com) and the product site Progmaweb +# serves itself (catch3.progmasoft.com): pages of the Next.js site only. server { listen 80; listen [::]:80; @@ -469,51 +468,6 @@ server { server { listen 80; listen [::]:80; - server_name ides.progmasoft.com; - - location ^~ /.well-known/acme-challenge/ { - root /var/lib/letsencrypt; - default_type text/plain; - } - - location / { - return 308 https://ides.progmasoft.com$request_uri; - } -} - -server { - listen 443 ssl; - listen [::]:443 ssl; - http2 on; - server_name ides.progmasoft.com; - - ssl_certificate /etc/letsencrypt/live/progmasoft.com/fullchain.pem; - ssl_certificate_key /etc/letsencrypt/live/progmasoft.com/privkey.pem; - include /etc/letsencrypt/options-ssl-nginx.conf; - - client_max_body_size 1m; - - add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; - add_header X-Content-Type-Options "nosniff" always; - add_header X-Frame-Options "DENY" always; - add_header Referrer-Policy "strict-origin-when-cross-origin" always; - add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always; - - location / { - proxy_pass http://127.0.0.1:3010; - proxy_http_version 1.1; - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Forwarded-Host $host; - proxy_read_timeout 60s; - } -} - -server { - listen 80; - listen [::]:80; server_name catch3.progmasoft.com; location ^~ /.well-known/acme-challenge/ { |