summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--app.js4
-rw-r--r--app.json4
-rw-r--r--config.json.example1
-rw-r--r--docs/configuration.md25
-rw-r--r--lib/config/default.js1
-rw-r--r--lib/config/environment.js1
-rw-r--r--lib/config/index.js5
-rw-r--r--lib/web/statusRouter.js3
-rw-r--r--locales/ml.json130
-rw-r--r--public/js/index.js2
-rw-r--r--public/js/lib/common/constant.ejs2
-rw-r--r--public/js/lib/common/login.js4
-rw-r--r--public/js/lib/editor/index.js16
-rw-r--r--public/js/locale.js2
-rw-r--r--public/views/index/body.ejs1
15 files changed, 174 insertions, 27 deletions
diff --git a/app.js b/app.js
index d102e816..97eebcc0 100644
--- a/app.js
+++ b/app.js
@@ -120,7 +120,7 @@ if (config.csp.enable) {
}
i18n.configure({
- locales: ['en', 'zh-CN', 'zh-TW', 'fr', 'de', 'ja', 'es', 'ca', 'el', 'pt', 'it', 'tr', 'ru', 'nl', 'hr', 'pl', 'uk', 'hi', 'sv', 'eo', 'da', 'ko', 'id', 'sr', 'vi', 'ar', 'cs', 'sk'],
+ locales: ['en', 'zh-CN', 'zh-TW', 'fr', 'de', 'ja', 'es', 'ca', 'el', 'pt', 'it', 'tr', 'ru', 'nl', 'hr', 'pl', 'uk', 'hi', 'sv', 'eo', 'da', 'ko', 'id', 'sr', 'vi', 'ar', 'cs', 'sk', 'ml'],
cookie: 'locale',
indent: ' ', // this is the style poeditor.com exports it, this creates less churn
directory: path.join(__dirname, '/locales'),
@@ -147,7 +147,7 @@ app.use(session({
rolling: true, // reset maxAge on every response
cookie: {
maxAge: config.sessionLife,
- sameSite: 'lax',
+ sameSite: config.cookiePolicy, // be careful: setting a SameSite value of none without https breaks the editor
secure: config.useSSL || config.protocolUseSSL || false
},
store: sessionStore
diff --git a/app.json b/app.json
index f2a2b74c..4d68c0df 100644
--- a/app.json
+++ b/app.json
@@ -56,6 +56,10 @@
"description": "set to use ssl protocol for resources path (only applied when domain is set)",
"required": false
},
+ "CMD_COOKIE_POLICY": {
+ "description": "Set whether cookies should be sent cross-origin (SameSite value)",
+ "required": false
+ },
"CMD_URL_ADDPORT": {
"description": "set to add port on callback url (port 80 or 443 won't applied) (only applied when domain is set)",
"required": false
diff --git a/config.json.example b/config.json.example
index 0366c3b2..84ae53bd 100644
--- a/config.json.example
+++ b/config.json.example
@@ -35,6 +35,7 @@
"addDisqus": true,
"addGoogleAnalytics": true
},
+ "cookiePolicy": "strict",
"db": {
"username": "",
"password": "",
diff --git a/docs/configuration.md b/docs/configuration.md
index a6f63168..af4f26ce 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -69,18 +69,19 @@ these are rarely used for various reasons.
| `urlAddPort` | `CMD_URL_ADDPORT` | **`false`** or `true` | set to add port on callback URL (ports `80` or `443` won't be applied) (only applied when domain is set) |
| `allowOrigin` | `CMD_ALLOW_ORIGIN` | **`['localhost']`**, `['codimd.org']`, `[localhost, codimd.org]` | domain name whitelist (use comma to separate) |
-## CSP and HSTS
-
-| config file | environment | **default** and example value | description |
-| ----------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| `hsts` | | `{"enable": true, "maxAgeSeconds": 31536000, "includeSubdomains": true, "preload": true}` | [HSTS](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security) options to use with HTTPS (default is the example value, max age is a year) |
-| | `CMD_HSTS_ENABLE` | **`true`** or `false` | set to enable [HSTS](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security) if HTTPS is also enabled (default is ` true`) |
-| | `CMD_HSTS_INCLUDE_SUBDOMAINS` | **`true`** or `false` | set to include subdomains in HSTS (default is `true`) |
-| | `CMD_HSTS_MAX_AGE` | **`31536000`**, `60 * 60 * 24 * 365` | max duration in seconds to tell clients to keep HSTS status (default is a year) |
-| | `CMD_HSTS_PRELOAD` | **`true`** or `false` | whether to allow preloading of the site's HSTS status (e.g. into browsers) |
-| `csp` | | `{"enable": true, "directives": {"scriptSrc": "trustworthy-scripts.example.com"}, "upgradeInsecureRequests": "auto", "addDefaults": true}` | Configures [Content Security Policy](https://helmetjs.github.io/docs/csp/). Directives are passed to Helmet - see [their documentation](https://helmetjs.github.io/docs/csp/) for more information on the format. Some defaults are added to the configured values so that the application doesn't break. To disable this behaviour, set `addDefaults` to `false`. Further, if `usecdn` is on, some CDN locations are allowed too. By default (`auto`), insecure (HTTP) requests are upgraded to HTTPS via CSP if `useSSL` is on. To change this behaviour, set `upgradeInsecureRequests` to either `true` or `false`. |
-| | `CMD_CSP_ENABLE` | **`true`** or `false` | whether to enable Content Security Policy (directives cannot be configured with environment variables) |
-| | `CMD_CSP_REPORTURI` | **`undefined`**, `https://<someid>.report-uri.com/r/d/csp/enforce` | Allows to add a URL for CSP reports in case of violations |
+## Web security aspects
+
+| config file | environment | **default** and example value | description |
+| -------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `hsts` | | `{"enable": true, "maxAgeSeconds": 31536000, "includeSubdomains": true, "preload": true}` | [HSTS](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security) options to use with HTTPS (default is the example value, max age is a year) |
+| | `CMD_HSTS_ENABLE` | **`true`** or `false` | set to enable [HSTS](https://en.wikipedia.org/wiki/HTTP_Strict_Transport_Security) if HTTPS is also enabled (default is ` true`) |
+| | `CMD_HSTS_INCLUDE_SUBDOMAINS` | **`true`** or `false` | set to include subdomains in HSTS (default is `true`) |
+| | `CMD_HSTS_MAX_AGE` | **`31536000`**, `60 * 60 * 24 * 365` | max duration in seconds to tell clients to keep HSTS status (default is a year) |
+| | `CMD_HSTS_PRELOAD` | **`true`** or `false` | whether to allow preloading of the site's HSTS status (e.g. into browsers) |
+| `csp` | | `{"enable": true, "directives": {"scriptSrc": "trustworthy-scripts.example.com"}, "upgradeInsecureRequests": "auto", "addDefaults": true}` | Configures [Content Security Policy](https://helmetjs.github.io/docs/csp/). Directives are passed to Helmet - see [their documentation](https://helmetjs.github.io/docs/csp/) for more information on the format. Some defaults are added to the configured values so that the application doesn't break. To disable this behaviour, set `addDefaults` to `false`. Further, if `usecdn` is on, some CDN locations are allowed too. By default (`auto`), insecure (HTTP) requests are upgraded to HTTPS via CSP if `useSSL` is on. To change this behaviour, set `upgradeInsecureRequests` to either `true` or `false`. |
+| | `CMD_CSP_ENABLE` | **`true`** or `false` | whether to enable Content Security Policy (directives cannot be configured with environment variables) |
+| | `CMD_CSP_REPORTURI` | **`undefined`**, `https://<someid>.report-uri.com/r/d/csp/enforce` | Allows to add a URL for CSP reports in case of violations |
+| `cookiePolicy` | `CMD_COOKIE_POLICY` | **`lax`**, `strict` or `none` | Set a SameSite policy whether cookies are send from cross-origin. Be careful: setting a SameSite value of none without https breaks the editor |
## Privacy and External Requests
diff --git a/lib/config/default.js b/lib/config/default.js
index 9284882a..38bb164b 100644
--- a/lib/config/default.js
+++ b/lib/config/default.js
@@ -27,6 +27,7 @@ module.exports = {
upgradeInsecureRequests: 'auto',
reportURI: undefined
},
+ cookiePolicy: 'lax',
protocolUseSSL: false,
useCDN: false,
allowAnonymous: true,
diff --git a/lib/config/environment.js b/lib/config/environment.js
index 2d76286f..cf9fb5a1 100644
--- a/lib/config/environment.js
+++ b/lib/config/environment.js
@@ -22,6 +22,7 @@ module.exports = {
enable: toBooleanConfig(process.env.CMD_CSP_ENABLE),
reportURI: process.env.CMD_CSP_REPORTURI
},
+ cookiePolicy: process.env.CMD_COOKIE_POLICY,
protocolUseSSL: toBooleanConfig(process.env.CMD_PROTOCOL_USESSL),
allowOrigin: toArrayConfig(process.env.CMD_ALLOW_ORIGIN),
useCDN: toBooleanConfig(process.env.CMD_USECDN),
diff --git a/lib/config/index.js b/lib/config/index.js
index ee4817b3..b5461a8d 100644
--- a/lib/config/index.js
+++ b/lib/config/index.js
@@ -51,6 +51,11 @@ if (['debug', 'verbose', 'info', 'warn', 'error'].includes(config.loglevel)) {
logger.error('Selected loglevel %s doesn\'t exist, using default level \'debug\'. Available options: debug, verbose, info, warn, error', config.loglevel)
}
+if (!['strict', 'lax', 'none'].includes(config.cookiePolicy)) {
+ logger.error('Cookie SameSite policy %s does not exist. Falling back to lax. Available values are: strict, lax, none.', config.cookiePolicy)
+ config.cookiePolicy = 'lax'
+}
+
// load LDAP CA
if (config.ldap.tlsca) {
let ca = config.ldap.tlsca.split(',')
diff --git a/lib/web/statusRouter.js b/lib/web/statusRouter.js
index 025aafd4..febe2df3 100644
--- a/lib/web/statusRouter.js
+++ b/lib/web/statusRouter.js
@@ -97,7 +97,8 @@ statusRouter.get('/config', function (req, res) {
version: config.fullversion,
DROPBOX_APP_KEY: config.dropbox.appKey,
allowedUploadMimeTypes: config.allowedUploadMimeTypes,
- linkifyHeaderStyle: config.linkifyHeaderStyle
+ linkifyHeaderStyle: config.linkifyHeaderStyle,
+ cookiePolicy: config.cookiePolicy
}
res.set({
'Cache-Control': 'private', // only cache by client
diff --git a/locales/ml.json b/locales/ml.json
new file mode 100644
index 00000000..cc91d4e6
--- /dev/null
+++ b/locales/ml.json
@@ -0,0 +1,130 @@
+{
+ "Collaborative markdown notes": "സംയോജിത മാർക് ഡൗൺ കുറിപ്പുകൾ",
+ "Realtime collaborative markdown notes on all platforms.": "മാർക്ക് ഡൗൺ കുറിപ്പുകളിൽ ഏത് പ്ലാറ്റ് ഫോമിൽ നിന്നും തത്സമയം സഹകരിക്കാൻ",
+ "Best way to write and share your knowledge in markdown.": "മാർക് ഡൗൺ കുറിപ്പുകൾ എഴുതാനും പങ്കുവെക്കാനുമുള്ള ഏറ്റവും മികച്ച പ്ലാറ്റ്ഫോം ",
+ "Intro": "ആമുഖം ",
+ "History": "ചരിത്രം",
+ "New guest note": "പുതിയ അതിഥി കുറിപ്പ് ",
+ "Collaborate with URL": "തത്സമയ സഹകരണം",
+ "Support charts and MathJax": "ചാർട്ടുകളും മാത്ത്ജാക്‌സും കൈകാര്യം ചെയ്യുന്നു",
+ "Support slide mode": "സ്ലൈഡ് മോഡ് പിന്തുണക്കുന്നു",
+ "Sign In": "സൈൻ ഇൻ ",
+ "Below is the history from browser": "ഈ ബ്രൗസറിലെ ചരിത്രം ചുവടെ",
+ "Welcome!": "സ്വാഗതം!",
+ "New note": "പുതിയ കുറിപ്പ്",
+ "or": "അല്ലെങ്കിൽ",
+ "Sign Out": "സൈൻ ഔട്ട്",
+ "Explore all features": "എല്ലാ സൗകര്യങ്ങളും പരിശോധിക്കുക",
+ "Select tags...": "ടാഗുകൾ തിരഞ്ഞെടുക്കുക",
+ "Search keyword...": "സൂചകപദം തിരയുക ",
+ "Sort by title": "ശീർഷകക്രമത്തിൽ ",
+ "Title": "ശീർഷകം",
+ "Sort by time": "സമയക്രമത്തിൽ ",
+ "Time": "സമയം ",
+ "Export history": "ചരിത്രം പുറത്തെത്തിക്കുക",
+ "Import history": "ചരിത്രം അകത്തെത്തിക്കുക",
+ "Clear history": "ചരിത്രം കളയുക",
+ "Refresh history": "ചരിത്രം പുതുക്കുക",
+ "No history": "ചരിത്രമില്ല",
+ "Import from browser": "ബ്രൗസറിൽ നിന്നും കൊണ്ടുവരിക ",
+ "Releases": "പ്രസിദ്ധീകരണം ",
+ "Are you sure?": "തീർച്ചയാണോ?",
+ "Do you really want to delete this note?": "ഈ കുറിപ്പ് നശിപ്പിക്കാൻ ആഗ്രഹിക്കുന്നുവോ?",
+ "All users will lose their connection.": "എല്ലാവർക്കും ബന്ധം നഷ്ടപ്പെടും",
+ "Cancel": "ഉപേക്ഷിക്കുക ",
+ "Yes, do it!": "അതെ, ചെയ്യൂ",
+ "Choose method": "രീതി തിരഞ്ഞെടുക്കുക ",
+ "Sign in via %s": "%s വഴി സൈൻ ഇൻചെയ്യുക",
+ "New": "പുതിയത് ",
+ "Publish": "പ്രസിദ്ധീകരിക്കുക",
+ "Extra": "മറ്റുള്ള ",
+ "Revision": "തിരുത്തലുകൾ",
+ "Slide Mode": "സ്ലൈഡ് ബോർഡ് ",
+ "Export": "പുറത്തേക്ക്",
+ "Import": "അകത്തേക്ക്",
+ "Clipboard": "ക്ലിപ്ബോർഡ് ",
+ "Download": "ഡൌൺലോഡ് ",
+ "Raw HTML": "തനി HTML",
+ "Edit": "തിരുത്തുക ",
+ "View": "കാണുക",
+ "Both": "രണ്ടും ",
+ "Help": "സഹായം ",
+ "Upload Image": "ചിത്രം അപ്‌ലോഡ് ചെയ്യുക",
+ "Menu": "മെനു ",
+ "This page need refresh": "ഈ പേജ് പുതുക്കണം ",
+ "You have an incompatible client version.": "നിങ്ങളുടെ സംവിധാനത്തിന്റെ നിലവിലെ പതിപ്പ് പൊരുത്തപ്പെടുന്നില്ല ",
+ "Refresh to update.": "പുതുക്കാനായി വീണ്ടും തുറക്കൂ",
+ "New version available!": "പുതിയ പതിപ്പ് ലഭ്യമാണ്",
+ "See releases notes here": "പ്രസിദ്ധീകരണക്കുറിപ്പുകൾ ഇവിടെ ",
+ "Refresh to enjoy new features.": "പുതിയ സൗകര്യങ്ങൾക്കായി വീണ്ടും തുറക്കൂ ",
+ "Your user state has changed.": "നിങ്ങളുടെ സ്ഥിതി മാറി",
+ "Refresh to load new user state.": "പുതിയ സ്ഥിതിയ്ക്കായി വീണ്ടും തുറക്കൂ ",
+ "Refresh": "വീണ്ടും തുറക്കൂ ",
+ "Contacts": "ബന്ധങ്ങൾ ",
+ "Report an issue": "പ്രശ്‍നം പറയൂ ",
+ "Meet us on %s": "ഞങ്ങളെ %s-ൽ കാണാം",
+ "Send us email": "ഞങ്ങൾക്കൊരു ഇമെയിൽ അയക്കുക ",
+ "Documents": "രേഖകൾ",
+ "Features": "സൗകര്യങ്ങൾ",
+ "YAML Metadata": "YAML മെറ്റാഡാറ്റ",
+ "Slide Example": "സ്ലൈഡിന് ഉദാഹരണം ",
+ "Cheatsheet": "ചീറ്റ്ഷീറ്റ്",
+ "Example": "ഉദാഹരണം",
+ "Syntax": "സിന്റാക്‌സ്",
+ "Header": "തലക്കെട്ട് ",
+ "Unordered List": "ക്രമമില്ലാത്ത പട്ടിക ",
+ "Ordered List": "ക്രമത്തിലുള്ള പട്ടിക ",
+ "Todo List": "ഒത്തുനോക്കുക ",
+ "Blockquote": "ഉദ്ധരണികൂട്ടം ",
+ "Bold font": "കട്ടിയാക്കുക",
+ "Italics font": "ചെരിക്കുക",
+ "Strikethrough": "കുറുകെ വരക്കുക",
+ "Inserted text": "അടിവരയിട്ട വാചകം",
+ "Marked text": "എടുത്തുകാണിച്ച വാചകം",
+ "Link": "ലിങ്ക്",
+ "Image": "ചിത്രം",
+ "Code": "കോഡ്",
+ "Externals": "പുറത്തുള്ളത് ",
+ "This is a alert area.": "ഇതൊരു സൂചനാ സ്ഥലം ആണ് ",
+ "Revert": "തിരിച്ചാക്കുക",
+ "Import from clipboard": "ക്ലിപ് ബോർഡിൽ നിന്നും അകത്തെത്തിക്കുക",
+ "Paste your markdown or webpage here...": "നിങ്ങളുടെ മാർക്ക്ഡൗണോ വെബ്പേജോ ഇവിടെ പതിക്കുക ",
+ "Clear": "നീക്കം ചെയ്യുക",
+ "This note is locked": "ഈ കുറിപ്പ് പൂട്ടിയിരിക്കുന്നു ",
+ "Sorry, only owner can edit this note.": "ക്ഷമിക്കണം, ഉടമയ്ക്ക് മാത്രമേ ഇത് തിരുത്താനാകൂ",
+ "OK": "ശരി",
+ "Reach the limit": "പരിധി എത്തുക",
+ "Sorry, you've reached the max length this note can be.": "ക്ഷമിക്കണം, നിങ്ങൾ ഈ കുറിപ്പിനെത്താവുന്ന പരമാവധി വലിപ്പത്തിൽ എത്തിയിരിക്കുന്നു ",
+ "Please reduce the content or divide it to more notes, thank you!": "കുറിപ്പ് ചെറുതാക്കുക",
+ "Import from Gist": "സാരാംശം എടുക്കുക ",
+ "Paste your gist url here...": "സാരാംശത്തിലേക്കുള്ള വഴി ഇവിടെ പതിക്കുക ",
+ "Import from Snippet": "ശകലത്തിൽ നിന്നും കൊണ്ടുവരിക",
+ "Select From Available Projects": "ലഭ്യമായ പദ്ധതികളിൽ നിന്നും തിരഞ്ഞെടുക്കുക",
+ "Select From Available Snippets": "ലഭ്യമായ ശകലത്തിൽ നിന്നും തിരഞ്ഞെടുക്കുക",
+ "OR": "അല്ലെങ്കിൽ",
+ "Export to Snippet": "ശകലത്തിലേക്ക് മാറ്റുക ",
+ "Select Visibility Level": "കാഴ്ചയുടെ പരിധി തിരഞ്ഞെടുക്കുക",
+ "Night Theme": "ഇരുണ്ട ദൃശ്യം ",
+ "Follow us on %s and %s.": "ഞങ്ങളെ %s-ലും %s-ലും പിന്തുടരൂ",
+ "Privacy": "സ്വകാര്യത",
+ "Terms of Use": "ഉപയോഗനിർദേശങ്ങൾ",
+ "Do you really want to delete your user account?": "ഈ ഇടപാടുകൾ ശരിക്കും ഉപേക്ഷിക്കുകയാണോ ",
+ "This will delete your account, all notes that are owned by you and remove all references to your account from other notes.": "നിങ്ങളുടെ കുറിപ്പുകളും പരാമർശങ്ങളും ഉൾപ്പടെ നിങ്ങളുടെ എല്ലാ ഇടപാടുകളും ഇത് ഇല്ലാതാക്കും",
+ "Delete user": "ഉപയോക്താവിനെ കളയുക",
+ "Export user data": "ഉപയോക്താവിന്റെ വിവരങ്ങൾ പുറത്തെത്തിക്കുക ",
+ "Help us translating on %s": "%s ലേക്ക് പരിഭാഷപ്പെടുത്താൻ ഞങ്ങളെ സഹായിക്കൂ ",
+ "Source Code": "സോഴ്സ് കോഡ്",
+ "Register": "രജിസ്റ്റർ ",
+ "Powered by %s": "%s ന്റെ പിന്തുണയാൽ ",
+ "Help us translating": "പരിഭാഷപ്പെടുത്താൻ ഞങ്ങളെ സഹായിക്കുക",
+ "Join the community": "കൂട്ടായ്മയുടെ ഭാഗമാവൂ",
+ "Imprint": "അടയാളപ്പെടുത്തൂ ",
+ "Freely - Anyone can edit": "സ്വന്തന്ത്രം- ആർക്കും തിരുത്താം ",
+ "Editable - Signed-in people can edit": "തിരുത്താവുന്നതു - ഇടപാടുകാർക്കു മാത്രം ",
+ "Limited - Signed-in people can edit (forbid guests)": "പരിമിതം- ഇടപാടുകാർക്കു മാത്രം കാണാനും തിരുത്താനും (ഇടപാടുകാർക്കു കാണാം)",
+ "Locked - Only owner can edit": "പൂട്ടിയിരിക്കുന്നു- ഉപഭോക്താവിന് മാത്രം തിരുത്താം ",
+ "Protected - Only owner can edit (forbid guests)": "സംരക്ഷിച്ചിരിക്കുന്നു -ഉടമക്ക് മാത്രം തിരുത്താം (ഇടപാടുകാർക്കു കാണാം )",
+ "Private - Only owner can view & edit": "സ്വകാര്യം -ഉടമക്ക് മാത്രം കാണാനും തിരുത്താനും ",
+ "changed": "changed",
+ "created": "created"
+} \ No newline at end of file
diff --git a/public/js/index.js b/public/js/index.js
index 3eaba0ee..9946e6fd 100644
--- a/public/js/index.js
+++ b/public/js/index.js
@@ -1599,7 +1599,7 @@ function toggleNightMode () {
} else {
Cookies.set('nightMode', !isActive, {
expires: 365,
- sameSite: 'strict'
+ sameSite: window.cookiePolicy
})
}
}
diff --git a/public/js/lib/common/constant.ejs b/public/js/lib/common/constant.ejs
index 114a9077..2a32c333 100644
--- a/public/js/lib/common/constant.ejs
+++ b/public/js/lib/common/constant.ejs
@@ -8,3 +8,5 @@ window.allowedUploadMimeTypes = <%- JSON.stringify(allowedUploadMimeTypes) %>
window.linkifyHeaderStyle = '<%- linkifyHeaderStyle %>'
window.DROPBOX_APP_KEY = '<%- DROPBOX_APP_KEY %>'
+
+window.cookiePolicy = '<%- cookiePolicy %>'
diff --git a/public/js/lib/common/login.js b/public/js/lib/common/login.js
index 931c115f..3f7a3e4d 100644
--- a/public/js/lib/common/login.js
+++ b/public/js/lib/common/login.js
@@ -20,12 +20,12 @@ export function resetCheckAuth () {
export function setLoginState (bool, id) {
Cookies.set('loginstate', bool, {
expires: 365,
- sameSite: 'strict'
+ sameSite: window.cookiePolicy
})
if (id) {
Cookies.set('userid', id, {
expires: 365,
- sameSite: 'strict'
+ sameSite: window.cookiePolicy
})
} else {
Cookies.remove('userid')
diff --git a/public/js/lib/editor/index.js b/public/js/lib/editor/index.js
index 07ef58a1..d86ebf3c 100644
--- a/public/js/lib/editor/index.js
+++ b/public/js/lib/editor/index.js
@@ -304,13 +304,13 @@ export default class Editor {
if (this.editor.getOption('indentWithTabs')) {
Cookies.set('indent_type', 'tab', {
expires: 365,
- sameSite: 'strict'
+ sameSite: window.cookiePolicy
})
type.text('Tab Size:')
} else {
Cookies.set('indent_type', 'space', {
expires: 365,
- sameSite: 'strict'
+ sameSite: window.cookiePolicy
})
type.text('Spaces:')
}
@@ -322,12 +322,12 @@ export default class Editor {
if (this.editor.getOption('indentWithTabs')) {
Cookies.set('tab_size', unit, {
expires: 365,
- sameSite: 'strict'
+ sameSite: window.cookiePolicy
})
} else {
Cookies.set('space_units', unit, {
expires: 365,
- sameSite: 'strict'
+ sameSite: window.cookiePolicy
})
}
widthLabel.text(unit)
@@ -396,7 +396,7 @@ export default class Editor {
var keymap = this.editor.getOption('keyMap')
Cookies.set('keymap', keymap, {
expires: 365,
- sameSite: 'strict'
+ sameSite: window.cookiePolicy
})
label.text(keymap)
this.restoreOverrideEditorKeymap()
@@ -445,7 +445,7 @@ export default class Editor {
this.editor.setOption('theme', theme)
Cookies.set('theme', theme, {
expires: 365,
- sameSite: 'strict'
+ sameSite: window.cookiePolicy
})
checkTheme()
@@ -491,7 +491,7 @@ export default class Editor {
}
Cookies.set('spellcheck', mode === 'spell-checker', {
expires: 365,
- sameSite: 'strict'
+ sameSite: window.cookiePolicy
})
checkSpellcheck()
@@ -537,7 +537,7 @@ export default class Editor {
if (overrideBrowserKeymap.is(':checked')) {
Cookies.set('preferences-override-browser-keymap', true, {
expires: 365,
- sameSite: 'strict'
+ sameSite: window.cookiePolicy
})
this.restoreOverrideEditorKeymap()
} else {
diff --git a/public/js/locale.js b/public/js/locale.js
index aca35b98..8baa77fc 100644
--- a/public/js/locale.js
+++ b/public/js/locale.js
@@ -31,7 +31,7 @@ if (localeSelector.length > 0) {
localeSelector.change(function () {
Cookies.set('locale', $(this).val(), {
expires: 365,
- sameSite: 'strict'
+ sameSite: window.cookiePolicy
})
window.location.reload()
})
diff --git a/public/views/index/body.ejs b/public/views/index/body.ejs
index 1f941f14..0f2b8f33 100644
--- a/public/views/index/body.ejs
+++ b/public/views/index/body.ejs
@@ -153,6 +153,7 @@
<option value="ar">العربية</option>
<option value="cs">Česky</option>
<option value="sk">Slovensky</option>
+ <option value="ml">മലയാളം</option>
</select>
<p>
<%- __('Powered by %s', '<a href="https://codimd.org">CodiMD</a>') %> | <a href="<%- serverURL %>/s/release-notes" target="_blank" rel="noopener"><%= __('Releases') %></a> | <a href="<%- sourceURL %>" target="_blank" rel="noopener"><%= __('Source Code') %></a><% if(imprint) { %> | <a href="<%- serverURL %>/s/imprint" target="_blank" rel="noopener"><%= __('Imprint') %></a><% } %><% if(privacyStatement) { %> | <a href="<%- serverURL %>/s/privacy" target="_blank" rel="noopener"><%= __('Privacy') %></a><% } %><% if(termsOfUse) { %> | <a href="<%- serverURL %>/s/terms-of-use" target="_blank" rel="noopener"><%= __('Terms of Use') %></a><% } %>