Gerade nicht unterwegs
Nächste Fahrt 2022
Fahrplan ist noch nicht bekannt.
From 0bcabe1c4b1dd74af233674dfa6c6ec3011ce2c0 Mon Sep 17 00:00:00 2001 From: stuebinm Date: Tue, 18 Jan 2022 09:43:24 +0100 Subject: restructuring directories --- chaski/services/VaaS/.gitignore | 1 + chaski/services/VaaS/CHANGELOG.md | 5 ++ chaski/services/VaaS/app/Main.hs | 58 ++++++++++++ chaski/services/VaaS/default.nix | 30 +++++++ chaski/services/VaaS/haskell.cabal | 35 ++++++++ chaski/services/VaaS/index.html | 46 ++++++++++ chaski/services/geolocation.nix | 6 ++ chaski/services/gtfs.nix | 38 ++++++++ chaski/services/jitsi.nix | 59 ++++++++++++ chaski/services/uplcg.nix | 23 +++++ chaski/services/woitb.nix | 32 +++++++ chaski/services/woitb/index.html | 124 +++++++++++++++++++++++++ chaski/services/woitb/info.html | 180 +++++++++++++++++++++++++++++++++++++ 13 files changed, 637 insertions(+) create mode 100644 chaski/services/VaaS/.gitignore create mode 100644 chaski/services/VaaS/CHANGELOG.md create mode 100644 chaski/services/VaaS/app/Main.hs create mode 100644 chaski/services/VaaS/default.nix create mode 100644 chaski/services/VaaS/haskell.cabal create mode 100644 chaski/services/VaaS/index.html create mode 100644 chaski/services/geolocation.nix create mode 100644 chaski/services/gtfs.nix create mode 100644 chaski/services/jitsi.nix create mode 100644 chaski/services/uplcg.nix create mode 100644 chaski/services/woitb.nix create mode 100644 chaski/services/woitb/index.html create mode 100644 chaski/services/woitb/info.html (limited to 'chaski/services') diff --git a/chaski/services/VaaS/.gitignore b/chaski/services/VaaS/.gitignore new file mode 100644 index 0000000..b5e3679 --- /dev/null +++ b/chaski/services/VaaS/.gitignore @@ -0,0 +1 @@ +dist-newstyle/* diff --git a/chaski/services/VaaS/CHANGELOG.md b/chaski/services/VaaS/CHANGELOG.md new file mode 100644 index 0000000..500a0d0 --- /dev/null +++ b/chaski/services/VaaS/CHANGELOG.md @@ -0,0 +1,5 @@ +# Revision history for haskell + +## 0.1.0.0 -- YYYY-mm-dd + +* First version. Released on an unsuspecting world. diff --git a/chaski/services/VaaS/app/Main.hs b/chaski/services/VaaS/app/Main.hs new file mode 100644 index 0000000..b5697d7 --- /dev/null +++ b/chaski/services/VaaS/app/Main.hs @@ -0,0 +1,58 @@ +{-# LANGUAGE LambdaCase #-} +{-# LANGUAGE OverloadedStrings #-} + +module Main where + +import Control.Exception (try) +import Control.Exception.Base (handle) +import qualified Data.ByteString as BS +import Data.ByteString.Base32 +import qualified Data.ByteString.Char8 as C8 +import qualified Data.ByteString.Lazy as LB +import Data.Maybe (mapMaybe) +import Network.HTTP.Client (httpLbs, newManager, parseRequest, + responseBody) +import Network.HTTP.Client.TLS +import Network.HTTP.Types +import Network.Wai +import Network.Wai.Handler.Warp (run) +import qualified System.Environment as SE +import System.Process + +simpleResponse = responseLBS status200 [("Content-Type", "text/plain")] + +simpleError = responseLBS status400 [("Content-Type", "text/plain")] + +serveFile filename = do + content <- LB.readFile filename + pure $ responseLBS status200 [("Content-Type", "text/html")] content + +app :: FilePath -> FilePath -> Application +app validator index req respond = + case requestMethod req of + "GET" -> case pathInfo req of + [] -> serveFile index >>= respond + ["validate"] -> do + let gtfsuri = head $ mapMaybe (\case { ("gtfs",a) -> Just a; _ -> Nothing }) $ queryString req + putStrLn $ "uri is " <> show gtfsuri + case gtfsuri of + Just uri -> do + man <- newManager tlsManagerSettings + request <- parseRequest $ C8.unpack uri + gtfs <- httpLbs request man + let filename = "/tmp/" <> C8.unpack (encodeBase32' uri) <> ".zip" + LB.writeFile filename (responseBody gtfs) + readProcessWithExitCode "python" [validator,"-n", filename, "--output", "/tmp/gtfs-validated.html"] "" + + serveFile "/tmp/gtfs-validated.html" >>= respond + + Nothing -> respond $ simpleError "missing gtfs parameter" + _ -> respond $ simpleError "unknown path" + _ -> respond $ simpleError "invalid reqeust method" + +main :: IO () +main = do + args <- SE.getArgs + let validator = head args + putStrLn "http://localhost:7000/" + run 7000 $ app validator (args!!1) diff --git a/chaski/services/VaaS/default.nix b/chaski/services/VaaS/default.nix new file mode 100644 index 0000000..427270c --- /dev/null +++ b/chaski/services/VaaS/default.nix @@ -0,0 +1,30 @@ +{ pkgs, compiler ? "default", doBenchmark ? false }: + +let + + inherit pkgs; + + f = { mkDerivation, base, base32, bytestring, http-client + , http-client-tls, http-types, lib, process, wai, warp + }: + mkDerivation { + pname = "VaaS"; + version = "0.1.0.0"; + src = ./.; + isLibrary = false; + isExecutable = true; + executableHaskellDepends = [ + base base32 bytestring http-client http-client-tls http-types + process wai warp + ]; + license = "unknown"; + hydraPlatforms = lib.platforms.none; + }; + + haskellPackages = if compiler == "default" + then pkgs.haskellPackages + else pkgs.haskell.packages.${compiler}; + + variant = if doBenchmark then pkgs.haskell.lib.doBenchmark else pkgs.lib.id; +in + variant (haskellPackages.callPackage f {}) diff --git a/chaski/services/VaaS/haskell.cabal b/chaski/services/VaaS/haskell.cabal new file mode 100644 index 0000000..262b65f --- /dev/null +++ b/chaski/services/VaaS/haskell.cabal @@ -0,0 +1,35 @@ +cabal-version: 2.4 +name: VaaS +version: 0.1.0.0 + +-- A short (one-line) description of the package. +-- synopsis: + +-- A longer description of the package. +-- description: + +-- A URL where users can report bugs. +-- bug-reports: + +-- The license under which the package is released. +-- license: +author: stuebinm +maintainer: stuebinm@disroot.org + +-- A copyright notice. +-- copyright: +-- category: +extra-source-files: CHANGELOG.md + +executable VaaS + main-is: Main.hs + + -- Modules included in this executable, other than Main. + -- other-modules: + + -- LANGUAGE extensions used by modules in this package. + -- other-extensions: + build-depends: base ^>=4.14.1.0, wai, warp, http-types, bytestring, process, + http-client, http-client-tls, base32 + hs-source-dirs: app + default-language: Haskell2010 diff --git a/chaski/services/VaaS/index.html b/chaski/services/VaaS/index.html new file mode 100644 index 0000000..a7f59e0 --- /dev/null +++ b/chaski/services/VaaS/index.html @@ -0,0 +1,46 @@ + + +
+ + ++ This runs the validator contained in the + transitfeed + git repository + . +
+ +Paste the url to your GTFS zip below
+ + + + + + + diff --git a/chaski/services/geolocation.nix b/chaski/services/geolocation.nix new file mode 100644 index 0000000..9fe0973 --- /dev/null +++ b/chaski/services/geolocation.nix @@ -0,0 +1,6 @@ +{ config, lib, pkgs, ... }: + +{ + services.nginx.virtualHosts."ilztal.live".locations."/geolocation".root = + ../ilztal.live; +} diff --git a/chaski/services/gtfs.nix b/chaski/services/gtfs.nix new file mode 100644 index 0000000..61837a1 --- /dev/null +++ b/chaski/services/gtfs.nix @@ -0,0 +1,38 @@ +{ config, lib, pkgs, ... }: + +let + vaas = import ./VaaS/default.nix {inherit pkgs; }; + + transitfeed = pkgs.fetchFromGitHub { + owner = "google"; + repo = "transitfeed"; + rev = "d727e97cb66ac2ca2d699a382ea1d449ee26c2a1"; + sha256 = "0kmcmdja6h7gzvi40c9qfzxh6qwv5184g2rgpqx5rhj4ql9ini3h"; + }; + + index = pkgs.copyPathToStore ./VaaS/index.html; +in +{ + systemd.services.vaas = { + enable = true; + wantedBy = [ "multi-user.target" ]; + after = [ "network.target" ]; + description = "GTFS feed validator as a service"; + path = [ pkgs.python2 pkgs.python2Packages.pytz pkgs.python2Packages.enum34 ]; + serviceConfig = { + ExecStart = "${vaas}/bin/VaaS ${transitfeed}/feedvalidator.py ${index}"; + Restart = "always"; + PrivateTmp = "true"; + PrivateDevices = "true"; + ProtectSystem = "strict"; + ReadWritePaths = [ "/tmp" ]; + }; + + }; + + services.nginx.virtualHosts."gtfs.stuebinm.eu" = { + enableACME = true; + forceSSL = true; + locations."/".proxyPass = "http://localhost:7000"; + }; +} diff --git a/chaski/services/jitsi.nix b/chaski/services/jitsi.nix new file mode 100644 index 0000000..d6f398b --- /dev/null +++ b/chaski/services/jitsi.nix @@ -0,0 +1,59 @@ +{config, pkgs, ...}: + +with pkgs.luaPackages; +with pkgs; +let extraLua = import ../../../../playground/jitsi/test.nix; +in + +{ + services.jitsi-meet = { + enable = true; + hostName = "jitsi.stuebinm.eu"; + config = { + enableWelcomePage = true; + prejoinPageEnabled = true; + }; + interfaceConfig = { + SHOW_JITSI_WATERMARK = false; + SHOW_WATERMARK_FOR_GUESTS = false; + }; + }; + services.jitsi-videobridge.openFirewall = true; + + services.nginx.virtualHosts."api.jitsi.stuebinm.eu" = { + locations."/room-size" = { + proxyPass = pkgs.lib.mkForce + "http://jitsi.stuebinm.eu:5280/room-size?$args&domain=jitsi.stuebinm.eu"; + + extraConfig = '' + add_header Access-Control-Allow-Origin *; + ''; + }; + locations."/room-list" = { + proxyPass = "http://jitsi.stuebinm.eu:5280/room-list?domain=jitsi.stuebinm.eu"; + extraConfig = '' + add_header Access-Control-Allow-Origin *; + ''; + }; + locations."/dashboard/".root = + pkgs.copyPathToStore ../../../../playground/jitsi/html; + + enableACME = true; + forceSSL = true; + }; + + services.nginx.recommendedProxySettings = false; + + services.prosody = { + #extraModules = [ "muc_size2" ]; + extraModules = [ "jitsi_bundled" ]; + extraPluginPaths = [ + (pkgs.copyPathToStore ../../../../playground/jitsi/plugins) + ]; + package = pkgs.prosody.override { + withExtraLibs = with extraLua; [ basexx luajwtjitsi net-url ]; + }; + }; + + +} diff --git a/chaski/services/uplcg.nix b/chaski/services/uplcg.nix new file mode 100644 index 0000000..5605046 --- /dev/null +++ b/chaski/services/uplcg.nix @@ -0,0 +1,23 @@ +{ config, lib, pkgs, inputs, ... }: + +{ + imports = [ + "${inputs.uplcg.outPath}/module.nix" + ]; + + services.uplcg = { + enable = true; + port = 9080; + domain = "0.0.0.0"; + }; + + services.nginx.enable = true; + services.nginx.virtualHosts."cards.stuebinm.eu" = { + locations."/" = { + proxyPass = "http://localhost:9080"; + proxyWebsockets = true; + }; + enableACME = true; + forceSSL = true; + }; +} diff --git a/chaski/services/woitb.nix b/chaski/services/woitb.nix new file mode 100644 index 0000000..0c50617 --- /dev/null +++ b/chaski/services/woitb.nix @@ -0,0 +1,32 @@ +{ config, lib, pkgs, inputs, ... }: + +let + #sources = ../../nix/sources.nix; + sources = /home/stuebinm/Dokumente/utils/playground/ilztal/server; +in +{ + # systemd.services.woitb = { + # enable = true; + # description = "wo ist die ilztalbahn?"; + # wantedBy = [ "multi-user.target" ]; + # serviceConfig.type = "simple"; + # script = "${import sources}/bin/woitb"; + # }; + + services.nginx.enable = true; + services.nginx.virtualHosts."ilztal.live" = { + enableACME = true; + forceSSL = true; + locations."/".root = pkgs.copyPathToStore ./woitb; + + # locations."/upnext".proxyPass = "http://localhost:8000"; + # locations."/geoloc".proxyPass = "http://localhost:8000"; + }; + + services.nginx.virtualHosts."track.ilztal.live" = { + enableACME = true; + forceSSL = true; + locations."/".root = inputs.tracktrain; + }; + +} diff --git a/chaski/services/woitb/index.html b/chaski/services/woitb/index.html new file mode 100644 index 0000000..8d08826 --- /dev/null +++ b/chaski/services/woitb/index.html @@ -0,0 +1,124 @@ + + + + + +(es gibt eh nur eine)
+ +Fahrplan ist noch nicht bekannt.
Andere Abfahrten ab Passau via marudor.de | via Iris der DB
+ +(Diese Seite also known as "oh, die Ilztalbahn hat ja Open Data 😍" – Weitere Infos)
++ Diese Webseite zeigt den Fahrplan der Ilztalbahn an, + und macht sonst nicht viel. Bitte beachtet, dass diese Seite nicht von der Ilztalbahn GmbH, + dem Förderverein o.ä. betrieben wird, sondern nur ein privates Projekt einer einzelnen Person + ohne jede Verfügbarkeitsgarantie ist. +
+ ++ Die Ilztalbahn bietet ihren Fahrplan im offenen Standard GTFS + an. Weil GTFS an einigen Stellen ein manchmal schwer zu benutzender Standard ist (und nicht + jeder Besuch dieser Webseite einen Aufruf des GTFS der Ilztalbahn triggern muss), hängt noch + ein kleiner Server dazwischen der die relevanten Teile in JSON übersetzt. +
++ Der Fahrplan ist jeweils für einen ganzen Sommer gültig, und wird auch währenddessen + (soweit ich sehen kann) nicht verändert oder aktualisiert — es gibt also keinerlei Garantie, + dass die Daten hier korrekt sind! +
+ ++ Aktuell nicht. Wenn ihr die Webseite im Browser offen lasst, sollte sie sich aber auch offline + noch automatisch aktualisieren. +
+ ++ Leider nein. Es gibt für einige Fahrten der Ilztalbahn zwar Echtzeitdaten von der DB, diese + sind aber nicht im Datensatz der Ilztalbahn enthalten. Vielleicht kommen die hier noch + irgendwann mit rein, solange könnt ihr sie (falls es sie gibt) bei + marudor.de anschauen. +
+ ++ Ja klar, hier: git-Repository +
+ ++ Diese Seite läuft aktuell auf einer kleinen vps bei Hetzner, + geloggt werden aktuell nur Zugriffe, aber keine IP-Adressen. +
+ ++ Auch nur so ein Mensch im Internet. Falls ihr wollt könnt ihr + auf meinem Pleroma vorbeischauen. +
+ ++ Schreibt mich über Pleroma an, vielleicht habe ich Zeit und Lust es einzubauen. +
+ ++ Cool! Schick mir gerne nen Patch! (Mail ist im Repository) +
+(Diese Seite also known as "oh, die Ilztalbahn hat ja Open Data 😍" – Weitere Infos)
+