summaryrefslogtreecommitdiff
path: root/chaski/services
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--chaski/services/VaaS/.gitignore1
-rw-r--r--chaski/services/VaaS/CHANGELOG.md5
-rw-r--r--chaski/services/VaaS/app/Main.hs58
-rw-r--r--chaski/services/VaaS/default.nix30
-rw-r--r--chaski/services/VaaS/haskell.cabal35
-rw-r--r--chaski/services/VaaS/index.html46
-rw-r--r--chaski/services/gtfs.nix38
-rw-r--r--chaski/services/tracktrain.nix30
8 files changed, 30 insertions, 213 deletions
diff --git a/chaski/services/VaaS/.gitignore b/chaski/services/VaaS/.gitignore
deleted file mode 100644
index b5e3679..0000000
--- a/chaski/services/VaaS/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-dist-newstyle/*
diff --git a/chaski/services/VaaS/CHANGELOG.md b/chaski/services/VaaS/CHANGELOG.md
deleted file mode 100644
index 500a0d0..0000000
--- a/chaski/services/VaaS/CHANGELOG.md
+++ /dev/null
@@ -1,5 +0,0 @@
-# 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
deleted file mode 100644
index b5697d7..0000000
--- a/chaski/services/VaaS/app/Main.hs
+++ /dev/null
@@ -1,58 +0,0 @@
-{-# 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
deleted file mode 100644
index 427270c..0000000
--- a/chaski/services/VaaS/default.nix
+++ /dev/null
@@ -1,30 +0,0 @@
-{ 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
deleted file mode 100644
index 262b65f..0000000
--- a/chaski/services/VaaS/haskell.cabal
+++ /dev/null
@@ -1,35 +0,0 @@
-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
deleted file mode 100644
index a7f59e0..0000000
--- a/chaski/services/VaaS/index.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!doctype html>
-<html class="no-js" lang="">
- <head>
- <meta charset="utf-8">
- <meta http-equiv="x-ua-compatible" content="ie=edge">
- <title>GTFS Validator</title>
- <meta name="description" content="">
- <meta name="viewport" content="width=device-width, initial-scale=1">
-
- <link rel="apple-touch-icon" href="/apple-touch-icon.png">
- <!-- Place favicon.ico in the root directory -->
-
- </head>
- <body>
- <!--[if lt IE 8]>
- <p class="browserupgrade">
- You are using an <strong>outdated</strong> browser. Please
- <a href="http://browsehappy.com/">upgrade your browser</a> to improve
- your experience.
- </p>
- <![endif]-->
-
- <h1>GTFS Validator</h1>
- <p>
- This runs the validator contained in the
- <a href="https://github.com/google/transitfeed">transitfeed
- git repository
- </a>.
- </p>
-
- <p>Paste the url to your GTFS zip below</p>
-
- <input id="url">
- <button id="submit">Validate</button>
-
- <script>
- let submit = document.getElementById("submit");
- let url = document.getElementById("url");
-
- submit.onclick = () => {
- window.location =
- "/validate?gtfs=" + url.value
- }
- </script>
- </body>
-</html>
diff --git a/chaski/services/gtfs.nix b/chaski/services/gtfs.nix
deleted file mode 100644
index 61837a1..0000000
--- a/chaski/services/gtfs.nix
+++ /dev/null
@@ -1,38 +0,0 @@
-{ 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/tracktrain.nix b/chaski/services/tracktrain.nix
new file mode 100644
index 0000000..6f9acb9
--- /dev/null
+++ b/chaski/services/tracktrain.nix
@@ -0,0 +1,30 @@
+{ config, lib, pkgs, inputs, ... }:
+
+{
+ services.nginx.virtualHosts."tracktrain.stuebinm.eu" = {
+ locations."/" = {
+ proxyPass = "http://localhost:4000";
+ proxyWebsockets = true;
+ };
+ enableACME = true;
+ forceSSL = true;
+ };
+
+ networking.firewall.allowedTCPPorts = [ 443 ];
+
+ systemd.services.tracktrain = {
+ enable = true;
+
+ description = "tracks trains, hopefully";
+ wantedBy = [ "multi-user.target" ];
+ after = [ "network.target" ];
+ serviceConfig.Type = "simple";
+ path = [ pkgs.wget ];
+ script = ''
+ cd /tmp
+ wget "https://ilztalbahn.eu/wp-content/uploads/2020/07/gtfs.zip"
+ ${import inputs.tracktrain {nixpkgs = pkgs;}}/bin/haskell-gtfs
+ '';
+ startAt = "daily";
+ };
+}