diff --git a/node/landing-page/README.md b/node/landing-page/README.md index b5e0a08c..5911cc49 100644 --- a/node/landing-page/README.md +++ b/node/landing-page/README.md @@ -1,10 +1,30 @@ # Theia Cloud - Landing Page -This folder contains a sample landing page to launch a user session. +At TUM, we configured this Landing Page to welcome all users into the Theia environment. As we have multiple user groups profiting from Theia, there are two common configurations and behaviours for this page. -It provides support for authentication via Keycloak and selecting a which app definition to start. +## Configuration through Query Parameters -The page is based on [ViteJS](https://vitejs.dev/) with React and Typescript. +`appDef` (optional) is used to pass which blueprint should be started and must match the `appId` set in the landing page's configuration (either `config.js` or K8s manifest). In our setup, it's always the image's URI (*ghcr.io/ls1intum/theia/blueprint:latest*). + +`gitUri` (optional) contains the clone URI for the user's repository. It's used to automatically setup the working environment when/before the users enters Theia. + +`gitToken` (optional) should be filled with the the user's *personal access token* which can we automatically generated within Artemis. This is primarily used to clone and push afterwards. + +## Use-Cases +Dependent on the available query parameters, the landing page is configured to its different use-cases. + +### Artemis Exercise Workflow +For Artemis users, Theia should be as transparent as possible - making use of automated authentication, automated image selection and repo cloning in regards to the currently opened exercise, and instant session start. When a user is logged in with KeyCloak, the landing page should not require any interaction from the user. + +This mode of execution is started when the following parameters are set: +- `appDef` +- `gitUri` +- `gitToken` + +### Guest / School Users +Users not in the Artemis flow want to understand what is happening, have more power of choice, and want a more slow-paced environment. Thus, no pre-selection or automatic startup takes place. After login, the user is presented with a graphically pleasing way to select the fitting image. + +This mode of execution is used as a fallback when not all three parameters are set. ## Development diff --git a/node/landing-page/public/config.js b/node/landing-page/public/config.js index 2dd7a81c..f92d3b6c 100644 --- a/node/landing-page/public/config.js +++ b/node/landing-page/public/config.js @@ -3,24 +3,27 @@ window.theiaCloudConfig = { appName: 'Theia Blueprint', useKeycloak: false, serviceUrl: 'http://localhost:8081/service', - //appDefinition: 'theia-cloud-demo', - useEphemeralStorage: true - // additionalApps: [ - // { - // appId: 'coffee-editor', - // appName: 'Coffee Editor', - // }, - // { - // appId: 'cdt-cloud-demo', - // appName: 'CDT.cloud Blueprint', - // } - // ], - // disableInfo: true, - // infoText: 'my info text', - // infoTitle: 'my info title' - // loadingText: 'my loading text', - // logoFileExtension: 'png', - // keycloakAuthUrl: "https://keycloak.url/auth/", - // keycloakRealm: "TheiaCloud", - // keycloakClientId: "theia-cloud", + appDefinition: 'ghcr.io/ls1intum/theia/java-17:latest', + useEphemeralStorage: true, + additionalApps: [ + { + appId: 'ghcr.io/ls1intum/theia/java-17:latest', + appName: 'Java 17', + logo: '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', + }, + { + appId: 'ghcr.io/ls1intum/theia/c:latest', + appName: 'C', + logo: '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' + } + ], + disableInfo: false, + infoText: 'We are offering a online programming environment perfectly tailored for your project, please log in to continue.', + infoTitle: 'Welcome to Theia - the Online IDE for Artemis', + loadingText: 'Preparing your personal Online IDE...', + logoData: 'iVBORw0KGgoAAAANSUhEUgAAAOgAAADJCAYAAAApWX7rAAAACXBIWXMAAA1hAAANYQE8JGIuAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAGllJREFUeJztnXt8FeWZx7/PzElCAgjerXhprYrKLRAvICqiRQtJuFRxq71odcVVi4Tqaq1Vj9bWqoUksLbVXtZ2b116E0HWW4tb3dqqkQTFC2rt2o+iVSTccj0zz/6RI0sRkpycmXlnznm//5HMvM+PnPObZ2bemd8LloKhsm5ldeVVK2aY1mEJDjEtwBIMVfOeLfEqNjwPuNs8d/RrS2d0mtZkyR/HtABLMGQqNswHRgJHDna9K03rsQSD7aAFwPj5q/ZX11sPDM/+aEtJiTPymbuq3zGpy5I/toMWAOpmbuP/zQmwV3e3d4spPZbgsB004Zz6tYcmbG3rfhpwd/mV7/hy4nNLappM6LIEg+2gCWdbe/diPmpOAMd3aAS1B+EEYw2aYCYsfPA8VabseQudXLngwXOjU2QJGmvQhDLvnmcrfNU7+tpORBdVzVtREYUmS/BYgyaUZ15652rQj/e1ncKhfoVcHYEkSwjY65MEMuO23xz+9vttLwBD+rlLu6sc09RY+2aYuizBYztoAnnng7Zv0n9zApR7wrfC0mMJD9tBE8bpN/zXKa3bM78j989OfZEpa+trnghDlyUcbAdNEOm0Opu3ZxYzsAOruKoNpNP2M08Q9sNKEA9uW3WhwgkD3V9hwrjNVRcGqckSLvYUNyHM/fajw159p+NF4OA8h3rXLRs0sumOaZuD0GUJF9tBE8Jr73Z8lfzNCXCg39V+fQDjWCLAdtAEMO3rjxz1162da0UYFNCQXfiMbl5S+2pA41lCwnbQBLBxe+cdAZoToBSHOwMczxIS1qAxZ/LXHp7mK3NCGHr2uAUrzw5hXEuAWIPGmHR6daqtvXtRWOOLw+Kqec+WhDW+JX+sQWPMyi1tl6nqmNAKqB6XKd9wWWjjW/LG3iSKKbXp1fv9pXXbS8B+oRYSNrkORzctqn0/1DqWAWE7aEx5e8v2mwjbnADK3r7PzaHXsQwI20FjyKdufHTM+1s7moCorg89T5zxz9dXPx9RPUs/sR00hmzc2nEX0ZkTwE2p3xBhPUs/sQaNGVNveOgchcinPxTOqKxbMTvqupbesQaNERf98+pBrW0Zk+9tLjo9vTrIByIseWINGiNefLH9KlU92qCEIzZt2r7AYH3LLtibRDFh5h2PHPzmhs51/G0AtQm2upSMbGr49AbDOizYDhob3nq361bMmxNgqKfd3zQtwtKD7aAx4MwbHzth49b2p9h9ALUJfBUmtdTXPm1aSLFjO6hhVFU2betYRHzMCeCI0mBT6c0Tpy9FUfJIx4kXdGd0oWkdu+HQgyauf/WdP/yHfXjBILaDGuSKu1cP6ejSOMdh3jH2mocHmxZRzFiDGqTpje3XqurhpnX0wgjJdF1nWkQxY68xDJFNh18HxLpDqdIhkjm2uWHOn01rKUZsBzXEux+0307MzQkgwiAkZeNRDGE7qAGm3fjIlPe2dq4mWX//qc0NtY+bFlFs2A4aMXOXLXM3buv6DskyJ0DD3LnL7F3/iLEGjZi3moZc7Kseb1rHABj36iEVl5gWUWwk7SieaC6qXz285c3tL6rqx0xrGSDvQebo5oY5raaFFAu2g0bIurfab0iwOQH2F1I3mhZRTNgOGhGf/sZvR254f3tzwAHUJsioaGVL/cx1poUUA7aDRsT7re13FYA5AVKiTr1pEcWCNWgEnHHTw9Mznl9rWkdw6LTKq1bMMK2iGLAGDZl77nm2ZNPW7jtM6wgch8Yj568qMy2j0LEGDZn7Xv/rlaGmw5vjyMGud6VpEYWOvUkUImde/9i+G9vbXyaKAGozbCkpcUY+c1f1O6aFFCq2g4bIlu7OWylccwLs1d3t3WJaRCFjO2hInP61h0e3tnU9R7QB1CbwRfyT1tTPeta0kELEdtCQ2NrRvZjCNyeAo+raeJSQsAYNgdO//vC5nq/TTOuIDp1cueDBc02rKESsQQNm4bLfl2/e1hXnGJNQENFFVfNWVJjWUWhYgwbMU8+0LlQ4yrSOqFE41K+Qq03rKDTsdUOAzF38mxGvvtm2DhhmWosh2l3lmKbG2jdNCykUbAcNkD+/3flNitecAOWeUHSn92FiO2hATL/t0Ykb3u94Eps1rL7IlLX1NU+YFlII2A4aAKoq737QcRfWnADiqjaQTtvvVgDYP2IATLnh4S/4PqeY1hEXFCaM21x1oWkdhYA1aJ5c+6Mnh25tz9xqWkfcEOX2quseLebr8UCwBs2TJ9dv+WrM0+FNcaDf1X69aRFJx94kyoNzbn/iiNffbV1LAgKoDdGljjOmZXH1etNCkortoHnw5sat38aaszdKxVebSp8H1qADpPqWx6Z2Zzz7/Gmf6KxxC1aebVpFUrEGHQDp1atTG1o77sReIvQLcVhcNe/ZYnizJ3CsQQfAQ6vaLkpoOrwZVI+9qLYijosUxx7bAXJk5LXLh5Z3Oa8ASQ6gjoyU42j6/NFSffyId8E9WkS2mNaUJGwHzZGKbrkBa85+MbS8hO9efoJUHz8C4EDI2FT6HLEdNAfGLFx5hKv6ImDjJvvggGGDWDrveI4+eOjOP+4Cd4yI2GmXfmI7aA64ymKsOfvkqIOH8tO6SbuaE6AUvO+Y0JRUbAftJ2PrHjjDQX5jWkfcOfmY/bjzovEMLkv1spVOFyl5KDJRCcZ20H4wd+4y10UaTOuIO3MmHsqSS4/vw5wALFZVO+3SD6xB+8H6g8svVyjEdPhAEIHLzj6Km/5uNK7Tn5MyORb8y0MXVgDYU9w+GHP5yr3dMl1PYQdQD5jSlMMt54/h0xMOznXXTdlpl/fD0FUo2A7aB6lBWujp8ANmWEUJ37v8xIGYE2BvsKn0fWE7aC9MqFt5rI+2UBwB1DlxyL4VLJ1XxccPGJLPMB54E0TK1galq9CwHbQXFK3HmvMjjDl8GD+pm5ivOQFccO1iwL1gDboHKhc+MEvBvoWxC2eMOZAfXHkS+wwJbDr4DNXM7KAGKzTsKe5uGJVeVlrSWv48cLRpLXHi/NM+zjWzj8GRwL82fwJ3lIh0BD1w0rEddDeUtJbXYc25A8cRrvvMcVw759gwzAlwBPh1YQycdGwH3YWx1/zqACdTsp7iDqDeQXmpy+1fqGTK6APCLrUtO+2yIexCScJ20F1wMyW3Y80JwL5Dy/jhl0+KwpwAQ8CzqfS7YDvoToz7yvLx4jvPYg9cHHHQUJZeOoGD94l0wTIf/EkipU9HWTTOFP0XcWfElwbs34RxnxjOj758YtTmBHDAaVC1iwF/SNF/GT9kfN0D54OcZlqHaaZVHsS9V5zE8MGlpiRMAu98U8Xjhj1SAZMWLitv1/KXgKIOoA5xGiVX3gJ3pIhsNy3ENLaDAu1afh1FbE5HRG+YOyrMaZRcGQGZa02LiAOx+DRMMnb+qkMc13uZIg2gLi9N6Z0XVsopx+1vWsqutIN7nIj82bQQkxR9BxXHu4siNee+Q8u8H191UhzNCVAO3rdNizBNUXfQ8XUrJin8D0X4d/jkQYO9f7rsBPeg4eWmpfSBni5S8t+mVZiieDtoOu0oNFKE5jzhqH28+xacnABzQnbapWgXRi5ag47fNOFLwAmmdURN7QkHe9+97ER3yKA+c4NiglaC9yXTKkxRdN0DijYdXueddaR/+fSjktiN/pp9TnezaSFRU5QdtLzbuZEiMqcjkvnG58ZpQs0JcABkvm5ahAmKroNWzV/1Sc/11lEkAdSlJU7b3fNOGHT8kfsk/WBclKn0Sf/QcsZzvaJJhx8yKPX+z64+pRDMCUWaSl9UHXT8VSvOVIfHTOuIgv32Kvvfn10z+bB9h5YV2GdcXKn0hXBk7Rdz5y5zcSiKgKrD9h/88v1fO+3wwjMnUGSp9EVj0NdGVFxRDOnwlUcMf/pXXz31mH4sv5BQiiuVvhCPsB8hmw7/KrCvaS0hosCta+pnbAJdTGEffIsmlb6QP8QduGX6DQrbnJ0ickFzQ21axG0EzgHaTIsKkaJJpS/4Djp+/v3Hqeu2AIV6zrdRldktjbVP7vxD1a4TwVkBRBIoZICiSKUv/A7quospXHO+ro5z8q7mBOjJ9XEngr5sQlgEuOAW/JKQBW3QyroVsws1HV6VP4jnTmpZXL3HiXsReQNSk4HfRSgtSqaqZuaYFhEmBWvQUellpcCdpnWEgQq/rHDaz1izdMZ7fW0rIh+Aexbw7xFIM8F3VHWQaRFhUbAGTW2qWAgcZVpH0KiwpGVY03lP1Z/X3t99RKQT3M+DFuKNlYJOpS/Im0SjFyw/MCXOKxRWALUHLGhuqL07n0FUM5cA36OwVm3blg0Ze9u0kKApyA6awim0dPjtqjo7X3MCiKR+BFoDbAlAV1wYAt43TYsIg4LroGPrVkxw4BkK5+CzwfGl9rklNU1BDqraORbcB4FDghzXIAr+xEJLpS+UL3EWFRcKKR1+nbjOpKDNCdAzf+hOBGkOemxDCDiNhZZKXyhfZAAqF648X+FU0zqCQOC3kDllzaLq/w2thshb4JwGFMrbIRPBu8C0iCApmKNNgaXD/7R7ePul69LndUVRTFVT4N0NzIuiXsgUVCp9wTxh00bFVwVNvDlVWNJSX1MHolHVFJEMcJmq9yfQ20n2gXsEZK4DbjItJAiS/EHsIJsO/woQ+XJcAZJB5Mrm+pp7TYpQzVwI3AsYWz0pAAomlb4grkFd1/sOyTbnVkFnmjYngEjqJ6DTgVbTWvKgHLw7TIsIgsR30MqrVp6Mo0+S3P/L2+BUNzdUx+puqmrnqOw0TIIvG5KfSp/sDppOOzh+YtPhBZ7PON7EuJkTQKRsHbiTQAKf4omO5KfSJ9qgla1VF4Mcb1rHwJBHSz33lBcWz/6LaSV7QkQ2gDMFWGlay8DQSvAuNq0iHxLZeSDZ6fACP3baPvYPTfce321aS3/o6ULeEuAK01oGwF+z0y6JvKZO7DRLeZd7E2jSzNmTG9RQmzYtJBdExAOuVPXWJzDv6MNU+mtMCxkIieygCU2H70S4uLm+NtHvZapmzgH+BUjC0mgf0gXuWBF5xbSQXEnSkXAHvuvVkyRzCptE9OykmxNAJPVL8M8A+nxZPEYkNpU+cR00cenwwhuuw4ymRbUFlQ2kqp+EzCqQo01ryYEZIqn/Mi0iFxJl0NPTq1OtrdvWAKNNa+knT2fUn/lC46x3TQsJA1XdF7z7gVNMa+kf+jKkxopIIm7OQcJOcTdv2nYFyTHn/W4bUwvVnAAishHcTwH/aVpL/5BjwE/UnejEdNBRCx/ap0S715OAAOpsbtBC0mnftJYo6HkHM3MzyM2mtfSDRKXSJ2aapcTPfAOJvTlVVa5vaagpiOdA+4uIKJBW9d4GvZt4f6/2Bu9WEjKnm4gOmoR0eFU6cPTClvqZy0xrMYlqZhY9EZ9xfnkhMan0ibgGVdetJ8bmBDaK+J8qdnMCiKSWg386EOdr78Sk0sfeoOMWrpgDnGVaRy+8hs+k5oZZ/2NaSFwQKX2m50F7fcm0ll6Yqpr5jGkRfRHrU9xR6WWlJa3lLxDfAOqnXJeZTYtqE3HDIWpUdW/wfg1MMa1lD7yRfbG7w7SQPRHrDlrSWn418TXnL8ql/Uxrzj0jIpuyy078m2kte+AT4C80LaI3YttBs+nw64G9TGvZlWKbRsmXmE/DxDqVPrY3XlLifhs0bub0BJnfXF/zPdNCksT/T8Nk3gS+T7yWnRgC3reAi0wL2R2x7KAxTYffBvLZ5oaaB00LSTKq3dNAfkG8zoxim0ofJwNkUXGgkXhp2+DDFGvO/BEpeRS8U4A4JUnENpU+TiYAoLJu5QXE6+HrF1xl4tqG2udMCykURMqezy47sca0lp2YCN7nTIvYlVgdMbLp8C8Dh5nWAqDCb1Klg85pumPaZtNaChFVHQLeMmC6aS1ZYpdKH6sO2qbl1xMTc4Lcl9r+senWnOEhItvAnQncY1pLlg9T6WNDbDro6K/cf2jKd1/G/DOcCtza3FBzS5TLLxQ7qt4C0HrMfyc7wD02Lqn0semgKXUXYd6cXYJe2NxQm7bmjBYRtxH4LGD6qZ5B4N1pWMMOTB+tAKisWz4ZnCcwq2erI855z9VXF8pSfIlEtXsqyK+A4YaVxCKV3nwHTacdkAbMmvMtcTjVmtM8IiWrwZ0MhLYuav+IRyq9cYNWbqq6xHA6/FrfcyeuWVzbYlCDZSdE5MWeaRieNadCK8G/xFz9Hoye4o68dvnQQZ3OehEOMiThkTLPnfvHpTO2GKpv6QVVHQzefwC1hiS8l41HMZZKb7SDDup0bjZozh8OHz6k2pozvvTMR7pzgH8yJGH/bCq9MYx10AkLlx/pq/MC0QdQZ6dRkrX8QrGTnYYxsexEN7hjTKXSG+ugvjoNRG/OTkE/Z82ZPLLTMHOB9ohLl4C3KOKaOzDSQccvXPkpVX004rIfiDpz1jRW/y7iupYAUe2aCM5y4ICISxtJpY/coIbS4f/kqz9jbeOsxC2eY/koqnpEdtmJkRFWNZJKH/kpbmvr9i8TrTn/6Ke6J1lzFg4i8idInQw8EWHVY8C/Mrp62apRFos8HV75dbnT/rmn6s+L+rrFEgGqWgbeffQ8IhgFreAeFWUqfaQdtES7byMic6qwpHnvpnOtOQsXEekE9wLQWyIqOTybSh8ZkXXQcQsfGCUqzYSfg+SpUtfSWGtq7sxiANXM3wPfI4LvF/hVIqWRPHkWWQcVdaJIh98uKp+x5iw+RFI/BK0BtoZcygWnPuQaO4jEoOPqVn4GdFqYNVR5R8Q/fU1jzQNh1rHEF5GSh8E/FXgr5FKRpdKHfoobUTr8a47405+rn/VaiDUsCUFVP56dhjk2xDKRpNKH3kFLNldcQ5jmFH7vukyy5rR8SE8aQmoy8HiIZT4B/ldCHB8IuYOGng4v/Hz4sCFffDw91fRb+JYYoqql4P0I+HxIJUJPpQ+1g6bEuZOQzKnCkuZhTZ+15rTsCRHpAveLIU7DDAHv9pDGBkLsoBOuWlnlO/o0wR8EMiLMX1Nf+/2Ax7UUMKqZi4B7CX7ZCQV/kkjpHwMeFwitg6r4jjaEMP42fGZZc1pyRSR1H+gMIOgYVcnGo4TS7EIx6Pi6FZ8n+HT4t9XxT2teUrsq4HEtRYJIyWPZZSfeDHjo0FLpA3d91bwVFV4FLxFsAPULrlLd1Fgb9B/WUoSo6sHgrwCdEOCwb4F7TE8Yd3AE3kH9wQSdDv+YWzboFGtOS1D03HV1pgBBLoYVSip9oB008HR45Z/d9o9d1nTv8ZG+g2cpDnpiNb2lwOUBDdmRfXjhjYDGC/bZ2JTvLiYYc/bkBjXaaBJLeIiIB1yh6r0SUN7Rh6n0c/NX10NgHTTAdPguVbmkpbHmX4PQZbH0B9XMucC/AIMCGG2qSMnj+Y8T1DVoOu0gTiP5mlPYBJxtzWmJGpHUL0DPBAJ4GTu4VPpADDpu04RLUaryGkR4w1GZ3NxQ+3gQmiyWXBEp+T24k0BfzW8kHRdUKn3ep7gnzV+1V4fjvZJnAPUzGfVrX2ic9W6+eiyWfFHVfcFbDkzOY5hAUunz7qCdjp/Ox5yq+lB7qX+mNaclLojIRnDPApbnMcz+kLkxby357Jx3Orzwg+HDhlzxeHpqJh8dFksYZKdh6oH5Axwi71T6vKZZfN9pRAZkzp5plHo7jWKJL9lpmKtUvdcHOA1TAt5ioHrAGga6Yx7p8J0ictGa+pqfDbS2xRI1qpk5wL8ysHn+AafSD8ig2XT4ZmBUjrtuVGV2S2PtkwOpa7GYRLXrJHAeIOdlJwaeSj+gm0SbNm+dT+7mfF0d52RrTktS6Xnn053UY7ic9hxwKn3OHTSbDv8qsE9/91HlD47vzlyzdMZ7udazWOKGqu4D3q+B03LYrTU77ZKTB3LuoKWa+Ra5mFP4ZYXTfoY1p6VQEJEPstMw/57DbgNKpc+pg+aaDq/CkpZhTQtJp/1chVkscacnRSFzM8jN/dwl51T6nKZZetLhtT/7eMCClvrau3MZ32JJEiKiQFo18xfg+/TtJxecBmBqv2v0d8PxdSvOVfh5Pzbd7gvnr62vXdHfsS2WpKPafRbIz+lfiuW5Iqlf9mfcfhn0yPmryoa43gvAkb1tp8o7rkrNc0tqmvozrsVSSKh2jgX3QeCQPjZ9E9xjRaStrzH7dZNoiJu5hj7MiciLTsqZaM1pKVZEytaCOxGkuY9NDwO/rl9j9rXBCf/44EHd3f4r9NK6BX6rZM5pbpiT15P7FkshoKpDwVsGfLqXzdqyIWN/6W2sPjtoV7ffVzr8T7uGt0+35rRYehCRreDWAj/oZbMK8G7rc6zeftlXOrwKS1rqa+pAtK9CFkuxsdM0zE3s3msKeppIyR6fruulg6r4Do172Cajqv/QUl+7wJrTYtk9IqIiJWngS8DunsP9MJV+jz7c4y/GL1j5BdDdvVG+TdCZLY0z78lZscVShIikfgI6HdjNZaBW9ZZKv9tT3Kp5Kyr8Cl5WOHSXX70NTnVzQ3Vfd6ksFssuqHaOyk7DHL7Lr97JLmO4Zdd9dttBvXK9YVdzCjyfcbyJ1pwWy8AQKVvX8zaM7DoVeRBkrt3tPrv+YOyXH/iEuPKiyM75oPJomeec+8elMz7icIvFkhuqOhi8nwE1O/24E9zRIvI3K8V/pINKidy1szkFfuy2HVRtzWmxBIOIbAd3NvDdnX5ctrvFgP+mg477ysqp4utvs//syQ1qsLlBFktYqHoL/jbvSM8SKdkRJbTDoHPnLnNfHVHeBIwDOhEubq6vzeV9N4vFMgBUM+fQs+xEOcg6cCpFJAM7neK+dkj5pcA4hE0ierY1p8USDT1vtuiZwHugo3ZOpReAyrpfD4fUeoRtrsOMpkW1OWauWCyWfFHVT0JmFch+4B4lIh9kO6h7M/BGxvcnWXNaLGYQkdchdTLwImS+DuBUXb3iGERGuG1MtcsvWCxmyS47MQ3kANXOUU7G57DmYU2fbbq3ts+XRy0WS/iISAe4XwRnxP8BoI5AFYzIGK8AAAAASUVORK5CYII=', + logoFileExtension: 'png', + keycloakAuthUrl: "https://keycloak.url/auth/", + //keycloakRealm: "TheiaCloud", + //keycloakClientId: "theia-cloud", }; diff --git a/node/landing-page/src/App.tsx b/node/landing-page/src/App.tsx index 2aa07835..21ece20a 100644 --- a/node/landing-page/src/App.tsx +++ b/node/landing-page/src/App.tsx @@ -41,21 +41,21 @@ function App(): JSX.Element { // ignore ESLint conditional rendering warnings. // If config === undefined, this is an unremediable situation anyway. /* eslint-disable react-hooks/rules-of-hooks */ - const [selectedAppName, setSelectedAppName] = useState(initialAppName); - const [selectedAppDefinition, setSelectedAppDefinition] = useState(initialAppDefinition); + const [selectedAppName, setSelectedAppName] = useState(initialAppName); + const [selectedAppDefinition, setSelectedAppDefinition] = useState(initialAppDefinition); const [email, setEmail] = useState(); const [token, setToken] = useState(); const [logoutUrl, setLogoutUrl] = useState(); - const [gitURL, setGitURL] = useState(); + const [gitUri, setGitUri] = useState(); + const [gitToken, setGitToken] = useState(); const [autoStart, setAutoStart] = useState(true); if (!initialized) { - const element = document.getElementById('selectapp'); const urlParams = new URLSearchParams(window.location.search); - + // Get appDef parameter from URL and set it as the default selection if (urlParams.has('appDef') || urlParams.has('appdef')) { const pathBlueprintSelection = urlParams.get('appDef') || urlParams.get('appdef'); @@ -66,12 +66,15 @@ function App(): JSX.Element { isDefaultSelectionValueValid(pathBlueprintSelection, config.appDefinition, config.additionalApps) ) { // eslint-disable-next-line no-null/no-null - if (element !== null && config.additionalApps && config.additionalApps.length > 0) { - (element as HTMLSelectElement).value = pathBlueprintSelection; + if (config.additionalApps && config.additionalApps.length > 0) { + // Find the selected app definition in the additional apps + const appDefinition = config.additionalApps.find( + (appDef: AppDefinition) => appDef.appId === pathBlueprintSelection + ); setSelectedAppName( - (element as HTMLSelectElement).options[(element as HTMLSelectElement).selectedIndex].text + appDefinition ? appDefinition.appName : pathBlueprintSelection ); - setSelectedAppDefinition((element as HTMLSelectElement).value); + setSelectedAppDefinition(appDefinition ? appDefinition.appId : pathBlueprintSelection); } else { // If there are no additional apps, just use the application id as the name console.log('App definitition provided via URL parameter not found in additional apps'); @@ -84,11 +87,19 @@ function App(): JSX.Element { } } - // Get gitURL parameter from URL. This should be changed to a protected body-read in the future. - if (urlParams.has('gitURL')) { - const gitURL = urlParams.get('gitURL'); - if (gitURL) { - setGitURL(gitURL); + // Get gitUri parameter from URL. + if (urlParams.has('gitUri')) { + const gitUri = urlParams.get('gitUri'); + if (gitUri) { + setGitUri(gitUri); + } + } + + // Get gitToken parameter from URL. + if (urlParams.has('gitToken')) { + const gitToken = urlParams.get('gitToken'); + if (gitToken) { + setGitToken(gitToken); } } @@ -129,7 +140,8 @@ function App(): JSX.Element { console.log('Selected app name: ' + selectedAppName); console.log('Configured app definition: ' + config.appDefinition); console.log('Initial app definition: ' + initialAppDefinition); - console.log('Git URL: ' + gitURL); + console.log('Git URI: ' + gitUri); + console.log('Git Token: ' + gitToken); console.log('-----------------------------------'); if (!initialized) { @@ -137,8 +149,9 @@ function App(): JSX.Element { return; } - if (selectedAppDefinition && gitURL) { - console.log('Setting autoStart to true and starting session'); + if (selectedAppDefinition && gitUri && gitToken) { + console.log('Checking auth, setting autoStart to true and starting session'); + authenticate(); setAutoStart(true); handleStartSession(selectedAppDefinition); } else { @@ -267,7 +280,7 @@ function App(): JSX.Element { title={config.infoTitle} /> )} -