Merge pull request #33 from linagora/24-load-env-var-dynamically
Load .env dynamically
This commit is contained in:
@@ -1,8 +0,0 @@
|
|||||||
PUBLIC_SSO_BASE_URL="https://example.com"
|
|
||||||
PUBLIC_SSO_CLIENT_ID="example"
|
|
||||||
PUBLIC_SSO_SCOPE="openid name email"
|
|
||||||
PUBLIC_SSO_REDIRECT_URI="https://example.com/callback"
|
|
||||||
PUBLIC_SSO_RESPONSE_TYPE="code"
|
|
||||||
PUBLIC_SSO_CODE_CHALLENGE_METHOD="S256"
|
|
||||||
PUBLIC_SSO_POST_LOGOUT_REDIRECT="http://example.com?logout=1"
|
|
||||||
PUBLIC_CALENDAR_BASE_URL="https://calendar.example.com"
|
|
||||||
+4
-4
@@ -13,10 +13,10 @@
|
|||||||
|
|
||||||
# secrets
|
# secrets
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.env
|
.env.js
|
||||||
.env.development
|
.env.development.js
|
||||||
.env.test
|
.env.test.js
|
||||||
.env.production
|
.env.production.js
|
||||||
|
|
||||||
npm-debug.log*
|
npm-debug.log*
|
||||||
yarn-debug.log*
|
yarn-debug.log*
|
||||||
|
|||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
FROM nginx:alpine
|
||||||
|
RUN apk add gzip
|
||||||
|
COPY nginx.conf /etc/nginx
|
||||||
|
COPY dist /usr/share/nginx/html
|
||||||
|
|
||||||
|
# Record the exposed port
|
||||||
|
EXPOSE 80
|
||||||
|
|
||||||
|
# Before stating NGinx, re-zip all the content to ensure customizations are propagated
|
||||||
|
CMD gzip -k -r -f /usr/share/nginx/html/ && nginx -g 'daemon off;'
|
||||||
@@ -54,7 +54,22 @@ You don’t have to ever use `eject`. The curated feature set is suitable for sm
|
|||||||
|
|
||||||
### Run it with docker
|
### Run it with docker
|
||||||
|
|
||||||
More details to be supplied when available.
|
After compiling the project with npm (see previous section) simply run:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker built -t linagora/twake-calendar-front .
|
||||||
|
```
|
||||||
|
|
||||||
|
Then edit `.env.js` in order to match your configuration then run it with:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker run -d \
|
||||||
|
-v $PWD/.env.example.js:/usr/share/nginx/html/.env.js \
|
||||||
|
-p 5000:80 \
|
||||||
|
tcal-front
|
||||||
|
```
|
||||||
|
|
||||||
|
And then visit [https://localhost:5000](https://localhost:5000).
|
||||||
|
|
||||||
## Configuring it
|
## Configuring it
|
||||||
|
|
||||||
|
|||||||
+51
@@ -0,0 +1,51 @@
|
|||||||
|
user nginx;
|
||||||
|
worker_processes auto;
|
||||||
|
|
||||||
|
error_log /var/log/nginx/error.log notice;
|
||||||
|
pid /var/run/nginx.pid;
|
||||||
|
|
||||||
|
events {
|
||||||
|
worker_connections 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
include /etc/nginx/mime.types;
|
||||||
|
default_type application/octet-stream;
|
||||||
|
|
||||||
|
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
||||||
|
'$status $body_bytes_sent "$http_referer" '
|
||||||
|
'"$http_user_agent" "$http_x_forwarded_for"';
|
||||||
|
|
||||||
|
access_log /var/log/nginx/access.log main;
|
||||||
|
|
||||||
|
sendfile on;
|
||||||
|
#tcp_nopush on;
|
||||||
|
|
||||||
|
keepalive_timeout 65;
|
||||||
|
add_header Cache-Control "no-cache";
|
||||||
|
etag on;
|
||||||
|
|
||||||
|
# include /etc/nginx/conf.d/*.conf;
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
index index.html index.htm;
|
||||||
|
try_files $uri $uri/ /index.html;
|
||||||
|
}
|
||||||
|
|
||||||
|
error_page 500 502 503 504 /50x.html;
|
||||||
|
|
||||||
|
location = /50x.html {
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gzip_static on;
|
||||||
|
gzip_disable "msie6";
|
||||||
|
gzip_vary on;
|
||||||
|
gzip_proxied any;
|
||||||
|
gzip_http_version 1.1;
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
var SSO_BASE_URL = "https://example.com";
|
||||||
|
var SSO_CLIENT_ID = "example";
|
||||||
|
var SSO_SCOPE = "openid name email";
|
||||||
|
var SSO_REDIRECT_URI = "https://example.com/callback";
|
||||||
|
var SSO_RESPONSE_TYPE = "code";
|
||||||
|
var SSO_CODE_CHALLENGE_METHOD = "S256";
|
||||||
|
var SSO_POST_LOGOUT_REDIRECT = "http://example.com?logout=1";
|
||||||
|
var CALENDAR_BASE_URL = "https://calendar.example.com";
|
||||||
@@ -31,6 +31,7 @@
|
|||||||
rel="stylesheet"
|
rel="stylesheet"
|
||||||
/>
|
/>
|
||||||
<title>React App</title>
|
<title>React App</title>
|
||||||
|
<script src="<%= assetPrefix %>/.env.js"></script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import { cp } from "node:fs";
|
|||||||
|
|
||||||
export async function getCalendars(userId: string, opaque_token: string) {
|
export async function getCalendars(userId: string, opaque_token: string) {
|
||||||
const response = await fetch(
|
const response = await fetch(
|
||||||
`${process.env.PUBLIC_CALENDAR_BASE_URL}/dav/calendars/${userId}.json?personal=true&sharedDelegationStatus=accepted&sharedPublicSubscription=true&withRights=true`,
|
`${(window as any).CALENDAR_BASE_URL}/dav/calendars/${userId}.json?personal=true&sharedDelegationStatus=accepted&sharedPublicSubscription=true&withRights=true`,
|
||||||
{
|
{
|
||||||
headers: {
|
headers: {
|
||||||
Accept: "application/calendar+json",
|
Accept: "application/calendar+json",
|
||||||
@@ -16,7 +16,7 @@ export async function getCalendars(userId: string, opaque_token: string) {
|
|||||||
|
|
||||||
export async function getCalendar(id: string, opaque_token: string) {
|
export async function getCalendar(id: string, opaque_token: string) {
|
||||||
const response = await fetch(
|
const response = await fetch(
|
||||||
`${process.env.PUBLIC_CALENDAR_BASE_URL}/dav/calendars/${id}.json`,
|
`${(window as any).CALENDAR_BASE_URL}/dav/calendars/${id}.json`,
|
||||||
{
|
{
|
||||||
method: "REPORT",
|
method: "REPORT",
|
||||||
headers: {
|
headers: {
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
import * as client from "openid-client";
|
import * as client from "openid-client";
|
||||||
|
|
||||||
export const clientConfig = {
|
export const clientConfig = {
|
||||||
url: process.env.PUBLIC_SSO_BASE_URL ?? "",
|
url: (window as any).SSO_BASE_URL ?? "",
|
||||||
client_id: process.env.PUBLIC_SSO_CLIENT_ID ?? "",
|
client_id: (window as any).SSO_CLIENT_ID ?? "",
|
||||||
scope: process.env.PUBLIC_SSO_SCOPE ?? "",
|
scope: (window as any).SSO_SCOPE ?? "",
|
||||||
redirect_uri: process.env.PUBLIC_SSO_REDIRECT_URI ?? "",
|
redirect_uri: (window as any).SSO_REDIRECT_URI ?? "",
|
||||||
response_type: process.env.PUBLIC_SSO_RESPONSE_TYPE ?? "",
|
response_type: (window as any).SSO_RESPONSE_TYPE ?? "",
|
||||||
code_challenge_method: process.env.PUBLIC_SSO_CODE_CHALLENGE_METHOD ?? "",
|
code_challenge_method: (window as any).SSO_CODE_CHALLENGE_METHOD ?? "",
|
||||||
post_logout_redirect_uri: process.env.PUBLIC_SSO_POST_LOGOUT_REDIRECT ?? "",
|
post_logout_redirect_uri: (window as any).SSO_POST_LOGOUT_REDIRECT ?? "",
|
||||||
};
|
};
|
||||||
|
|
||||||
export async function getClientConfig() {
|
export async function getClientConfig() {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
export default async function getOpenPaasUserId(opaque_token: string) {
|
export default async function getOpenPaasUserId(opaque_token: string) {
|
||||||
const response = await fetch(
|
const response = await fetch(
|
||||||
`${process.env.PUBLIC_CALENDAR_BASE_URL}/api/user`,
|
`${(window as any).CALENDAR_BASE_URL}/api/user`,
|
||||||
{
|
{
|
||||||
headers: {
|
headers: {
|
||||||
Authorization: `Bearer ${opaque_token}`,
|
Authorization: `Bearer ${opaque_token}`,
|
||||||
|
|||||||
Reference in New Issue
Block a user