From 1017d5a363b2eeafe8c827076e94e9cc20a6e166 Mon Sep 17 00:00:00 2001 From: Lucy Cifferello Date: Thu, 8 Oct 2020 15:35:45 -0600 Subject: [PATCH 1/6] correct static bin path --- config/settings.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/settings.yml b/config/settings.yml index f2222e1..677319d 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -32,7 +32,7 @@ resources-path: "_env:RESOURCES_PATH:/var/www/html/resources" ssl-path: "_env:SSL_PATH:/var/ssl" registry-hostname: "_env:REGISTRY_HOSTNAME:registry.start9labs.com" tor-port: "_env:TOR_PORT:447" -static-bin-dir: "_env:STATIC_BIN:/usr/local/bin/" +static-bin-dir: "_env:STATIC_BIN:/usr/local/bin" database: database: "_env:PG_DATABASE:start9_registry" From f7482cbc76c8c549d9996270ff0285b6c257f66e Mon Sep 17 00:00:00 2001 From: Lucy Cifferello Date: Fri, 9 Oct 2020 14:16:57 -0600 Subject: [PATCH 2/6] refactor config/manifest endpoint path with appId --- config/routes | 4 ++-- config/ssl/certificate.pem | 16 ---------------- config/ssl/key.pem | 27 --------------------------- src/Foundation.hs | 2 ++ src/Handler/Apps.hs | 16 ++++++++-------- src/Lib/External/AppMgr.hs | 14 +++++++------- 6 files changed, 19 insertions(+), 60 deletions(-) diff --git a/config/routes b/config/routes index 4a2d706..9f3d082 100644 --- a/config/routes +++ b/config/routes @@ -1,8 +1,8 @@ /apps AppsManifestR GET -- get current apps listing -/apps/#S9PK/#Text/manifest AppManifestR GET -- get app manifest from appmgr -/apps/#S9PK/#Text/config AppConfigR GET -- get app config from appmgr +/apps/#AppIdentifier/#Text/manifest AppManifestR GET -- get app manifest from appmgr +/apps/#AppIdentifier/#Text/config AppConfigR GET -- get app config from appmgr /version VersionR GET diff --git a/config/ssl/certificate.pem b/config/ssl/certificate.pem index f42e8a2..e69de29 100644 --- a/config/ssl/certificate.pem +++ b/config/ssl/certificate.pem @@ -1,16 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICljCCAX4CCQCUVP/RJvKF1DANBgkqhkiG9w0BAQUFADANMQswCQYDVQQGEwJV -UzAeFw0xOTEyMjEyMDM1MDBaFw0yMDAxMjAyMDM1MDBaMA0xCzAJBgNVBAYTAlVT -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0jmDTPSdmEt5WvBvAnhg -CTfuwhX+gukkjqy6FudTSPIRDkdgEdgZ47M2+VBRFRotFgFJSL2p5iqgksj+5LNp -MveuMY5BzjvgpAwMXd+lXsYCcKkWrrD54BMmvJ8r0lZd7qIkm9jZF/cNFNDu838F -MraySN+JtRCSHPgdtnnRump0SzyiftRl22+7XZfzqgh/RMwMVepeqkySCA2OZ2oZ -MfRhDzF6L98wYO+o526XK7hNDfvIVmAsi1HTwobC1Z9+a7JqRty0TeUShsdYDYD3 -KtaOBDVvFigfUDDHxO74c4qFhcGsBu1qkRSmNkenPf+aN2QwbNjyztKWTS47oeq2 -XwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQCTwhvM7g7SWI8XIOJRa3FKHq+IXCi5 -YQQkXqZH4v82UQNhhR6dNLBKu66ZGEflr0HnaqXl8iZnuUxI3iBTLUUOEK2xVggt -YBVkf7/nnGl0Y6RqUz8lPhJ5ySloR99FvBuN4k3ldO3pjKdJ+h9r9heVbVcurLxN -f/pU6J1Y4soVG7yBkDHQrZUjcqwEvjC7DKeJDTS9sVxfDRkIB+85adXlS1pRwFxP -zhjRr/YEHB3OxS/9znyNPv1Ltxamhow9AWyMJF2MlDpBJGirM/msbOp/EgU+72TB -UnL4KP+r/tjiE1JanhJkgCC5Gj1p9Hgw4k4Y2zW3PWxUtsCm39LoVJfH ------END CERTIFICATE----- diff --git a/config/ssl/key.pem b/config/ssl/key.pem index fd7c01b..e69de29 100644 --- a/config/ssl/key.pem +++ b/config/ssl/key.pem @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEA0jmDTPSdmEt5WvBvAnhgCTfuwhX+gukkjqy6FudTSPIRDkdg -EdgZ47M2+VBRFRotFgFJSL2p5iqgksj+5LNpMveuMY5BzjvgpAwMXd+lXsYCcKkW -rrD54BMmvJ8r0lZd7qIkm9jZF/cNFNDu838FMraySN+JtRCSHPgdtnnRump0Szyi -ftRl22+7XZfzqgh/RMwMVepeqkySCA2OZ2oZMfRhDzF6L98wYO+o526XK7hNDfvI -VmAsi1HTwobC1Z9+a7JqRty0TeUShsdYDYD3KtaOBDVvFigfUDDHxO74c4qFhcGs -Bu1qkRSmNkenPf+aN2QwbNjyztKWTS47oeq2XwIDAQABAoIBAFKhiJqXC9rwz6KP -HxM5fYYiFhbzzjZmrZfnDL4z7uidPVb/dyOMbaCysMkOaNCCmXYsy0FsS3vNBZCs -sIP0gUUnVbDk2bjWkFXq5nF/luDJs+vUirXfmlgZLwC1D+R9Ti6eTQV1Ft/0m4+z -EDlllAV7CljahKZG/Sel3wf6mhVLTBrWgh0vEZJ2p88uGsMEGTIMCHQZAU+Dv67W -dHKULLL32N+ec1J7FJfZX+gws+nT4EX1KVkFPg2OJq3rts/sx84MqUles8uftdne -BdPfgJCnfPsiWNeV9obTA2q20FLs6ejVRXM3EziC9x2woN6inEFbtQsQfin3Hkx7 -oqKNyQECgYEA8tUoz0GzhSykwrjQ6EjGr7+tptor1/b3OwbH1JvdYyzpSM71xWro -eojFSk9Q74aIke0LoTKZIOq6NZChkEsALdlWLPbW+xSGWPyQ6YMYnFy7OsnHCa0v -gplDzSCIvKgPbbjOTlN6a3ourfnYLKpiN3y8O5X/+NEqfZw+akS+fRUCgYEA3Z+2 -CrH8ekR+tIfwSYpKwKvdQi7FT0gc5o/XBlipVtztuEvElMzFWR1aeKfZ9PoEsuvv -XWECSNEgeu8/d0aILpiEZSnIDqq05DemYA1gM4dtjgjT9ip+Wur8JFMLpjty2ymA -GoQZkiye5cjrhJnwwXUXWywFFqrDC53qlFLVSqMCgYAQWQFSUp3/TS4aXc7SlHOr -yT+rh+yDsYCbXK1/Rq70ykU6PZSWIchc13BQvF46gdgX2tl5lKpyaNr4WDBIQoRU -kdkXVdbLOGqC+x3WWpkBjcyc/JCFuj8Ej8Tcvl/2M2o2fMaGx1/qdGNIGxXOi/no -umEBset1mL8/jZE2HkKksQKBgALLEoZL+/ymhFpOJE8o+Qw4nk9JO59mL0cQpQsl -buzzV+OswMuHUS1wW0WOCAc4Z3rB0oCAyoCUci5aeZhNQUYlEfYccrMMn78InIY1 -ZPMBT/YsUk+V9YW71HW4vjrYIPh2K3EqHRBkk5Qd1ioTrp8hlKvHgEDq4g5xbRV1 -fc61AoGBALfH4KqPqDcJNRvomHE4LQagn63nYyt7R3rIdA+AsvxRKF/uP8w8dTeB -lMDM7S/UzGwsxNU/bCAyrazoNGd/zQ1N7Da5cl54fJ08yV8t68v5Y0kVzmweMyya -tFCnAJF0BTnqHx2MApsipgPvY6Z/oWXsLGdCTY+ILmR7Ej1PWyUA ------END RSA PRIVATE KEY----- diff --git a/src/Foundation.hs b/src/Foundation.hs index ddfdf71..8866771 100644 --- a/src/Foundation.hs +++ b/src/Foundation.hs @@ -17,6 +17,8 @@ import qualified Yesod.Core.Unsafe as Unsafe import Settings import Yesod.Persist.Core +import Lib.Types.AppIndex +import Lib.Types.Semver -- | The foundation datatype for your application. This can be a good place to -- keep settings and values requiring initialization before your application diff --git a/src/Handler/Apps.hs b/src/Handler/Apps.hs index 4a49881..888e67f 100644 --- a/src/Handler/Apps.hs +++ b/src/Handler/Apps.hs @@ -86,18 +86,18 @@ getSysR e = do sysResourceDir <- ( "sys") . resourcesDir . appSettings <$> getYesod getApp sysResourceDir e -getAppManifestR :: Extension "s9pk" -> Text -> Handler TypedContent -getAppManifestR e@(Extension appId) v = do +getAppManifestR :: AppIdentifier -> Text -> Handler TypedContent +getAppManifestR appId v = do appMgrDir <- (<> "/") . staticBinDir . appSettings <$> getYesod - appDir <- (<> "/") . ( toS v) . ( appId) . ( "apps") . resourcesDir . appSettings <$> getYesod - manifest <- handleS9ErrT $ getManifest appMgrDir appDir e + appDir <- (<> "/") . ( toS v) . ( toS appId) . ( "apps") . resourcesDir . appSettings <$> getYesod + manifest <- handleS9ErrT $ getManifest appMgrDir appDir appId pure $ TypedContent "application/json" (toContent manifest) -getAppConfigR :: Extension "s9pk" -> Text -> Handler TypedContent -getAppConfigR e@(Extension appId) v = do +getAppConfigR :: AppIdentifier -> Text -> Handler TypedContent +getAppConfigR appId v = do appMgrDir <- (<> "/") . staticBinDir . appSettings <$> getYesod - appDir <- (<> "/") . ( toS v) . ( appId) . ( "apps") . resourcesDir . appSettings <$> getYesod - config <- handleS9ErrT $ getConfig appMgrDir appDir e + appDir <- (<> "/") . ( toS v) . ( toS appId) . ( "apps") . resourcesDir . appSettings <$> getYesod + config <- handleS9ErrT $ getConfig appMgrDir appDir appId pure $ TypedContent "application/json" (toContent config) getAppR :: Extension "s9pk" -> Handler TypedContent diff --git a/src/Lib/External/AppMgr.hs b/src/Lib/External/AppMgr.hs index 7a246aa..4f51659 100644 --- a/src/Lib/External/AppMgr.hs +++ b/src/Lib/External/AppMgr.hs @@ -16,7 +16,7 @@ import Data.String.Interpolate.IsString import System.Process.Typed hiding ( createPipe ) import Lib.Error -import Lib.Registry +import Lib.Types.AppIndex readProcessWithExitCode' :: MonadIO m => String -> [String] -> ByteString -> m (ExitCode, ByteString, ByteString) readProcessWithExitCode' a b c = liftIO $ do @@ -42,16 +42,16 @@ readProcessInheritStderr a b c = liftIO $ do withProcessWait pc $ \process -> atomically $ liftA2 (,) (waitExitCodeSTM process) (fmap LBS.toStrict $ getStdout process) -getConfig :: (MonadIO m, KnownSymbol a) => FilePath -> FilePath -> Extension a -> S9ErrT m Text -getConfig appmgrPath appPath e@(Extension appId) = fmap decodeUtf8 $ do - (ec, out) <- readProcessInheritStderr (appmgrPath <> "appmgr") ["inspect", "info", appPath <> show e, "-C", "--json"] "" +getConfig :: MonadIO m => FilePath -> FilePath -> AppIdentifier -> S9ErrT m Text +getConfig appmgrPath appPath appId = fmap decodeUtf8 $ do + (ec, out) <- readProcessInheritStderr (appmgrPath <> "appmgr") ["inspect", "info", appPath <> (toS $ appId <> ".s9pk"), "-C", "--json"] "" case ec of ExitSuccess -> pure out ExitFailure n -> throwE $ AppMgrE [i|info #{appId} -C \--json|] n -getManifest :: (MonadIO m, KnownSymbol a) => FilePath -> FilePath -> Extension a -> S9ErrT m ByteString -getManifest appmgrPath appPath e@(Extension appId) = do - (ec, bs) <- readProcessInheritStderr (appmgrPath <> "appmgr") ["inspect", "info", appPath <> show e, "-M", "--json"] "" +getManifest :: MonadIO m => FilePath -> FilePath -> AppIdentifier -> S9ErrT m ByteString +getManifest appmgrPath appPath appId = do + (ec, bs) <- readProcessInheritStderr (appmgrPath <> "appmgr") ["inspect", "info", appPath <> (toS $ appId <> ".s9pk"), "-M", "--json"] "" case ec of ExitSuccess -> pure bs ExitFailure n -> throwE $ AppMgrE [i|info -M #{appId} \--json|] n \ No newline at end of file From 27a02091bc23111f00f8203a04daaa0771bb9299 Mon Sep 17 00:00:00 2001 From: Lucy Cifferello Date: Fri, 9 Oct 2020 14:29:48 -0600 Subject: [PATCH 3/6] put keys back --- config/ssl/certificate.pem | 16 ++++++++++++++++ config/ssl/key.pem | 27 +++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/config/ssl/certificate.pem b/config/ssl/certificate.pem index e69de29..87d9c21 100644 --- a/config/ssl/certificate.pem +++ b/config/ssl/certificate.pem @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE----- +MIICljCCAX4CCQCUVP/RJvKF1DANBgkqhkiG9w0BAQUFADANMQswCQYDVQQGEwJV +UzAeFw0xOTEyMjEyMDM1MDBaFw0yMDAxMjAyMDM1MDBaMA0xCzAJBgNVBAYTAlVT +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0jmDTPSdmEt5WvBvAnhg +CTfuwhX+gukkjqy6FudTSPIRDkdgEdgZ47M2+VBRFRotFgFJSL2p5iqgksj+5LNp +MveuMY5BzjvgpAwMXd+lXsYCcKkWrrD54BMmvJ8r0lZd7qIkm9jZF/cNFNDu838F +MraySN+JtRCSHPgdtnnRump0SzyiftRl22+7XZfzqgh/RMwMVepeqkySCA2OZ2oZ +MfRhDzF6L98wYO+o526XK7hNDfvIVmAsi1HTwobC1Z9+a7JqRty0TeUShsdYDYD3 +KtaOBDVvFigfUDDHxO74c4qFhcGsBu1qkRSmNkenPf+aN2QwbNjyztKWTS47oeq2 +XwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQCTwhvM7g7SWI8XIOJRa3FKHq+IXCi5 +YQQkXqZH4v82UQNhhR6dNLBKu66ZGEflr0HnaqXl8iZnuUxI3iBTLUUOEK2xVggt +YBVkf7/nnGl0Y6RqUz8lPhJ5ySloR99FvBuN4k3ldO3pjKdJ+h9r9heVbVcurLxN +f/pU6J1Y4soVG7yBkDHQrZUjcqwEvjC7DKeJDTS9sVxfDRkIB+85adXlS1pRwFxP +zhjRr/YEHB3OxS/9znyNPv1Ltxamhow9AWyMJF2MlDpBJGirM/msbOp/EgU+72TB +UnL4KP+r/tjiE1JanhJkgCC5Gj1p9Hgw4k4Y2zW3PWxUtsCm39LoVJfH +-----END CERTIFICATE----- \ No newline at end of file diff --git a/config/ssl/key.pem b/config/ssl/key.pem index e69de29..8a187e2 100644 --- a/config/ssl/key.pem +++ b/config/ssl/key.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEA0jmDTPSdmEt5WvBvAnhgCTfuwhX+gukkjqy6FudTSPIRDkdg +EdgZ47M2+VBRFRotFgFJSL2p5iqgksj+5LNpMveuMY5BzjvgpAwMXd+lXsYCcKkW +rrD54BMmvJ8r0lZd7qIkm9jZF/cNFNDu838FMraySN+JtRCSHPgdtnnRump0Szyi +ftRl22+7XZfzqgh/RMwMVepeqkySCA2OZ2oZMfRhDzF6L98wYO+o526XK7hNDfvI +VmAsi1HTwobC1Z9+a7JqRty0TeUShsdYDYD3KtaOBDVvFigfUDDHxO74c4qFhcGs +Bu1qkRSmNkenPf+aN2QwbNjyztKWTS47oeq2XwIDAQABAoIBAFKhiJqXC9rwz6KP +HxM5fYYiFhbzzjZmrZfnDL4z7uidPVb/dyOMbaCysMkOaNCCmXYsy0FsS3vNBZCs +sIP0gUUnVbDk2bjWkFXq5nF/luDJs+vUirXfmlgZLwC1D+R9Ti6eTQV1Ft/0m4+z +EDlllAV7CljahKZG/Sel3wf6mhVLTBrWgh0vEZJ2p88uGsMEGTIMCHQZAU+Dv67W +dHKULLL32N+ec1J7FJfZX+gws+nT4EX1KVkFPg2OJq3rts/sx84MqUles8uftdne +BdPfgJCnfPsiWNeV9obTA2q20FLs6ejVRXM3EziC9x2woN6inEFbtQsQfin3Hkx7 +oqKNyQECgYEA8tUoz0GzhSykwrjQ6EjGr7+tptor1/b3OwbH1JvdYyzpSM71xWro +eojFSk9Q74aIke0LoTKZIOq6NZChkEsALdlWLPbW+xSGWPyQ6YMYnFy7OsnHCa0v +gplDzSCIvKgPbbjOTlN6a3ourfnYLKpiN3y8O5X/+NEqfZw+akS+fRUCgYEA3Z+2 +CrH8ekR+tIfwSYpKwKvdQi7FT0gc5o/XBlipVtztuEvElMzFWR1aeKfZ9PoEsuvv +XWECSNEgeu8/d0aILpiEZSnIDqq05DemYA1gM4dtjgjT9ip+Wur8JFMLpjty2ymA +GoQZkiye5cjrhJnwwXUXWywFFqrDC53qlFLVSqMCgYAQWQFSUp3/TS4aXc7SlHOr +yT+rh+yDsYCbXK1/Rq70ykU6PZSWIchc13BQvF46gdgX2tl5lKpyaNr4WDBIQoRU +kdkXVdbLOGqC+x3WWpkBjcyc/JCFuj8Ej8Tcvl/2M2o2fMaGx1/qdGNIGxXOi/no +umEBset1mL8/jZE2HkKksQKBgALLEoZL+/ymhFpOJE8o+Qw4nk9JO59mL0cQpQsl +buzzV+OswMuHUS1wW0WOCAc4Z3rB0oCAyoCUci5aeZhNQUYlEfYccrMMn78InIY1 +ZPMBT/YsUk+V9YW71HW4vjrYIPh2K3EqHRBkk5Qd1ioTrp8hlKvHgEDq4g5xbRV1 +fc61AoGBALfH4KqPqDcJNRvomHE4LQagn63nYyt7R3rIdA+AsvxRKF/uP8w8dTeB +lMDM7S/UzGwsxNU/bCAyrazoNGd/zQ1N7Da5cl54fJ08yV8t68v5Y0kVzmweMyya +tFCnAJF0BTnqHx2MApsipgPvY6Z/oWXsLGdCTY+ILmR7Ej1PWyUA +-----END RSA PRIVATE KEY----- \ No newline at end of file From 3adbe6462271cfaf3f3a0d29f870bb3a2f003ebb Mon Sep 17 00:00:00 2001 From: Lucy Cifferello Date: Fri, 9 Oct 2020 14:30:39 -0600 Subject: [PATCH 4/6] fix whitespace --- config/ssl/certificate.pem | 30 +++++++++++----------- config/ssl/key.pem | 52 +++++++++++++++++++------------------- 2 files changed, 41 insertions(+), 41 deletions(-) diff --git a/config/ssl/certificate.pem b/config/ssl/certificate.pem index 87d9c21..2bbc462 100644 --- a/config/ssl/certificate.pem +++ b/config/ssl/certificate.pem @@ -1,16 +1,16 @@ ------BEGIN CERTIFICATE----- -MIICljCCAX4CCQCUVP/RJvKF1DANBgkqhkiG9w0BAQUFADANMQswCQYDVQQGEwJV -UzAeFw0xOTEyMjEyMDM1MDBaFw0yMDAxMjAyMDM1MDBaMA0xCzAJBgNVBAYTAlVT -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0jmDTPSdmEt5WvBvAnhg -CTfuwhX+gukkjqy6FudTSPIRDkdgEdgZ47M2+VBRFRotFgFJSL2p5iqgksj+5LNp -MveuMY5BzjvgpAwMXd+lXsYCcKkWrrD54BMmvJ8r0lZd7qIkm9jZF/cNFNDu838F -MraySN+JtRCSHPgdtnnRump0SzyiftRl22+7XZfzqgh/RMwMVepeqkySCA2OZ2oZ -MfRhDzF6L98wYO+o526XK7hNDfvIVmAsi1HTwobC1Z9+a7JqRty0TeUShsdYDYD3 -KtaOBDVvFigfUDDHxO74c4qFhcGsBu1qkRSmNkenPf+aN2QwbNjyztKWTS47oeq2 -XwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQCTwhvM7g7SWI8XIOJRa3FKHq+IXCi5 -YQQkXqZH4v82UQNhhR6dNLBKu66ZGEflr0HnaqXl8iZnuUxI3iBTLUUOEK2xVggt -YBVkf7/nnGl0Y6RqUz8lPhJ5ySloR99FvBuN4k3ldO3pjKdJ+h9r9heVbVcurLxN -f/pU6J1Y4soVG7yBkDHQrZUjcqwEvjC7DKeJDTS9sVxfDRkIB+85adXlS1pRwFxP -zhjRr/YEHB3OxS/9znyNPv1Ltxamhow9AWyMJF2MlDpBJGirM/msbOp/EgU+72TB -UnL4KP+r/tjiE1JanhJkgCC5Gj1p9Hgw4k4Y2zW3PWxUtsCm39LoVJfH +-----BEGIN CERTIFICATE----- +MIICljCCAX4CCQCUVP/RJvKF1DANBgkqhkiG9w0BAQUFADANMQswCQYDVQQGEwJV +UzAeFw0xOTEyMjEyMDM1MDBaFw0yMDAxMjAyMDM1MDBaMA0xCzAJBgNVBAYTAlVT +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0jmDTPSdmEt5WvBvAnhg +CTfuwhX+gukkjqy6FudTSPIRDkdgEdgZ47M2+VBRFRotFgFJSL2p5iqgksj+5LNp +MveuMY5BzjvgpAwMXd+lXsYCcKkWrrD54BMmvJ8r0lZd7qIkm9jZF/cNFNDu838F +MraySN+JtRCSHPgdtnnRump0SzyiftRl22+7XZfzqgh/RMwMVepeqkySCA2OZ2oZ +MfRhDzF6L98wYO+o526XK7hNDfvIVmAsi1HTwobC1Z9+a7JqRty0TeUShsdYDYD3 +KtaOBDVvFigfUDDHxO74c4qFhcGsBu1qkRSmNkenPf+aN2QwbNjyztKWTS47oeq2 +XwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQCTwhvM7g7SWI8XIOJRa3FKHq+IXCi5 +YQQkXqZH4v82UQNhhR6dNLBKu66ZGEflr0HnaqXl8iZnuUxI3iBTLUUOEK2xVggt +YBVkf7/nnGl0Y6RqUz8lPhJ5ySloR99FvBuN4k3ldO3pjKdJ+h9r9heVbVcurLxN +f/pU6J1Y4soVG7yBkDHQrZUjcqwEvjC7DKeJDTS9sVxfDRkIB+85adXlS1pRwFxP +zhjRr/YEHB3OxS/9znyNPv1Ltxamhow9AWyMJF2MlDpBJGirM/msbOp/EgU+72TB +UnL4KP+r/tjiE1JanhJkgCC5Gj1p9Hgw4k4Y2zW3PWxUtsCm39LoVJfH -----END CERTIFICATE----- \ No newline at end of file diff --git a/config/ssl/key.pem b/config/ssl/key.pem index 8a187e2..4c3e8b5 100644 --- a/config/ssl/key.pem +++ b/config/ssl/key.pem @@ -1,27 +1,27 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEA0jmDTPSdmEt5WvBvAnhgCTfuwhX+gukkjqy6FudTSPIRDkdg -EdgZ47M2+VBRFRotFgFJSL2p5iqgksj+5LNpMveuMY5BzjvgpAwMXd+lXsYCcKkW -rrD54BMmvJ8r0lZd7qIkm9jZF/cNFNDu838FMraySN+JtRCSHPgdtnnRump0Szyi -ftRl22+7XZfzqgh/RMwMVepeqkySCA2OZ2oZMfRhDzF6L98wYO+o526XK7hNDfvI -VmAsi1HTwobC1Z9+a7JqRty0TeUShsdYDYD3KtaOBDVvFigfUDDHxO74c4qFhcGs -Bu1qkRSmNkenPf+aN2QwbNjyztKWTS47oeq2XwIDAQABAoIBAFKhiJqXC9rwz6KP -HxM5fYYiFhbzzjZmrZfnDL4z7uidPVb/dyOMbaCysMkOaNCCmXYsy0FsS3vNBZCs -sIP0gUUnVbDk2bjWkFXq5nF/luDJs+vUirXfmlgZLwC1D+R9Ti6eTQV1Ft/0m4+z -EDlllAV7CljahKZG/Sel3wf6mhVLTBrWgh0vEZJ2p88uGsMEGTIMCHQZAU+Dv67W -dHKULLL32N+ec1J7FJfZX+gws+nT4EX1KVkFPg2OJq3rts/sx84MqUles8uftdne -BdPfgJCnfPsiWNeV9obTA2q20FLs6ejVRXM3EziC9x2woN6inEFbtQsQfin3Hkx7 -oqKNyQECgYEA8tUoz0GzhSykwrjQ6EjGr7+tptor1/b3OwbH1JvdYyzpSM71xWro -eojFSk9Q74aIke0LoTKZIOq6NZChkEsALdlWLPbW+xSGWPyQ6YMYnFy7OsnHCa0v -gplDzSCIvKgPbbjOTlN6a3ourfnYLKpiN3y8O5X/+NEqfZw+akS+fRUCgYEA3Z+2 -CrH8ekR+tIfwSYpKwKvdQi7FT0gc5o/XBlipVtztuEvElMzFWR1aeKfZ9PoEsuvv -XWECSNEgeu8/d0aILpiEZSnIDqq05DemYA1gM4dtjgjT9ip+Wur8JFMLpjty2ymA -GoQZkiye5cjrhJnwwXUXWywFFqrDC53qlFLVSqMCgYAQWQFSUp3/TS4aXc7SlHOr -yT+rh+yDsYCbXK1/Rq70ykU6PZSWIchc13BQvF46gdgX2tl5lKpyaNr4WDBIQoRU -kdkXVdbLOGqC+x3WWpkBjcyc/JCFuj8Ej8Tcvl/2M2o2fMaGx1/qdGNIGxXOi/no -umEBset1mL8/jZE2HkKksQKBgALLEoZL+/ymhFpOJE8o+Qw4nk9JO59mL0cQpQsl -buzzV+OswMuHUS1wW0WOCAc4Z3rB0oCAyoCUci5aeZhNQUYlEfYccrMMn78InIY1 -ZPMBT/YsUk+V9YW71HW4vjrYIPh2K3EqHRBkk5Qd1ioTrp8hlKvHgEDq4g5xbRV1 -fc61AoGBALfH4KqPqDcJNRvomHE4LQagn63nYyt7R3rIdA+AsvxRKF/uP8w8dTeB -lMDM7S/UzGwsxNU/bCAyrazoNGd/zQ1N7Da5cl54fJ08yV8t68v5Y0kVzmweMyya -tFCnAJF0BTnqHx2MApsipgPvY6Z/oWXsLGdCTY+ILmR7Ej1PWyUA +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEA0jmDTPSdmEt5WvBvAnhgCTfuwhX+gukkjqy6FudTSPIRDkdg +EdgZ47M2+VBRFRotFgFJSL2p5iqgksj+5LNpMveuMY5BzjvgpAwMXd+lXsYCcKkW +rrD54BMmvJ8r0lZd7qIkm9jZF/cNFNDu838FMraySN+JtRCSHPgdtnnRump0Szyi +ftRl22+7XZfzqgh/RMwMVepeqkySCA2OZ2oZMfRhDzF6L98wYO+o526XK7hNDfvI +VmAsi1HTwobC1Z9+a7JqRty0TeUShsdYDYD3KtaOBDVvFigfUDDHxO74c4qFhcGs +Bu1qkRSmNkenPf+aN2QwbNjyztKWTS47oeq2XwIDAQABAoIBAFKhiJqXC9rwz6KP +HxM5fYYiFhbzzjZmrZfnDL4z7uidPVb/dyOMbaCysMkOaNCCmXYsy0FsS3vNBZCs +sIP0gUUnVbDk2bjWkFXq5nF/luDJs+vUirXfmlgZLwC1D+R9Ti6eTQV1Ft/0m4+z +EDlllAV7CljahKZG/Sel3wf6mhVLTBrWgh0vEZJ2p88uGsMEGTIMCHQZAU+Dv67W +dHKULLL32N+ec1J7FJfZX+gws+nT4EX1KVkFPg2OJq3rts/sx84MqUles8uftdne +BdPfgJCnfPsiWNeV9obTA2q20FLs6ejVRXM3EziC9x2woN6inEFbtQsQfin3Hkx7 +oqKNyQECgYEA8tUoz0GzhSykwrjQ6EjGr7+tptor1/b3OwbH1JvdYyzpSM71xWro +eojFSk9Q74aIke0LoTKZIOq6NZChkEsALdlWLPbW+xSGWPyQ6YMYnFy7OsnHCa0v +gplDzSCIvKgPbbjOTlN6a3ourfnYLKpiN3y8O5X/+NEqfZw+akS+fRUCgYEA3Z+2 +CrH8ekR+tIfwSYpKwKvdQi7FT0gc5o/XBlipVtztuEvElMzFWR1aeKfZ9PoEsuvv +XWECSNEgeu8/d0aILpiEZSnIDqq05DemYA1gM4dtjgjT9ip+Wur8JFMLpjty2ymA +GoQZkiye5cjrhJnwwXUXWywFFqrDC53qlFLVSqMCgYAQWQFSUp3/TS4aXc7SlHOr +yT+rh+yDsYCbXK1/Rq70ykU6PZSWIchc13BQvF46gdgX2tl5lKpyaNr4WDBIQoRU +kdkXVdbLOGqC+x3WWpkBjcyc/JCFuj8Ej8Tcvl/2M2o2fMaGx1/qdGNIGxXOi/no +umEBset1mL8/jZE2HkKksQKBgALLEoZL+/ymhFpOJE8o+Qw4nk9JO59mL0cQpQsl +buzzV+OswMuHUS1wW0WOCAc4Z3rB0oCAyoCUci5aeZhNQUYlEfYccrMMn78InIY1 +ZPMBT/YsUk+V9YW71HW4vjrYIPh2K3EqHRBkk5Qd1ioTrp8hlKvHgEDq4g5xbRV1 +fc61AoGBALfH4KqPqDcJNRvomHE4LQagn63nYyt7R3rIdA+AsvxRKF/uP8w8dTeB +lMDM7S/UzGwsxNU/bCAyrazoNGd/zQ1N7Da5cl54fJ08yV8t68v5Y0kVzmweMyya +tFCnAJF0BTnqHx2MApsipgPvY6Z/oWXsLGdCTY+ILmR7Ej1PWyUA -----END RSA PRIVATE KEY----- \ No newline at end of file From e4d3e9a7131f3b207b3ff1ec3edb2c5e2e584fe6 Mon Sep 17 00:00:00 2001 From: Lucy Cifferello Date: Sat, 10 Oct 2020 19:08:43 -0600 Subject: [PATCH 5/6] alter endpoints to support dynamic versions --- config/routes | 4 ++-- config/settings.yml | 2 +- src/Foundation.hs | 1 - src/Handler/Apps.hs | 36 ++++++++++++++++++++++++++---------- src/Handler/Version.hs | 14 +++----------- src/Lib/External/AppMgr.hs | 14 +++++++------- src/Util/Shared.hs | 22 ++++++++++++++++++++++ 7 files changed, 61 insertions(+), 32 deletions(-) create mode 100644 src/Util/Shared.hs diff --git a/config/routes b/config/routes index 9f3d082..50d46b9 100644 --- a/config/routes +++ b/config/routes @@ -1,8 +1,8 @@ /apps AppsManifestR GET -- get current apps listing -/apps/#AppIdentifier/#Text/manifest AppManifestR GET -- get app manifest from appmgr -/apps/#AppIdentifier/#Text/config AppConfigR GET -- get app config from appmgr +/apps/manifest/#AppIdentifier AppManifestR GET -- get app manifest from appmgr -- ?spec={semver-spec} +/apps/config/#AppIdentifier AppConfigR GET -- get app config from appmgr -- ?spec={semver-spec} /version VersionR GET diff --git a/config/settings.yml b/config/settings.yml index 677319d..f2222e1 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -32,7 +32,7 @@ resources-path: "_env:RESOURCES_PATH:/var/www/html/resources" ssl-path: "_env:SSL_PATH:/var/ssl" registry-hostname: "_env:REGISTRY_HOSTNAME:registry.start9labs.com" tor-port: "_env:TOR_PORT:447" -static-bin-dir: "_env:STATIC_BIN:/usr/local/bin" +static-bin-dir: "_env:STATIC_BIN:/usr/local/bin/" database: database: "_env:PG_DATABASE:start9_registry" diff --git a/src/Foundation.hs b/src/Foundation.hs index 8866771..134c6ee 100644 --- a/src/Foundation.hs +++ b/src/Foundation.hs @@ -18,7 +18,6 @@ import qualified Yesod.Core.Unsafe as Unsafe import Settings import Yesod.Persist.Core import Lib.Types.AppIndex -import Lib.Types.Semver -- | The foundation datatype for your application. This can be a good place to -- keep settings and values requiring initialization before your application diff --git a/src/Handler/Apps.hs b/src/Handler/Apps.hs index 888e67f..610d87d 100644 --- a/src/Handler/Apps.hs +++ b/src/Handler/Apps.hs @@ -44,6 +44,8 @@ import Lib.External.AppMgr import Settings import Database.Queries import Network.Wai ( Request(requestHeaderUserAgent) ) +import Util.Shared + pureLog :: Show a => a -> Handler a pureLog = liftA2 (*>) ($logInfo . show) pure @@ -86,19 +88,33 @@ getSysR e = do sysResourceDir <- ( "sys") . resourcesDir . appSettings <$> getYesod getApp sysResourceDir e -getAppManifestR :: AppIdentifier -> Text -> Handler TypedContent -getAppManifestR appId v = do - appMgrDir <- (<> "/") . staticBinDir . appSettings <$> getYesod - appDir <- (<> "/") . ( toS v) . ( toS appId) . ( "apps") . resourcesDir . appSettings <$> getYesod - manifest <- handleS9ErrT $ getManifest appMgrDir appDir appId +getAppManifestR :: AppIdentifier -> Handler TypedContent +getAppManifestR appId = do + appSettings <- appSettings <$> getYesod + let appsDir = ( "apps") . resourcesDir $ appSettings + let appMgrDir = staticBinDir $ appSettings + av <- getVersionFromQuery appsDir appExt >>= \case + Nothing -> sendResponseStatus status400 ("Specified App Version Not Found" :: Text) + Just v -> pure v + let appDir = (<> "/") . ( show av) . ( toS appId) $ appsDir + manifest <- handleS9ErrT $ getManifest appMgrDir appDir appExt pure $ TypedContent "application/json" (toContent manifest) + where + appExt = Extension (toS appId) :: Extension "s9pk" -getAppConfigR :: AppIdentifier -> Text -> Handler TypedContent -getAppConfigR appId v = do - appMgrDir <- (<> "/") . staticBinDir . appSettings <$> getYesod - appDir <- (<> "/") . ( toS v) . ( toS appId) . ( "apps") . resourcesDir . appSettings <$> getYesod - config <- handleS9ErrT $ getConfig appMgrDir appDir appId +getAppConfigR :: AppIdentifier -> Handler TypedContent +getAppConfigR appId = do + appSettings <- appSettings <$> getYesod + let appsDir = ( "apps") . resourcesDir $ appSettings + let appMgrDir = staticBinDir $ appSettings + av <- getVersionFromQuery appsDir appExt >>= \case + Nothing -> sendResponseStatus status400 ("Specified App Version Not Found" :: Text) + Just v -> pure v + let appDir = (<> "/") . ( show av) . ( toS appId) $ appsDir + config <- handleS9ErrT $ getConfig appMgrDir appDir appExt pure $ TypedContent "application/json" (toContent config) + where + appExt = Extension (toS appId) :: Extension "s9pk" getAppR :: Extension "s9pk" -> Handler TypedContent getAppR e = do diff --git a/src/Handler/Version.hs b/src/Handler/Version.hs index 39018fe..fe1f65e 100644 --- a/src/Handler/Version.hs +++ b/src/Handler/Version.hs @@ -9,18 +9,15 @@ module Handler.Version where import Startlude import Control.Monad.Trans.Maybe -import Data.Char -import qualified Data.Text as T -import Network.HTTP.Types import Yesod.Core import Foundation import Handler.Types.Status import Lib.Registry -import Lib.Semver import Lib.Types.Semver import Settings import System.FilePath ( () ) +import Util.Shared getVersionR :: Handler AppVersionRes getVersionR = do @@ -42,10 +39,5 @@ getVersionSysR sysAppId = runMaybeT $ do getVersionWSpec :: KnownSymbol a => FilePath -> Extension a -> Handler (Maybe AppVersionRes) getVersionWSpec rootDir ext = do - specString <- T.filter (not . isSpace) . fromMaybe "*" <$> lookupGetParam "spec" - spec <- case readMaybe specString of - Nothing -> sendResponseStatus status400 ("Invalid App Version Specification" :: Text) - Just t -> pure t - appVersions <- liftIO $ getAvailableAppVersions rootDir ext - let av = version <$> getSpecifiedAppVersion spec appVersions - pure $ liftA2 AppVersionRes av (pure Nothing) + av <- getVersionFromQuery rootDir ext + pure $ liftA2 AppVersionRes av (pure Nothing) \ No newline at end of file diff --git a/src/Lib/External/AppMgr.hs b/src/Lib/External/AppMgr.hs index 4f51659..e3b4a43 100644 --- a/src/Lib/External/AppMgr.hs +++ b/src/Lib/External/AppMgr.hs @@ -16,7 +16,7 @@ import Data.String.Interpolate.IsString import System.Process.Typed hiding ( createPipe ) import Lib.Error -import Lib.Types.AppIndex +import Lib.Registry readProcessWithExitCode' :: MonadIO m => String -> [String] -> ByteString -> m (ExitCode, ByteString, ByteString) readProcessWithExitCode' a b c = liftIO $ do @@ -42,16 +42,16 @@ readProcessInheritStderr a b c = liftIO $ do withProcessWait pc $ \process -> atomically $ liftA2 (,) (waitExitCodeSTM process) (fmap LBS.toStrict $ getStdout process) -getConfig :: MonadIO m => FilePath -> FilePath -> AppIdentifier -> S9ErrT m Text -getConfig appmgrPath appPath appId = fmap decodeUtf8 $ do - (ec, out) <- readProcessInheritStderr (appmgrPath <> "appmgr") ["inspect", "info", appPath <> (toS $ appId <> ".s9pk"), "-C", "--json"] "" +getConfig :: (MonadIO m, KnownSymbol a) => FilePath -> FilePath -> Extension a -> S9ErrT m Text +getConfig appmgrPath appPath e@(Extension appId) = fmap decodeUtf8 $ do + (ec, out) <- readProcessInheritStderr (appmgrPath <> "appmgr") ["inspect", "info", appPath <> (show e), "-C", "--json"] "" case ec of ExitSuccess -> pure out ExitFailure n -> throwE $ AppMgrE [i|info #{appId} -C \--json|] n -getManifest :: MonadIO m => FilePath -> FilePath -> AppIdentifier -> S9ErrT m ByteString -getManifest appmgrPath appPath appId = do - (ec, bs) <- readProcessInheritStderr (appmgrPath <> "appmgr") ["inspect", "info", appPath <> (toS $ appId <> ".s9pk"), "-M", "--json"] "" +getManifest :: (MonadIO m, KnownSymbol a) => FilePath -> FilePath -> Extension a -> S9ErrT m ByteString +getManifest appmgrPath appPath e@(Extension appId) = do + (ec, bs) <- readProcessInheritStderr (appmgrPath <> "appmgr") ["inspect", "info", appPath <> (show e), "-M", "--json"] "" case ec of ExitSuccess -> pure bs ExitFailure n -> throwE $ AppMgrE [i|info -M #{appId} \--json|] n \ No newline at end of file diff --git a/src/Util/Shared.hs b/src/Util/Shared.hs new file mode 100644 index 0000000..dc3c590 --- /dev/null +++ b/src/Util/Shared.hs @@ -0,0 +1,22 @@ +module Util.Shared where + +import Startlude + +import Data.Char +import qualified Data.Text as T +import Network.HTTP.Types +import Yesod.Core + +import Foundation +import Lib.Registry +import Lib.Semver +import Lib.Types.Semver + +getVersionFromQuery :: KnownSymbol a => FilePath -> Extension a -> Handler (Maybe AppVersion) +getVersionFromQuery rootDir ext = do + specString <- T.filter (not . isSpace) . fromMaybe "*" <$> lookupGetParam "spec" + spec <- case readMaybe specString of + Nothing -> sendResponseStatus status400 ("Invalid App Version Specification" :: Text) + Just t -> pure t + appVersions <- liftIO $ getAvailableAppVersions rootDir ext + pure $ version <$> getSpecifiedAppVersion spec appVersions \ No newline at end of file From d275a063102e2403fc722f4f54ab29a01a27eb01 Mon Sep 17 00:00:00 2001 From: Lucy Cifferello Date: Sat, 10 Oct 2020 19:09:47 -0600 Subject: [PATCH 6/6] white space --- config/ssl/certificate.pem | 2 +- config/ssl/key.pem | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/ssl/certificate.pem b/config/ssl/certificate.pem index 2bbc462..f42e8a2 100644 --- a/config/ssl/certificate.pem +++ b/config/ssl/certificate.pem @@ -13,4 +13,4 @@ YBVkf7/nnGl0Y6RqUz8lPhJ5ySloR99FvBuN4k3ldO3pjKdJ+h9r9heVbVcurLxN f/pU6J1Y4soVG7yBkDHQrZUjcqwEvjC7DKeJDTS9sVxfDRkIB+85adXlS1pRwFxP zhjRr/YEHB3OxS/9znyNPv1Ltxamhow9AWyMJF2MlDpBJGirM/msbOp/EgU+72TB UnL4KP+r/tjiE1JanhJkgCC5Gj1p9Hgw4k4Y2zW3PWxUtsCm39LoVJfH ------END CERTIFICATE----- \ No newline at end of file +-----END CERTIFICATE----- diff --git a/config/ssl/key.pem b/config/ssl/key.pem index 4c3e8b5..fd7c01b 100644 --- a/config/ssl/key.pem +++ b/config/ssl/key.pem @@ -24,4 +24,4 @@ ZPMBT/YsUk+V9YW71HW4vjrYIPh2K3EqHRBkk5Qd1ioTrp8hlKvHgEDq4g5xbRV1 fc61AoGBALfH4KqPqDcJNRvomHE4LQagn63nYyt7R3rIdA+AsvxRKF/uP8w8dTeB lMDM7S/UzGwsxNU/bCAyrazoNGd/zQ1N7Da5cl54fJ08yV8t68v5Y0kVzmweMyya tFCnAJF0BTnqHx2MApsipgPvY6Z/oWXsLGdCTY+ILmR7Ej1PWyUA ------END RSA PRIVATE KEY----- \ No newline at end of file +-----END RSA PRIVATE KEY-----