mirror of
https://github.com/hedgedoc/hedgedoc.git
synced 2024-11-27 12:08:02 -05:00
style: linting markdown files
Linting markdown files according to default remark-lint configuration. Files inside the `public` directory were not linted. Signed-off-by: oupala <oupala@users.noreply.github.com>
This commit is contained in:
parent
7321990960
commit
2f462f90d4
38 changed files with 1468 additions and 1358 deletions
|
@ -4,4 +4,4 @@ Please refer to the release notes published under
|
|||
[`public/docs/release-notes.md`](public/docs/release-notes.md).
|
||||
|
||||
These are also available on each CodiMD instance under
|
||||
https://[domain-name]/release-notes
|
||||
<https://[domain-name]/release-notes>
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
Contributor Code of Conduct
|
||||
===
|
||||
# Contributor Code of Conduct
|
||||
|
||||
As contributors and maintainers of this project, and in the interest of fostering an open and
|
||||
welcoming community, we pledge to respect all people who contribute through reporting issues,
|
||||
|
@ -12,13 +11,18 @@ disability, personal appearance, body size, race, ethnicity, age, religion, or n
|
|||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery
|
||||
* Personal attacks
|
||||
* Trolling or insulting/derogatory comments
|
||||
* Public or private harassment
|
||||
* Publishing other's private information, such as physical or electronic addresses, without explicit
|
||||
- The use of sexualized language or imagery
|
||||
|
||||
- Personal attacks
|
||||
|
||||
- Trolling or insulting/derogatory comments
|
||||
|
||||
- Public or private harassment
|
||||
|
||||
- Publishing other's private information, such as physical or electronic addresses, without explicit
|
||||
permission
|
||||
* Other unethical or unprofessional conduct.
|
||||
|
||||
- Other unethical or unprofessional conduct.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits,
|
||||
code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. By
|
|
@ -3,17 +3,22 @@
|
|||
When contributing to this repository, please first discuss the change you wish to make via issue,
|
||||
email, or any other method with the owners of this repository before making a change.
|
||||
|
||||
Please note we have a [code of conduct](CODE_OF_CONDUCT.md), please follow it in all your
|
||||
Please note we have a [code of conduct](CODE-OF-CONDUCT.md), please follow it in all your
|
||||
interactions with the project.
|
||||
|
||||
## Pull Request Process
|
||||
|
||||
1. Ensure you signed all your commits with Developer Certificate of Origin (DCO).
|
||||
|
||||
2. Ensure any install or build dependencies are removed before the end of the layer when doing a
|
||||
build.
|
||||
|
||||
3. Update the README.md with details of changes to the interface, this includes new environment
|
||||
variables, exposed ports, useful file locations and container parameters.
|
||||
|
||||
4. Increase the version numbers in any examples files and the README.md to the new version that this
|
||||
Pull Request would represent. The versioning scheme we use is [SemVer](http://semver.org/).
|
||||
|
||||
5. You may merge the Pull Request in once you have the sign-off of two other developers, or if you
|
||||
do not have permission to do that, you may request the second reviewer to merge it for you.
|
||||
|
||||
|
@ -26,9 +31,9 @@ their contribution under the project's license.
|
|||
Please read [docs/legal/developer-certificate-of-origin.txt][dcofile].
|
||||
If you can certify it, then just add a line to every git commit message:
|
||||
|
||||
````
|
||||
```git
|
||||
Signed-off-by: Random J Developer <random@developer.example.org>
|
||||
````
|
||||
```
|
||||
|
||||
Use your real name (sorry, no pseudonyms or anonymous contributions).
|
||||
If you set your `user.name` and `user.email` git configs, you can sign your
|
||||
|
|
31
README.md
31
README.md
|
@ -1,5 +1,4 @@
|
|||
CodiMD
|
||||
===
|
||||
# CodiMD
|
||||
|
||||
[![#CodiMD on matrix.org][matrix.org-image]][matrix.org-url]
|
||||
[![build status][travis-image]][travis-url]
|
||||
|
@ -16,7 +15,6 @@ into its own organisation. [A longer writeup can be read in the history doc](doc
|
|||
|
||||
[![CodiMD 1.3.2 with its feature demonstration page open](docs/images/CodiMD-1.3.2-features.png)][codimd-demo-features]
|
||||
|
||||
|
||||
## Community and Contributions
|
||||
|
||||
We welcome contributions! There's a lot to do: If you would like to report bugs,
|
||||
|
@ -30,24 +28,22 @@ To stay up to date with our work or get support it's recommended to join our
|
|||
or subscribe to the [release feed][github-release-feed]. We also engage in
|
||||
regular [community calls][codimd-community-calls] ([RSS](https://community.codimd.org/t/codimd-community-call/19.rss)) which you are very welcome to join.
|
||||
|
||||
|
||||
## Installation / Upgrading
|
||||
|
||||
You can run CodiMD in a number of ways, and we created setup instructions for
|
||||
all of these:
|
||||
|
||||
* [Docker](docs/setup/docker.md)
|
||||
* [Kubernetes](docs/setup/kubernetes.md)
|
||||
* [Cloudron](docs/setup/cloudron.md)
|
||||
* [LinuxServer.io (multi-arch docker)](docs/setup/docker-linuxserver.md)
|
||||
* [Heroku](docs/setup/heroku.md)
|
||||
* [Manual setup](docs/setup/manual-setup.md)
|
||||
- [Docker](docs/setup/docker.md)
|
||||
- [Kubernetes](docs/setup/kubernetes.md)
|
||||
- [Cloudron](docs/setup/cloudron.md)
|
||||
- [LinuxServer.io (multi-arch docker)](docs/setup/docker-linuxserver.md)
|
||||
- [Heroku](docs/setup/heroku.md)
|
||||
- [Manual setup](docs/setup/manual-setup.md)
|
||||
|
||||
If you do not wish to run your own setup, you can find a commercial offering at
|
||||
https://hackmd.io. This is not the same codebase as this one, but it is a very
|
||||
<https://hackmd.io>. This is not the same codebase as this one, but it is a very
|
||||
similar project.
|
||||
|
||||
|
||||
## Configuration
|
||||
|
||||
Theres two main ways to [configure](docs/configuration.md) your CodiMD instance:
|
||||
|
@ -55,13 +51,12 @@ config file or environment variables. You can choose what works best for you.
|
|||
|
||||
CodiMD can integrate with
|
||||
|
||||
* facebook, twitter, github, gitlab, mattermost, dropbox, google, ldap, saml and [oauth2](docs/guides/auth/oauth.md) **for login**
|
||||
* imgur, s3, minio, azure **for image/attachment storage** (files can also be local!)
|
||||
* dropbox **for export and import**
|
||||
- facebook, twitter, github, gitlab, mattermost, dropbox, google, ldap, saml and [oauth2](docs/guides/auth/oauth.md) **for login**
|
||||
- imgur, s3, minio, azure **for image/attachment storage** (files can also be local!)
|
||||
- dropbox **for export and import**
|
||||
|
||||
More info about that can be found in the configuration docs above.
|
||||
|
||||
|
||||
## Browser support
|
||||
|
||||
To use CodiMD, your browser should match or exceed these versions:
|
||||
|
@ -73,14 +68,12 @@ To use CodiMD, your browser should match or exceed these versions:
|
|||
- ![Opera](https://raw.githubusercontent.com/alrra/browser-logos/HEAD/src/opera/opera_24x24.png) Opera >= 34, ![Opera Mini](https://raw.githubusercontent.com/alrra/browser-logos/HEAD/src/opera-mini/opera-mini_24x24.png) Opera Mini not supported
|
||||
- ![Android Browser](https://raw.githubusercontent.com/alrra/browser-logos/HEAD/src/android-webview-beta/android-webview-beta_24x24.png) Android Browser >= 4.4
|
||||
|
||||
|
||||
## Related Tools
|
||||
|
||||
Our community has created related tools, we'd like to highlight [codimd-cli](https://github.com/codimd/cli)
|
||||
which lets you use CodiMD from the comfort of your command line.
|
||||
|
||||
|
||||
# License
|
||||
## License
|
||||
|
||||
Licensed under AGPLv3. For our list of contributors, see [AUTHORS](AUTHORS).
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ You can choose to configure CodiMD with either a config file or with environment
|
|||
Environment variables take precedence over configurations from the config files. They generally start with `CMD_` for our own options, but we also list node-specific options you can configure this way.
|
||||
|
||||
- Environment variables are processed in [`lib/config/environment.js`](../lib/config/environment.js) - so this is the first place to look if anything is missing not obvious from this document. The default values are defined in [`lib/config/default.js`](../lib/config/default.js), in case you wonder if you even need to override it.
|
||||
|
||||
- The config file is processed in [`lib/config/index.js`](../lib/config/index.js) - so this is the first place to look if anything is missing not obvious from this document. The default values are defined in [`lib/config/default.js`](../lib/config/default.js), in case you wonder if you even need to override it. To get started, it is a good idea to take the `config.json.example` and copy it
|
||||
to `config.json` before filling in your own details.
|
||||
|
||||
|
@ -69,16 +70,16 @@ these are rarely used for various reasons.
|
|||
|
||||
## CSP and HSTS
|
||||
|
||||
| config file | environment | 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` | 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` | set to include subdomains in HSTS (default is `true`) | |
|
||||
| | `CMD_HSTS_MAX_AGE` | `31536000` | max duration in seconds to tell clients to keep HSTS status (default is a year) | |
|
||||
| | `CMD_HSTS_PRELOAD` | `true` | 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` | whether to enable Content Security Policy (directives cannot be configured with environment variables) |
|
||||
| | `CMD_CSP_REPORTURI` | `https://<someid>.report-uri.com/r/d/csp/enforce` | Allows to add a URL for CSP reports in case of violations | |
|
||||
| config file | environment | 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` | 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` | set to include subdomains in HSTS (default is `true`) |
|
||||
| | `CMD_HSTS_MAX_AGE` | `31536000` | max duration in seconds to tell clients to keep HSTS status (default is a year) |
|
||||
| | `CMD_HSTS_PRELOAD` | `true` | 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` | whether to enable Content Security Policy (directives cannot be configured with environment variables) |
|
||||
| | `CMD_CSP_REPORTURI` | `https://<someid>.report-uri.com/r/d/csp/enforce` | Allows to add a URL for CSP reports in case of violations |
|
||||
|
||||
## Privacy and External Requests
|
||||
|
||||
|
@ -156,7 +157,7 @@ these are rarely used for various reasons.
|
|||
|
||||
| config file | environment | example value | description |
|
||||
| ----------- | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
|
||||
| `ldap` | | `{providerName: ..., url: ..., bindDn: ..., bindCredentials: ..., searchBase: ..., searchFilter: ..., searchAttributes: ..., usernameField: ..., useridField: ..., tlsca: ...}` | An object detailing the LDAP connection. Refer to the [LDAP-AD guide](guides/auth/ldap-AD.md) for more details! |
|
||||
| `ldap` | | `{providerName: ..., url: ..., bindDn: ..., bindCredentials: ..., searchBase: ..., searchFilter: ..., searchAttributes: ..., usernameField: ..., useridField: ..., tlsca: ...}` | An object detailing the LDAP connection. Refer to the [LDAP-AD guide](guides/auth/ldap-ad.md) for more details! |
|
||||
| | `CMD_LDAP_URL` | `ldap://example.com` | URL of LDAP server |
|
||||
| | `CMD_LDAP_BINDDN` | no example | bindDn for LDAP access |
|
||||
| | `CMD_LDAP_BINDCREDENTIALS` | no example | bindCredentials for LDAP access |
|
||||
|
@ -179,19 +180,19 @@ these are rarely used for various reasons.
|
|||
|
||||
### OAuth2 Login
|
||||
|
||||
| config file | environment | example value | description |
|
||||
| ----------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| config file | environment | example value | description |
|
||||
| ----------- | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `oauth2` | | `{baseURL: ..., userProfileURL: ..., userProfileUsernameAttr: ..., userProfileDisplayNameAttr: ..., userProfileEmailAttr: ..., tokenURL: ..., authorizationURL: ..., clientID: ..., clientSecret: ..., scope: ...}` | An object detailing your OAuth2 provider. Refer to the [Mattermost](guides/auth/mattermost-self-hosted.md) or [Nextcloud](guides/auth/nextcloud.md) examples for more details! |
|
||||
| | `CMD_OAUTH2_USER_PROFILE_URL` | `https://example.com` | Where to retrieve information about a user after successful login. Needs to output JSON. (no default value) Refer to the [Mattermost](guides/auth/mattermost-self-hosted.md) or [Nextcloud](guides/auth/nextcloud.md) examples for more details on all of the `CMD_OAUTH2...` options. |
|
||||
| | `CMD_OAUTH2_USER_PROFILE_USERNAME_ATTR` | `name` | where to find the username in the JSON from the user profile URL. (no default value) |
|
||||
| | `CMD_OAUTH2_USER_PROFILE_DISPLAY_NAME_ATTR` | `display-name` | where to find the display-name in the JSON from the user profile URL. (no default value) |
|
||||
| | `CMD_OAUTH2_USER_PROFILE_EMAIL_ATTR` | `email` | where to find the email address in the JSON from the user profile URL. (no default value) |
|
||||
| | `CMD_OAUTH2_TOKEN_URL` | `https://example.com` | sometimes called token endpoint, please refer to the documentation of your OAuth2 provider (no default value) |
|
||||
| | `CMD_OAUTH2_AUTHORIZATION_URL` | `https://example.com` | authorization URL of your provider, please refer to the documentation of your OAuth2 provider (no default value) |
|
||||
| | `CMD_OAUTH2_CLIENT_ID` | `afae02fckafd...` | you will get this from your OAuth2 provider when you register CodiMD as OAuth2-client, (no default value) |
|
||||
| | `CMD_OAUTH2_CLIENT_SECRET` | `afae02fckafd...` | you will get this from your OAuth2 provider when you register CodiMD as OAuth2-client, (no default value) |
|
||||
| | `CMD_OAUTH2_PROVIDERNAME` | `My institution` | Optional name to be displayed at login form indicating the oAuth2 provider |
|
||||
| | `CMD_OAUTH2_SCOPE` | `openid email profile` | Scope to request for OIDC (OpenID Connect) providers. |
|
||||
| | `CMD_OAUTH2_USER_PROFILE_URL` | `https://example.com` | Where to retrieve information about a user after successful login. Needs to output JSON. (no default value) Refer to the [Mattermost](guides/auth/mattermost-self-hosted.md) or [Nextcloud](guides/auth/nextcloud.md) examples for more details on all of the `CMD_OAUTH2...` options. |
|
||||
| | `CMD_OAUTH2_USER_PROFILE_USERNAME_ATTR` | `name` | where to find the username in the JSON from the user profile URL. (no default value) |
|
||||
| | `CMD_OAUTH2_USER_PROFILE_DISPLAY_NAME_ATTR` | `display-name` | where to find the display-name in the JSON from the user profile URL. (no default value) |
|
||||
| | `CMD_OAUTH2_USER_PROFILE_EMAIL_ATTR` | `email` | where to find the email address in the JSON from the user profile URL. (no default value) |
|
||||
| | `CMD_OAUTH2_TOKEN_URL` | `https://example.com` | sometimes called token endpoint, please refer to the documentation of your OAuth2 provider (no default value) |
|
||||
| | `CMD_OAUTH2_AUTHORIZATION_URL` | `https://example.com` | authorization URL of your provider, please refer to the documentation of your OAuth2 provider (no default value) |
|
||||
| | `CMD_OAUTH2_CLIENT_ID` | `afae02fckafd...` | you will get this from your OAuth2 provider when you register CodiMD as OAuth2-client, (no default value) |
|
||||
| | `CMD_OAUTH2_CLIENT_SECRET` | `afae02fckafd...` | you will get this from your OAuth2 provider when you register CodiMD as OAuth2-client, (no default value) |
|
||||
| | `CMD_OAUTH2_PROVIDERNAME` | `My institution` | Optional name to be displayed at login form indicating the oAuth2 provider |
|
||||
| | `CMD_OAUTH2_SCOPE` | `openid email profile` | Scope to request for OIDC (OpenID Connect) providers. |
|
||||
|
||||
### SAML Login
|
||||
|
||||
|
|
|
@ -5,39 +5,38 @@ For code-autogeneration there is an OpenAPIv3-compatible description available [
|
|||
|
||||
## Notes
|
||||
These endpoints create notes, return information about them or export them.
|
||||
You have to replace _\<NOTE\>_ with either the alias or id of a note you want to work on.
|
||||
You have to replace *\<NOTE\>* with either the alias or id of a note you want to work on.
|
||||
|
||||
| Endpoint | HTTP-Method | Description |
|
||||
|---|---|---|
|
||||
| `/new` | `GET` | **Creates a new note.**<br>A random id will be assigned and the content will equal to the template (blank by default). After note creation a redirect is issued to the created note. |
|
||||
| `/new` | `POST` | **Imports some markdown data into a new note.**<br>A random id will be assigned and the content will equal to the body of the received HTTP-request. The `Content-Type: text/markdown` header should be set on this request. |
|
||||
| `/new/<ALIAS>` | `POST` | **Imports some markdown data into a new note with a given alias.**<br>This endpoint equals to the above one except that the alias from the url will be assigned to the note if [FreeURL-mode](../configuration-env-vars.md#users-and-privileges) is enabled. |
|
||||
| `/<NOTE>/download` or `/s/<SHORT-ID>/download` | `GET` | **Returns the raw markdown content of a note.** |
|
||||
| `/<NOTE>/pdf` | `GET` | **Returns a generated pdf version of the note.**<br>If pdf-support is disabled, a HTTP 403 will be returned.<br>_Please note: Currently pdf export is disabled generally because of a security problem with it._ |
|
||||
| `/<NOTE>/publish` | `GET` | **Redirects to the published version of the note.** |
|
||||
| `/<NOTE>/slide` | `GET` | **Redirects to the slide-presentation of the note.**<br>This is only useful on notes which are designed to be slides. |
|
||||
| `/<NOTE>/info` | `GET` | **Returns metadata about the note.**<br>This includes the title and description of the note as well as the creation date and viewcount. The data is returned as a JSON object. |
|
||||
| `/<NOTE>/revision` | `GET` | **Returns a list of the available note revisions.**<br>The list is returned as a JSON object with an array of revision-id and length associations. The revision-id equals to the timestamp when the revision was saved. |
|
||||
| `/<NOTE>/revision/<REVISION-ID>` | `GET` | **Returns the revision of the note with some metadata.**<br>The revision is returned as a JSON object with the content of the note and the authorship. |
|
||||
| `/<NOTE>/gist` | `GET` | **Creates a new GitHub Gist with the note's content.**<br>If [GitHub integration](../configuration-env-vars.md#github-login) is configured, the user will be redirected to GitHub and a new Gist with the content of the note will be created. |
|
||||
| Endpoint | HTTP-Method | Description |
|
||||
| ---------------------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `/new` | `GET` | **Creates a new note.**<br>A random id will be assigned and the content will equal to the template (blank by default). After note creation a redirect is issued to the created note. |
|
||||
| `/new` | `POST` | **Imports some markdown data into a new note.**<br>A random id will be assigned and the content will equal to the body of the received HTTP-request. The `Content-Type: text/markdown` header should be set on this request. |
|
||||
| `/new/<ALIAS>` | `POST` | **Imports some markdown data into a new note with a given alias.**<br>This endpoint equals to the above one except that the alias from the url will be assigned to the note if [FreeURL-mode](../configuration-env-vars.md#users-and-privileges) is enabled. |
|
||||
| `/<NOTE>/download` or `/s/<SHORT-ID>/download` | `GET` | **Returns the raw markdown content of a note.** |
|
||||
| `/<NOTE>/pdf` | `GET` | **Returns a generated pdf version of the note.**<br>If pdf-support is disabled, a HTTP 403 will be returned.<br>*Please note: Currently pdf export is disabled generally because of a security problem with it.* |
|
||||
| `/<NOTE>/publish` | `GET` | **Redirects to the published version of the note.** |
|
||||
| `/<NOTE>/slide` | `GET` | **Redirects to the slide-presentation of the note.**<br>This is only useful on notes which are designed to be slides. |
|
||||
| `/<NOTE>/info` | `GET` | **Returns metadata about the note.**<br>This includes the title and description of the note as well as the creation date and viewcount. The data is returned as a JSON object. |
|
||||
| `/<NOTE>/revision` | `GET` | **Returns a list of the available note revisions.**<br>The list is returned as a JSON object with an array of revision-id and length associations. The revision-id equals to the timestamp when the revision was saved. |
|
||||
| `/<NOTE>/revision/<REVISION-ID>` | `GET` | **Returns the revision of the note with some metadata.**<br>The revision is returned as a JSON object with the content of the note and the authorship. |
|
||||
| `/<NOTE>/gist` | `GET` | **Creates a new GitHub Gist with the note's content.**<br>If [GitHub integration](../configuration-env-vars.md#github-login) is configured, the user will be redirected to GitHub and a new Gist with the content of the note will be created. |
|
||||
|
||||
## User / History
|
||||
These endpoints return information about the current logged-in user and it's note history. If no user is logged-in, the most of this requests will fail with either a HTTP 403 or a JSON object containing `{"status":"forbidden"}`.
|
||||
|
||||
| Endpoint | HTTP-Method | Description |
|
||||
|---|---|---|
|
||||
| `/me` | `GET` | **Returns the profile data of the current logged-in user.**<br>The data is returned as a JSON object containing the user-id, the user's name and a url to the profile picture. |
|
||||
| `/me/export` | `GET` | **Exports a zip-archive with all notes of the current user.** |
|
||||
| `/history` | `GET` | **Returns a list of the last viewed notes.**<br>The list is returned as a JSON object with an array containing for each entry it's id, title, tags, last visit time and pinned status. |
|
||||
| `/history` | `POST` | **Replace user's history with a new one.**<br>The body must be form-encoded and contain a field `history` with a JSON-encoded array like its returned from the server when exporting the history. |
|
||||
| `/history` | `DELETE` | **Deletes the user's history.** |
|
||||
| `/history/<NOTE>` | `POST` | **Toggles the pinned status in the history for a note.**<br>The body must be form-encoded and contain a field `pinned` that is either `true` or `false`.
|
||||
| `/history/<NOTE>` | `DELETE` | **Deletes a note from the user's history.** |
|
||||
|
||||
| Endpoint | HTTP-Method | Description |
|
||||
| ----------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `/me` | `GET` | **Returns the profile data of the current logged-in user.**<br>The data is returned as a JSON object containing the user-id, the user's name and a url to the profile picture. |
|
||||
| `/me/export` | `GET` | **Exports a zip-archive with all notes of the current user.** |
|
||||
| `/history` | `GET` | **Returns a list of the last viewed notes.**<br>The list is returned as a JSON object with an array containing for each entry it's id, title, tags, last visit time and pinned status. |
|
||||
| `/history` | `POST` | **Replace user's history with a new one.**<br>The body must be form-encoded and contain a field `history` with a JSON-encoded array like its returned from the server when exporting the history. |
|
||||
| `/history` | `DELETE` | **Deletes the user's history.** |
|
||||
| `/history/<NOTE>` | `POST` | **Toggles the pinned status in the history for a note.**<br>The body must be form-encoded and contain a field `pinned` that is either `true` or `false`. |
|
||||
| `/history/<NOTE>` | `DELETE` | **Deletes a note from the user's history.** |
|
||||
|
||||
## CodiMD-server
|
||||
These endpoints return information about the running CodiMD instance.
|
||||
|
||||
| Endpoint | HTTP-Method | Description |
|
||||
|---|---|---|
|
||||
| `/status` | `GET` | **Returns the current status of the CodiMD instance.**<br>The data is returned as a JSON object containing the number of notes stored on the server, (distinct) online users and more. |
|
||||
| Endpoint | HTTP-Method | Description |
|
||||
| --------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `/status` | `GET` | **Returns the current status of the CodiMD instance.**<br>The data is returned as a JSON object containing the number of notes stored on the server, (distinct) online users and more. |
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
Developer Notes
|
||||
===
|
||||
# Developer Notes
|
||||
|
||||
## Preparing for running the code
|
||||
|
||||
|
@ -7,20 +6,20 @@ Developer Notes
|
|||
|
||||
1. Clone the repository with `git clone https://github.com/codimd/server.git codimd-server`
|
||||
(cloning is the preferred way, but you can also download and unzip a release)
|
||||
|
||||
2. Enter the directory and run `bin/setup`, which will install npm dependencies
|
||||
and create configs. The setup script is written in Bash, you would need bash
|
||||
as a prerequisite.
|
||||
|
||||
3. Setup the [config file](../configuration-config-file.md) or set up
|
||||
[environment variables](../configuration-env-vars.md).
|
||||
|
||||
|
||||
## Running the Code
|
||||
|
||||
Now that everything is in place, we can start CodiMD:
|
||||
|
||||
4. `yarn run build` will build the frontend bundle. It uses webpack to do that.
|
||||
5. Run the server with `node app.js`
|
||||
|
||||
1. `yarn run build` will build the frontend bundle. It uses webpack to do that.
|
||||
2. Run the server with `node app.js`
|
||||
|
||||
## Running the Code with Auto-Reload
|
||||
|
||||
|
@ -32,11 +31,11 @@ rebuild the frontend or restart the server if necessary.
|
|||
The commands will stay active in your terminal, so you will need multiple tabs
|
||||
to run both at the same time.
|
||||
|
||||
4. Use `yarn run dev` if you want webpack to continuously rebuild the frontend
|
||||
1. Use `yarn run dev` if you want webpack to continuously rebuild the frontend
|
||||
code.
|
||||
5. To auto-reload the server, the easiest method is to install [nodemon](https://www.npmjs.com/package/nodemon)
|
||||
and run `nodemon --watch app.js --watch lib --watch locales app.js`.
|
||||
|
||||
2. To auto-reload the server, the easiest method is to install [nodemon](https://www.npmjs.com/package/nodemon)
|
||||
and run `nodemon --watch app.js --watch lib --watch locales app.js`.
|
||||
|
||||
## Structure
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
Operational Transformation
|
||||
===
|
||||
# Operational Transformation
|
||||
|
||||
From 0.3.2, we started supporting operational transformation.
|
||||
It makes concurrent editing safe and will not break up other users' operations.
|
||||
|
@ -9,6 +8,6 @@ See more at [https://operational-transformation.github.io/](https://operational-
|
|||
|
||||
And even more in this 2010 article series:
|
||||
|
||||
* https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs_21.html
|
||||
* https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs_22.html
|
||||
* https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs.html
|
||||
- <https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs_21.html>
|
||||
- <https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs_22.html>
|
||||
- <https://drive.googleblog.com/2010/09/whats-different-about-new-google-docs.html>
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
Webpack
|
||||
===
|
||||
# Webpack
|
||||
|
||||
Webpack is a JavaScript build system for frontend code. You can find out all
|
||||
about it on [the webpack website](https://webpack.js.org/).
|
||||
|
@ -15,7 +14,6 @@ The `index` group for example bundles all javascript files and libraries used fo
|
|||
Entrypoints are referenced in the `plugins` section.
|
||||
The `HtmlWebpackPlugin` uses templates in `public/views/includes` to include the path to the generated resources in new templates under `public/views/build`. These templates are then used by the backend to serve HTML to the browser.
|
||||
|
||||
|
||||
**TODO:** Document which entry points are used for what.
|
||||
|
||||
## `webpack.htmlexport.js`
|
||||
|
@ -24,17 +22,16 @@ Packs all CSS from `public/js/htmlExport.js` to `build/html.min.css`.
|
|||
This file is then downloaded by client-side JS and used to create the HTML.
|
||||
See `exportToHTML()` in `public/js/extra.js`.
|
||||
|
||||
|
||||
## `webpack.dev.js`
|
||||
The development config uses both common configs, enables development mode and enables "cheap" source maps (lines only).
|
||||
If you need more detailed source maps while developing, you might want to use the `source-maps` option.
|
||||
See https://webpack.js.org/configuration/devtool/ for details.
|
||||
See <https://webpack.js.org/configuration/devtool/> for details.
|
||||
|
||||
## `webpack.prod.js`
|
||||
The production config uses both common configs and enables production mode.
|
||||
This automatically enables various optimizations (e.g. UglifyJS). See https://webpack.js.org/concepts/mode/ for details.
|
||||
This automatically enables various optimizations (e.g. UglifyJS). See <https://webpack.js.org/concepts/mode/> for details.
|
||||
|
||||
For the global app config, the name of the emitted chunks is changed to include the content hash.
|
||||
See https://webpack.js.org/guides/caching/ on why this is a good idea.
|
||||
See <https://webpack.js.org/guides/caching/> on why this is a good idea.
|
||||
|
||||
For the HTML export config, CSS minification is enabled.
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
Authentication guide - GitHub
|
||||
===
|
||||
# Authentication guide - GitHub
|
||||
|
||||
**Note:** *This guide was written before the renaming. Just replace `HackMD` with `CodiMD` in your mind :smile: thanks!*
|
||||
*Note:* This guide was written before the renaming. Just replace `HackMD` with `CodiMD` in your mind :smile: thanks!
|
||||
|
||||
1. Sign-in or sign-up for a GitHub account
|
||||
|
||||
2. Navigate to developer settings in your GitHub account [here](https://github.com/settings/developers) and select the "OAuth Apps" tab
|
||||
|
||||
3. Click on the **New OAuth App** button, to create a new OAuth App:
|
||||
![create-oauth-app](../../images/auth/create-oauth-app.png)
|
||||
|
||||
|
@ -17,19 +18,20 @@ Authentication guide - GitHub
|
|||
![application-page](../../images/auth/application-page.png)
|
||||
|
||||
6. Add the Client ID and Client Secret to your config.json file or pass them as environment variables
|
||||
* `config.json`:
|
||||
```js
|
||||
{
|
||||
"production": {
|
||||
"github": {
|
||||
"clientID": "3747d30eaccXXXXXXXXX",
|
||||
"clientSecret": "2a8e682948eee0c580XXXXXXXXXXXXXXXXXXXXXX"
|
||||
}
|
||||
- `config.json`:
|
||||
```js
|
||||
{
|
||||
"production": {
|
||||
"github": {
|
||||
"clientID": "3747d30eaccXXXXXXXXX",
|
||||
"clientSecret": "2a8e682948eee0c580XXXXXXXXXXXXXXXXXXXXXX"
|
||||
}
|
||||
}
|
||||
```
|
||||
* environment variables:
|
||||
```sh
|
||||
CMD_GITHUB_CLIENTID=3747d30eaccXXXXXXXXX
|
||||
CMD_GITHUB_CLIENTSECRET=2a8e682948eee0c580XXXXXXXXXXXXXXXXXXXXXX
|
||||
````
|
||||
}
|
||||
```
|
||||
|
||||
- environment variables:
|
||||
```sh
|
||||
CMD_GITHUB_CLIENTID=3747d30eaccXXXXXXXXX
|
||||
CMD_GITHUB_CLIENTSECRET=2a8e682948eee0c580XXXXXXXXXXXXXXXXXXXXXX
|
||||
````
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
GitLab (self-hosted)
|
||||
===
|
||||
# GitLab (self-hosted)
|
||||
|
||||
**Note:** *This guide was written before the renaming. Just replace `HackMD` with `CodiMD` in your mind :smile: thanks!*
|
||||
*Note:* This guide was written before the renaming. Just replace `HackMD` with `CodiMD` in your mind :smile: thanks!
|
||||
|
||||
1. Sign in to your GitLab
|
||||
2. Navigate to the application management page at `https://your.gitlab.domain/admin/applications` (admin permissions required)
|
||||
|
@ -14,10 +13,9 @@ GitLab (self-hosted)
|
|||
|
||||
![Application: HackMD](../../images/auth/gitlab-application-details.png)
|
||||
|
||||
|
||||
6. In the `docker-compose.yml` add the following environment variables to `app:` `environment:`
|
||||
|
||||
```
|
||||
```Dockerfile
|
||||
- CMD_DOMAIN=your.codimd.domain
|
||||
- CMD_URL_ADDPORT=true
|
||||
- CMD_PROTOCOL_USESSL=true
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
Keycloak/Red Hat SSO (self-hosted)
|
||||
===
|
||||
# Keycloak/Red Hat SSO (self-hosted)
|
||||
|
||||
## Prerequisites
|
||||
|
||||
|
@ -9,7 +8,7 @@ Where HTTPS is specified throughout, use HTTP instead. You may also have to spec
|
|||
|
||||
## Steps
|
||||
|
||||
1. Sign in to the administration portal for your Keycloak instance at https://keycloak.example.com/auth/admin/master/console
|
||||
1. Sign in to the administration portal for your Keycloak instance at <https://keycloak.example.com/auth/admin/master/console>
|
||||
|
||||
You may note that a separate realm is specified throughout this tutorial. It is best practice not to use the master realm, as it normally contains the realm-management client that federates access using the policies and permissions you can create.
|
||||
|
||||
|
@ -20,7 +19,7 @@ You may note that a separate realm is specified throughout this tutorial. It is
|
|||
|
||||
---
|
||||
|
||||
### Additional steps to circumvent generic OAuth2 issue:
|
||||
### Additional steps to circumvent generic OAuth2 issue
|
||||
|
||||
1. Select Client Scopes from the sidebar, and begin to create a new client scope using the Create button.
|
||||
2. Ensure that the **Name** field is set to `id`.
|
||||
|
@ -29,9 +28,9 @@ You may note that a separate realm is specified throughout this tutorial. It is
|
|||
|
||||
---
|
||||
|
||||
6. In the `docker-compose.yml` add the following environment variables to `app:` `environment:`
|
||||
5. In the `docker-compose.yml` add the following environment variables to `app:` `environment:`
|
||||
|
||||
```
|
||||
```Dockerfile
|
||||
CMD_OAUTH2_USER_PROFILE_URL=https://keycloak.example.com/auth/realms/your-realm/protocol/openid-connect/userinfo
|
||||
CMD_OAUTH2_USER_PROFILE_USERNAME_ATTR=preferred_username
|
||||
CMD_OAUTH2_USER_PROFILE_DISPLAY_NAME_ATTR=name
|
||||
|
@ -46,5 +45,5 @@ CMD_PROTOCOL_USESSL=true
|
|||
CMD_URL_ADDPORT=false
|
||||
```
|
||||
|
||||
7. Run `docker-compose up -d` to apply your settings.
|
||||
8. Sign in to your CodiMD using your Keycloak ID
|
||||
6. Run `docker-compose up -d` to apply your settings.
|
||||
7. Sign in to your CodiMD using your Keycloak ID
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
AD LDAP auth
|
||||
===
|
||||
# AD LDAP auth
|
||||
|
||||
To setup your CodiMD instance with Active Directory you need the following configs:
|
||||
|
||||
```
|
||||
```env
|
||||
CMD_LDAP_URL=ldap://internal.example.com
|
||||
CMD_LDAP_BINDDN=cn=binduser,cn=Users,dc=internal,dc=example,dc=com
|
||||
CMD_LDAP_BINDCREDENTIALS=<super secret password>
|
||||
|
@ -13,7 +12,6 @@ CMD_LDAP_USERIDFIELD=sAMAccountName
|
|||
CMD_LDAP_PROVIDERNAME=Example Inc AD
|
||||
```
|
||||
|
||||
|
||||
`CMD_LDAP_BINDDN` is either the `distinguishedName` or the `userPrincipalName`. *This can cause "username/password is invalid" when either this value or the password from `CMD_LDAP_BINDCREDENTIALS` are incorrect.*
|
||||
|
||||
`CMD_LDAP_SEARCHFILTER` matches on all users and uses either the email address or the `sAMAccountName` (usually the login name you also use to login to Windows).
|
||||
|
@ -24,7 +22,6 @@ CMD_LDAP_PROVIDERNAME=Example Inc AD
|
|||
|
||||
`CMD_LDAP_PROVIDERNAME` just the name written above the username and password field on the login page.
|
||||
|
||||
|
||||
Same in json:
|
||||
|
||||
```json
|
||||
|
@ -38,4 +35,4 @@ Same in json:
|
|||
},
|
||||
```
|
||||
|
||||
More details and example: https://www.npmjs.com/package/passport-ldapauth
|
||||
More details and example: <https://www.npmjs.com/package/passport-ldapauth>
|
|
@ -1,15 +1,16 @@
|
|||
Authentication guide - Mattermost (self-hosted)
|
||||
===
|
||||
# Authentication guide - Mattermost (self-hosted)
|
||||
|
||||
**Note:** *The Mattermost setup portion of this document is just a quick guide. See the [official documentation](https://docs.mattermost.com/developer/oauth-2-0-applications.html) for more details.*
|
||||
|
||||
This guide uses the generic OAuth2 module for compatibility with Mattermost version 5.0 and above.
|
||||
|
||||
1. Sign-in with an administrator account to your Mattermost instance
|
||||
|
||||
2. Make sure **OAuth 2.0 Service Provider** is enabled in the Main Menu (menu button next to your username in the top left corner) --> System Console --> Custom Integrations menu, which you can find at `https://your.mattermost.domain/admin_console/integrations/custom`
|
||||
![mattermost-enable-oauth2](../../images/auth/mattermost-enable-oauth2.png)
|
||||
|
||||
3. Navigate to the OAuth integration settings through Main Menu --> Integrations --> OAuth 2.0 Applications, at `https://your.mattermost.domain/yourteam/integrations/oauth2-apps`
|
||||
|
||||
4. Click on the **Add OAuth 2.0 Application** button to add a new OAuth application
|
||||
![mattermost-oauth-app-add](../../images/auth/mattermost-oauth-app-add.png)
|
||||
|
||||
|
@ -22,25 +23,26 @@ This guide uses the generic OAuth2 module for compatibility with Mattermost vers
|
|||
![mattermost-oauth-app-done](../../images/auth/mattermost-oauth-app-done.png)
|
||||
|
||||
7. Add the Client ID and Client Secret to your config.json file or pass them as environment variables
|
||||
* `config.json`:
|
||||
```javascript
|
||||
{
|
||||
"production": {
|
||||
"oauth2": {
|
||||
"baseURL": "https://your.mattermost.domain",
|
||||
"userProfileURL": "https://your.mattermost.domain/api/v4/users/me",
|
||||
"userProfileUsernameAttr": "id",
|
||||
"userProfileDisplayNameAttr": "username",
|
||||
"userProfileEmailAttr": "email",
|
||||
"tokenURL": "https://your.mattermost.domain/oauth/access_token",
|
||||
"authorizationURL": "https://your.mattermost.domain/oauth/authorize",
|
||||
"clientID": "ii4p1u3jz7dXXXXXXXXXXXXXXX",
|
||||
"clientSecret": "mqzzx6fydbXXXXXXXXXXXXXXXX"
|
||||
}
|
||||
- `config.json`:
|
||||
```javascript
|
||||
{
|
||||
"production": {
|
||||
"oauth2": {
|
||||
"baseURL": "https://your.mattermost.domain",
|
||||
"userProfileURL": "https://your.mattermost.domain/api/v4/users/me",
|
||||
"userProfileUsernameAttr": "id",
|
||||
"userProfileDisplayNameAttr": "username",
|
||||
"userProfileEmailAttr": "email",
|
||||
"tokenURL": "https://your.mattermost.domain/oauth/access_token",
|
||||
"authorizationURL": "https://your.mattermost.domain/oauth/authorize",
|
||||
"clientID": "ii4p1u3jz7dXXXXXXXXXXXXXXX",
|
||||
"clientSecret": "mqzzx6fydbXXXXXXXXXXXXXXXX"
|
||||
}
|
||||
}
|
||||
```
|
||||
* environment variables:
|
||||
}
|
||||
```
|
||||
|
||||
- environment variables:
|
||||
```sh
|
||||
CMD_OAUTH2_BASEURL=https://your.mattermost.domain
|
||||
CMD_OAUTH2_USER_PROFILE_URL=https://your.mattermost.domain/api/v4/users/me
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
Authentication guide - Nextcloud (self-hosted)
|
||||
===
|
||||
# Authentication guide - Nextcloud (self-hosted)
|
||||
|
||||
*This has been constructed using the [Nextcloud OAuth2 Documentation](https://docs.nextcloud.com/server/14/admin_manual/configuration_server/oauth2.html?highlight=oauth2) combined with [this issue comment on the nextcloud bugtracker](https://github.com/nextcloud/server/issues/5694#issuecomment-314761326).*
|
||||
|
||||
|
@ -22,24 +21,25 @@ This guide uses the generic OAuth2 module for compatibility with Nextcloud 13 an
|
|||
5. That's it for Nextcloud, the rest is configured in your CodiMD `config.json` or via the `CMD_` environment variables!
|
||||
|
||||
6. Add the Client ID and Client Secret to your `config.json` file or pass them as environment variables. Make sure you also replace `<your-nextcloud-domain>` with the right domain name.
|
||||
* `config.json`:
|
||||
```javascript
|
||||
{
|
||||
"production": {
|
||||
"oauth2": {
|
||||
"clientID": "ii4p1u3jz7dXXXXXXXXXXXXXXX",
|
||||
"clientSecret": "mqzzx6fydbXXXXXXXXXXXXXXXX",
|
||||
"authorizationURL": "https://<your-nextcloud-domain>/apps/oauth2/authorize",
|
||||
"tokenURL": "https://<your-nextcloud-domain>/apps/oauth2/api/v1/token",
|
||||
"userProfileURL": "https://<your-nextcloud-domain>/ocs/v2.php/cloud/user?format=json",
|
||||
"userProfileUsernameAttr": "ocs.data.id",
|
||||
"userProfileDisplayNameAttr": "ocs.data.display-name",
|
||||
"userProfileEmailAttr": "ocs.data.email"
|
||||
}
|
||||
- `config.json`:
|
||||
```javascript
|
||||
{
|
||||
"production": {
|
||||
"oauth2": {
|
||||
"clientID": "ii4p1u3jz7dXXXXXXXXXXXXXXX",
|
||||
"clientSecret": "mqzzx6fydbXXXXXXXXXXXXXXXX",
|
||||
"authorizationURL": "https://<your-nextcloud-domain>/apps/oauth2/authorize",
|
||||
"tokenURL": "https://<your-nextcloud-domain>/apps/oauth2/api/v1/token",
|
||||
"userProfileURL": "https://<your-nextcloud-domain>/ocs/v2.php/cloud/user?format=json",
|
||||
"userProfileUsernameAttr": "ocs.data.id",
|
||||
"userProfileDisplayNameAttr": "ocs.data.display-name",
|
||||
"userProfileEmailAttr": "ocs.data.email"
|
||||
}
|
||||
}
|
||||
```
|
||||
* environment variables:
|
||||
}
|
||||
```
|
||||
|
||||
- environment variables:
|
||||
```sh
|
||||
CMD_OAUTH2_CLIENT_ID=ii4p1u3jz7dXXXXXXXXXXXXXXX
|
||||
CMD_OAUTH2_CLIENT_SECRET=mqzzx6fydbXXXXXXXXXXXXXXXX
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
# OAuth general information
|
||||
|
||||
| service | callback URL (after the server URL) |
|
||||
| ------- | --------- |
|
||||
| facebook | `/auth/facebook/callback` |
|
||||
| twitter | `/auth/twitter/callback` |
|
||||
| github | `/auth/github/callback` |
|
||||
| gitlab | `/auth/gitlab/callback` |
|
||||
| mattermost | `/auth/mattermost/callback` |
|
||||
| dropbox | `/auth/dropbox/callback` |
|
||||
| google | `/auth/google/callback` |
|
||||
| saml | `/auth/saml/callback` |
|
||||
| service | callback URL (after the server URL) |
|
||||
| ---------- | ----------------------------------- |
|
||||
| facebook | `/auth/facebook/callback` |
|
||||
| twitter | `/auth/twitter/callback` |
|
||||
| github | `/auth/github/callback` |
|
||||
| gitlab | `/auth/gitlab/callback` |
|
||||
| mattermost | `/auth/mattermost/callback` |
|
||||
| dropbox | `/auth/dropbox/callback` |
|
||||
| google | `/auth/google/callback` |
|
||||
| saml | `/auth/saml/callback` |
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
Authentication guide - SAML (OneLogin)
|
||||
===
|
||||
# Authentication guide - SAML (OneLogin)
|
||||
|
||||
**Note:** *This guide was written before the renaming. Just replace `HackMD` with `CodiMD` in your mind :smile: thanks!*
|
||||
|
||||
1. Sign-in or sign-up for an OneLogin account. (available free trial for 2 weeks)
|
||||
|
||||
2. Go to the administration page.
|
||||
|
||||
3. Select the **APPS** menu and click on the **Add Apps**.
|
||||
![onelogin-add-app](../../images/auth/onelogin-add-app.png)
|
||||
|
||||
|
@ -15,34 +16,40 @@ Authentication guide - SAML (OneLogin)
|
|||
![onelogin-edit-app-name](../../images/auth/onelogin-edit-app-name.png)
|
||||
|
||||
6. After that other tabs will appear, click the **Configuration**, and fill out the below items, and click **SAVE**.
|
||||
* RelayState: The base URL of your CodiMD, which is issuer. (last slash is not needed)
|
||||
* ACS (Consumer) URL Validator: The callback URL of your CodiMD. (serverurl + /auth/saml/callback)
|
||||
* ACS (Consumer) URL: same as above.
|
||||
* Login URL: login URL(SAML requester) of your CopiMD. (serverurl + /auth/saml)
|
||||
![onelogin-edit-sp-metadata](../../images/auth/onelogin-edit-sp-metadata.png)
|
||||
- RelayState: The base URL of your CodiMD, which is issuer. (last slash is not needed)
|
||||
|
||||
- ACS (Consumer) URL Validator: The callback URL of your CodiMD. (serverurl + /auth/saml/callback)
|
||||
|
||||
- ACS (Consumer) URL: same as above.
|
||||
|
||||
- Login URL: login URL(SAML requester) of your CopiMD. (serverurl + /auth/saml)
|
||||
![onelogin-edit-sp-metadata](../../images/auth/onelogin-edit-sp-metadata.png)
|
||||
|
||||
7. The registration is completed. Next, click **SSO** and copy or download the items below.
|
||||
* X.509 Certificate: Click **View Details** and **DOWNLOAD** or copy the content of certificate ....(A)
|
||||
* SAML 2.0 Endpoint (HTTP): Copy the URL ....(B)
|
||||
![onelogin-copy-idp-metadata](../../images/auth/onelogin-copy-idp-metadata.png)
|
||||
- X.509 Certificate: Click **View Details** and **DOWNLOAD** or copy the content of certificate ....(A)
|
||||
|
||||
- SAML 2.0 Endpoint (HTTP): Copy the URL ....(B)
|
||||
![onelogin-copy-idp-metadata](../../images/auth/onelogin-copy-idp-metadata.png)
|
||||
|
||||
8. In your CodiMD server, create IdP certificate file from (A)
|
||||
9. Add the IdP URL (B) and the Idp certificate file path to your config.json file or pass them as environment variables.
|
||||
* `config.json`:
|
||||
```javascript
|
||||
{
|
||||
"production": {
|
||||
"saml": {
|
||||
"idpSsoUrl": "https://*******.onelogin.com/trust/saml2/http-post/sso/******",
|
||||
"idpCert": "/path/to/idp_cert.pem"
|
||||
}
|
||||
- `config.json`:
|
||||
```javascript
|
||||
{
|
||||
"production": {
|
||||
"saml": {
|
||||
"idpSsoUrl": "https://*******.onelogin.com/trust/saml2/http-post/sso/******",
|
||||
"idpCert": "/path/to/idp_cert.pem"
|
||||
}
|
||||
}
|
||||
```
|
||||
* environment variables
|
||||
}
|
||||
```
|
||||
|
||||
- environment variables
|
||||
```sh
|
||||
CMD_SAML_IDPSSOURL=https://*******.onelogin.com/trust/saml2/http-post/sso/******
|
||||
CMD_SAML_IDPCERT=/path/to/idp_cert.pem
|
||||
```
|
||||
|
||||
10. Try sign-in with SAML from your CodiMD sign-in button or OneLogin dashboard (like the screenshot below).
|
||||
![onelogin-use-dashboard](../../images/auth/onelogin-use-dashboard.png)
|
||||
|
|
|
@ -1,19 +1,21 @@
|
|||
Authentication guide - SAML
|
||||
===
|
||||
# Authentication guide - SAML
|
||||
|
||||
**Note:** *This guide was written before the renaming. Just replace `HackMD` with `CodiMD` in your mind :smile: thanks!*
|
||||
*Note:* This guide was written before the renaming. Just replace `HackMD` with `CodiMD` in your mind :smile: thanks!
|
||||
|
||||
The basic procedure is the same as the case of OneLogin which is mentioned in [OneLogin-Guide](./saml-onelogin.md). If you want to match your IdP, you can use more configurations as below.
|
||||
|
||||
* If your IdP accepts metadata XML of the service provider to ease configuration, use this url to download metadata XML.
|
||||
* {{your-serverurl}}/auth/saml/metadata
|
||||
* _Note: If not accessible from IdP, download to local once and upload to IdP._
|
||||
* Change the value of `issuer`, `identifierFormat` to match your IdP.
|
||||
* `issuer`: A unique id to identify the application to the IdP, which is the base URL of your CodiMD as default
|
||||
* `identifierFormat`: A format of unique id to identify the user of IdP, which is the format based on email address as default. It is recommend that you use as below.
|
||||
* urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress (default)
|
||||
* urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
|
||||
* `config.json`:
|
||||
- If your IdP accepts metadata XML of the service provider to ease configuration, use this url to download metadata XML.
|
||||
- {{your-serverurl}}/auth/saml/metadata
|
||||
- *Note:* If not accessible from IdP, download to local once and upload to IdP.
|
||||
|
||||
- Change the value of `issuer`, `identifierFormat` to match your IdP.
|
||||
- `issuer`: A unique id to identify the application to the IdP, which is the base URL of your CodiMD as default
|
||||
|
||||
- `identifierFormat`: A format of unique id to identify the user of IdP, which is the format based on email address as default. It is recommend that you use as below.
|
||||
- urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress (default)
|
||||
- urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
|
||||
|
||||
- `config.json`:
|
||||
```javascript
|
||||
{
|
||||
"production": {
|
||||
|
@ -25,19 +27,24 @@ The basic procedure is the same as the case of OneLogin which is mentioned in [O
|
|||
}
|
||||
}
|
||||
```
|
||||
* environment variables
|
||||
```
|
||||
|
||||
- environment variables
|
||||
```env
|
||||
CMD_SAML_ISSUER=mycodimd
|
||||
CMD_SAML_IDENTIFIERFORMAT=urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
|
||||
```
|
||||
|
||||
* Change mapping of attribute names to customize the displaying user name and email address to match your IdP.
|
||||
* `attribute`: A dictionary to map attribute names
|
||||
* `attribute.id`: A primary key of user table for your CodiMD
|
||||
* `attribute.username`: Attribute name of displaying user name on CodiMD
|
||||
* `attribute.email`: Attribute name of email address, which will be also used for Gravatar
|
||||
* _Note: Default value of all attributes is NameID of SAML response, which is email address if `identifierFormat` is default._
|
||||
* `config.json`:
|
||||
- Change mapping of attribute names to customize the displaying user name and email address to match your IdP.
|
||||
- `attribute`: A dictionary to map attribute names
|
||||
|
||||
- `attribute.id`: A primary key of user table for your CodiMD
|
||||
|
||||
- `attribute.username`: Attribute name of displaying user name on CodiMD
|
||||
|
||||
- `attribute.email`: Attribute name of email address, which will be also used for Gravatar
|
||||
- *Note:* Default value of all attributes is NameID of SAML response, which is email address if `identifierFormat` is default.
|
||||
|
||||
- `config.json`:
|
||||
```javascript
|
||||
{
|
||||
"production": {
|
||||
|
@ -52,19 +59,23 @@ The basic procedure is the same as the case of OneLogin which is mentioned in [O
|
|||
}
|
||||
}
|
||||
```
|
||||
* environment variables
|
||||
|
||||
- environment variables
|
||||
```sh
|
||||
CMD_SAML_ATTRIBUTE_ID=sAMAccountName
|
||||
CMD_SAML_ATTRIBUTE_USERNAME=nickName
|
||||
CMD_SAML_ATTRIBUTE_EMAIL=mail
|
||||
```
|
||||
|
||||
* If you want to control permission by group membership, add group attribute name and required group (allowed) or external group (not allowed).
|
||||
* `groupAttribute`: An attribute name of group membership
|
||||
* `requiredGroups`: Group names array for allowed access to CodiMD. Use vertical bar to separate for environment variables.
|
||||
* `externalGroups`: Group names array for not allowed access to CodiMD. Use vertical bar to separate for environment variables.
|
||||
* _Note: Evaluates `externalGroups` first_
|
||||
* `config.json`:
|
||||
- If you want to control permission by group membership, add group attribute name and required group (allowed) or external group (not allowed).
|
||||
- `groupAttribute`: An attribute name of group membership
|
||||
|
||||
- `requiredGroups`: Group names array for allowed access to CodiMD. Use vertical bar to separate for environment variables.
|
||||
|
||||
- `externalGroups`: Group names array for not allowed access to CodiMD. Use vertical bar to separate for environment variables.
|
||||
- *Note:* Evaluates `externalGroups` first
|
||||
|
||||
- `config.json`:
|
||||
```javascript
|
||||
{
|
||||
"production": {
|
||||
|
@ -77,7 +88,8 @@ The basic procedure is the same as the case of OneLogin which is mentioned in [O
|
|||
}
|
||||
}
|
||||
```
|
||||
* environment variables
|
||||
|
||||
- environment variables
|
||||
```sh
|
||||
CMD_SAML_GROUPATTRIBUTE=memberOf
|
||||
CMD_SAML_REQUIREDGROUPS=codimd-users|board-members
|
||||
|
|
|
@ -1,17 +1,18 @@
|
|||
Authentication guide - Twitter
|
||||
===
|
||||
# Authentication guide - Twitter
|
||||
|
||||
**Note:** *This guide was written before the renaming. Just replace `HackMD` with `CodiMD` in your mind :smile: thanks!*
|
||||
*Note:* This guide was written before the renaming. Just replace `HackMD` with `CodiMD` in your mind :smile: thanks!
|
||||
|
||||
1. Sign-in or sign-up for a Twitter account
|
||||
|
||||
2. Go to the Twitter Application management page [here](https://apps.twitter.com/)
|
||||
|
||||
3. Click on the **Create New App** button to create a new Twitter app:
|
||||
![create-twitter-app](../../images/auth/create-twitter-app.png)
|
||||
|
||||
4. Fill out the create application form, check the developer agreement box, and click **Create Your Twitter Application**
|
||||
![register-twitter-application](../../images/auth/register-twitter-application.png)
|
||||
|
||||
*Note: you may have to register your phone number with Twitter to create a Twitter application*
|
||||
*Note:* you may have to register your phone number with Twitter to create a Twitter application
|
||||
|
||||
To do this Click your profile icon --> Settings and privacy --> Mobile --> Select Country/region --> Enter phone number --> Click Continue
|
||||
|
||||
|
@ -21,20 +22,21 @@ Authentication guide - Twitter
|
|||
6. Obtain your Twitter Consumer Key and Consumer Secret
|
||||
![twitter-app-keys](../../images/auth/twitter-app-keys.png)
|
||||
|
||||
7. Add your Consumer Key and Consumer Secret to your `config.json` file or pass them as environment variables:
|
||||
* `config.json`:
|
||||
```javascript
|
||||
{
|
||||
"production": {
|
||||
"twitter": {
|
||||
"consumerKey": "esTCJFXXXXXXXXXXXXXXXXXXX",
|
||||
"consumerSecret": "zpCs4tU86pRVXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
|
||||
}
|
||||
7. Add your Consumer Key and Consumer Secret to your `config.json` file or pass them as environment variables:
|
||||
- `config.json`:
|
||||
```javascript
|
||||
{
|
||||
"production": {
|
||||
"twitter": {
|
||||
"consumerKey": "esTCJFXXXXXXXXXXXXXXXXXXX",
|
||||
"consumerSecret": "zpCs4tU86pRVXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
|
||||
}
|
||||
}
|
||||
```
|
||||
* environment variables:
|
||||
```sh
|
||||
CMD_TWITTER_CONSUMERKEY=esTCJFXXXXXXXXXXXXXXXXXXX
|
||||
CMD_TWITTER_CONSUMERSECRET=zpCs4tU86pRVXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
```
|
||||
}
|
||||
```
|
||||
|
||||
- environment variables:
|
||||
```sh
|
||||
CMD_TWITTER_CONSUMERKEY=esTCJFXXXXXXXXXXXXXXXXXXX
|
||||
CMD_TWITTER_CONSUMERSECRET=zpCs4tU86pRVXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
|
||||
```
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
Pad migration guide from etherpad-lite
|
||||
===
|
||||
# Pad migration guide from etherpad-lite
|
||||
|
||||
The goal of this migration is to do a "dumb" import from all the pads in Etherpad, to notes in
|
||||
CodiMD. In particular, the url locations of the pads in Etherpad will be lost. Furthermore, any
|
||||
|
@ -9,19 +8,14 @@ to CodiMD (only the plain text contents).
|
|||
Note that this guide is not really meant as a support guide. I migrated my own Etherpad to CodiMD,
|
||||
and it turned out to be quite easy in my opinion. In this guide I share my experience. Stuff may
|
||||
require some creativity to work properly in your case. When I wrote this guide, I was using
|
||||
[Etherpad 1.7.0] and [CodiMD 1.2.1]. Good luck!
|
||||
|
||||
[Etherpad 1.7.0]: https://github.com/ether/etherpad-lite/tree/1.7.0
|
||||
[CodiMD 1.2.1]: https://github.com/codimd/server/tree/1.2.1
|
||||
[etherpad 1.7.0][] and [codimd 1.2.1][]. Good luck!
|
||||
|
||||
## 0. Requirements
|
||||
|
||||
- `curl`
|
||||
- running Etherpad server
|
||||
- running CodiMD server
|
||||
- [codimd-cli]
|
||||
|
||||
[codimd-cli]: https://github.com/codimd/cli/blob/master/bin/codimd
|
||||
- [codimd-cli][]
|
||||
|
||||
## 1. Retrieve the list of pads
|
||||
|
||||
|
@ -32,7 +26,7 @@ database][howtolistallpads].
|
|||
|
||||
You will end up with a file containing a pad name on each line:
|
||||
|
||||
```
|
||||
```bash
|
||||
date-ideas
|
||||
groceries
|
||||
london
|
||||
|
@ -40,11 +34,9 @@ weddingchecklist
|
|||
(...)
|
||||
```
|
||||
|
||||
[howtolistallpads]: https://github.com/ether/etherpad-lite/wiki/How-to-list-all-pads/49701ecdcbe07aea7ad27ffa23aed0d99c2e17db
|
||||
|
||||
## 2. Run the migration
|
||||
|
||||
Download [codimd-cli] and put the script in the same directory as the file containing the pad names.
|
||||
Download [codimd-cli][] and put the script in the same directory as the file containing the pad names.
|
||||
Add to this directory the file listed below, I called it `migrate-etherpad.sh`. Modify at least the
|
||||
configuration settings `ETHERPAD_SERVER` and `CODIMD_SERVER`.
|
||||
|
||||
|
@ -102,7 +94,7 @@ etherpad using a `301 Permanent Redirect` status code (see the next section).
|
|||
|
||||
I got a `redirects.txt` file that looked a bit like this:
|
||||
|
||||
```
|
||||
```log
|
||||
date-ideas -> Found. Redirecting to https://codimd.example.com/mPt0KfiKSBOTQ3mNcdfn
|
||||
groceries -> Found. Redirecting to https://codimd.example.com/UukqgwLfhYyUUtARlcJ2_y
|
||||
london -> Found. Redirecting to https://codimd.example.com/_d3wa-BE8t4Swv5w7O2_9R
|
||||
|
@ -112,7 +104,7 @@ weddingchecklist -> Found. Redirecting to https://codimd.example.com/XcQGqlBjl0u
|
|||
|
||||
Using some `sed` magic, I changed it to an nginx config snippet:
|
||||
|
||||
```
|
||||
```nginx
|
||||
location = /p/date-ideas {
|
||||
return 301 https://codimd.example.com/mPt0M1KfiKSBOTQ3mNcdfn;
|
||||
}
|
||||
|
@ -129,3 +121,8 @@ location = /p/weddingchecklist {
|
|||
|
||||
I put this file into my `etherpad.example.com` nginx config, such that all the users would be
|
||||
redirected accordingly.
|
||||
|
||||
[etherpad 1.7.0]: https://github.com/ether/etherpad-lite/tree/1.7.0
|
||||
[codimd 1.2.1]: https://github.com/codimd/server/tree/1.2.1
|
||||
[codimd-cli]: https://github.com/codimd/cli/blob/master/bin/codimd
|
||||
[howtolistallpads]: https://github.com/ether/etherpad-lite/wiki/How-to-list-all-pads/49701ecdcbe07aea7ad27ffa23aed0d99c2e17db
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
Migrations and Notable Changes
|
||||
===
|
||||
# Migrations and Notable Changes
|
||||
|
||||
## Migrating to 1.4.0
|
||||
|
||||
|
@ -12,11 +11,11 @@ repository, you may need to update a few urls. This is not a breaking change.
|
|||
|
||||
See more at [issue #10](https://github.com/codimd/server/issues/10)
|
||||
|
||||
**Native setup using git:**
|
||||
### Native setup using git
|
||||
|
||||
Change the upstream remote using `git remote set-url origin https://github.com/codimd/server.git`.
|
||||
|
||||
**Docker:**
|
||||
### Docker
|
||||
|
||||
When you use our [container repository](https://github.com/codimd/container)
|
||||
(which was previously `codimd-container`) all you can simply run `git pull` and
|
||||
|
@ -25,7 +24,7 @@ your `docker-compose.yml` will be updated.
|
|||
When you setup things yourself, make sure you use the new image:
|
||||
[`quay.io/codimd/server`](https://quay.io/repository/codimd/server?tab=tags).
|
||||
|
||||
**Heroku:**
|
||||
### Heroku
|
||||
|
||||
All you need to do is [disconnect GitHub](https://devcenter.heroku.com/articles/github-integration#disconnecting-from-github)
|
||||
and [reconnect it](https://devcenter.heroku.com/articles/github-integration#enabling-github-integration)
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
Minio Guide for CodiMD
|
||||
===
|
||||
# Minio Guide for CodiMD
|
||||
|
||||
**Note:** *This guide was written before the renaming. Just replace `HackMD` with `CodiMD` in your mind :smile: thanks!*
|
||||
*Note:* This guide was written before the renaming. Just replace `HackMD` with `CodiMD` in your mind :smile: thanks!
|
||||
|
||||
1. First of all you need to setup Minio itself.
|
||||
|
||||
|
@ -24,7 +23,7 @@ Minio Guide for CodiMD
|
|||
|
||||
![docker logs](../images/minio-image-upload/docker-logs.png)
|
||||
|
||||
3. Open http://localhost:9000 and login with the shown credentials.
|
||||
3. Open <http://localhost:9000> and login with the shown credentials.
|
||||
|
||||
![minio default view](../images/minio-image-upload/default-view.png)
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
Setup your terms of use
|
||||
===
|
||||
# How to set up your terms of use
|
||||
|
||||
## Setup your terms of use
|
||||
|
||||
To setup your terms of use, you need to provide a document called `terms-of-use.md` which contains them. Of course written in Markdown.
|
||||
|
||||
|
@ -7,8 +8,7 @@ It has to be provided under `./public/docs/` and will be automatically turned in
|
|||
|
||||
As soon as the file exists a link will show up in the bottom part along with the release notes and link to them.
|
||||
|
||||
Setup your privacy policy
|
||||
===
|
||||
## Setup your privacy policy
|
||||
|
||||
To add a privacy policy you can use the same technique as for the terms of use. The main difference is that the document is called `privacy.md`.
|
||||
|
||||
|
@ -16,8 +16,7 @@ See our example file `./public/docs/privacy.md.example` container some useful hi
|
|||
|
||||
As with the terms of use, a link to the privacy notices will show up in the area where the release notes are provided on the index page.
|
||||
|
||||
Setup your imprint
|
||||
===
|
||||
## Setup your imprint
|
||||
|
||||
To add an imprint you can use the same technique as for the terms of use. The main difference is that the document is called `imprint.md`.
|
||||
|
||||
|
|
|
@ -1,19 +1,15 @@
|
|||
Guide - Setup CodiMD S3 image upload
|
||||
===
|
||||
# Guide - Setup CodiMD S3 image upload
|
||||
|
||||
**Note:** *This guide was written before the renaming. Just replace `HackMD` with `CodiMD` in your mind :smile: thanks!*
|
||||
|
||||
1. Go to [AWS S3 console](https://console.aws.amazon.com/s3/home) and create a new bucket.
|
||||
|
||||
![create-bucket](../images/s3-image-upload/create-bucket.png)
|
||||
![create-bucket](../images/s3-image-upload/create-bucket.png)
|
||||
|
||||
2. Click on bucket, select **Properties** on the side panel, and find **Permission** section. Click **Edit bucket policy**.
|
||||
|
||||
![bucket-property](../images/s3-image-upload/bucket-property.png)
|
||||
![bucket-property](../images/s3-image-upload/bucket-property.png)
|
||||
|
||||
3. Enter the following policy, replace `bucket_name` with your bucket name:
|
||||
|
||||
![bucket-policy-editor](../images/s3-image-upload/bucket-policy-editor.png)
|
||||
![bucket-policy-editor](../images/s3-image-upload/bucket-policy-editor.png)
|
||||
|
||||
```json
|
||||
{
|
||||
|
@ -32,16 +28,13 @@ Guide - Setup CodiMD S3 image upload
|
|||
4. Go to IAM console and create a new IAM user. Remember your user credentials(`key`/`access token`)
|
||||
|
||||
5. Enter user page, select **Permission** tab, look at **Inline Policies** section, and click **Create User Policy**
|
||||
|
||||
![iam-user](../images/s3-image-upload/iam-user.png)
|
||||
![iam-user](../images/s3-image-upload/iam-user.png)
|
||||
|
||||
6. Select **Custom Policy**
|
||||
|
||||
![custom-policy](../images/s3-image-upload/custom-policy.png)
|
||||
![custom-policy](../images/s3-image-upload/custom-policy.png)
|
||||
|
||||
7. Enter the following policy, replace `bucket_name` with your bucket name:
|
||||
|
||||
![review-policy](../images/s3-image-upload/review-policy.png)
|
||||
![review-policy](../images/s3-image-upload/review-policy.png)
|
||||
|
||||
```json
|
||||
{
|
||||
|
@ -62,23 +55,23 @@ Guide - Setup CodiMD S3 image upload
|
|||
|
||||
8. Edit `config.json` and set following keys:
|
||||
|
||||
```javascript
|
||||
{
|
||||
"production": {
|
||||
...
|
||||
"imageuploadtype": "s3",
|
||||
"s3": {
|
||||
"accessKeyId": "YOUR_S3_ACCESS_KEY_ID",
|
||||
"secretAccessKey": "YOUR_S3_ACCESS_KEY",
|
||||
"region": "YOUR_S3_REGION" // example: ap-northeast-1
|
||||
},
|
||||
"s3bucket": "YOUR_S3_BUCKET_NAME"
|
||||
}
|
||||
}
|
||||
```
|
||||
```javascript
|
||||
{
|
||||
"production": {
|
||||
...
|
||||
"imageuploadtype": "s3",
|
||||
"s3": {
|
||||
"accessKeyId": "YOUR_S3_ACCESS_KEY_ID",
|
||||
"secretAccessKey": "YOUR_S3_ACCESS_KEY",
|
||||
"region": "YOUR_S3_REGION" // example: ap-northeast-1
|
||||
},
|
||||
"s3bucket": "YOUR_S3_BUCKET_NAME"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
9. In additional to edit `config.json` directly, you could also try [environment variables](../configuration-env-vars.md).
|
||||
|
||||
## Related Tools
|
||||
|
||||
* [AWS Policy Generator](http://awspolicygen.s3.amazonaws.com/policygen.html)
|
||||
- [AWS Policy Generator](http://awspolicygen.s3.amazonaws.com/policygen.html)
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
History of CodiMD
|
||||
===
|
||||
# History of CodiMD
|
||||
|
||||
## It started with HackMD
|
||||
|
||||
|
@ -14,7 +13,6 @@ while referred to as "HackMD community edition".
|
|||
|
||||
*For more on the splitting of the projects, please refer to [A note to our community (2017-10-11)](https://hackmd.io/c/community-news/https%3A%2F%2Fhackmd.io%2Fs%2Fr1_4j9_hZ).*
|
||||
|
||||
|
||||
## HackMD CE became CodiMD
|
||||
|
||||
In June 2018, CodiMD was renamed from its former name "HackMD" and continued to
|
||||
|
@ -24,7 +22,6 @@ project), as people mistook it for an open core development model.
|
|||
|
||||
*For the whole renaming story, see the [issue where the renaming was discussed](https://github.com/hackmdio/hackmd/issues/720).*
|
||||
|
||||
|
||||
## CodiMD went independent
|
||||
|
||||
In March 2019, a discussion over licensing, governance and the future of CodiMD
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
Cloudron
|
||||
===
|
||||
# Cloudron
|
||||
|
||||
CodiMD is available as a 1-click install on [Cloudron](https://cloudron.io). Cloudron makes it easy to run apps like CodiMD on your server and keep them up-to-date and secure.
|
||||
|
||||
|
|
|
@ -1,13 +1,11 @@
|
|||
LinuxServer.io CodiMD Image
|
||||
===
|
||||
# LinuxServer.io CodiMD Image
|
||||
|
||||
[![LinuxServer.io Discord](https://img.shields.io/discord/354974912613449730.svg?logo=discord&label=LSIO%20Discord&style=flat-square)](https://discord.gg/YWrKVTn)[![container version badge](https://images.microbadger.com/badges/version/linuxserver/codimd.svg)](https://microbadger.com/images/linuxserver/codimd "Get your own version badge on microbadger.com")[![container image size badge](https://images.microbadger.com/badges/image/linuxserver/codimd.svg)](https://microbadger.com/images/linuxserver/codimd "Get your own version badge on microbadger.com")![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/codimd.svg)![Docker Stars](https://img.shields.io/docker/stars/linuxserver/codimd.svg)[![Build Status](https://ci.linuxserver.io/buildStatus/icon?job=Docker-Pipeline-Builders/docker-codimd/master)](https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-codimd/job/master/)[![LinuxServer.io CI summary](https://lsio-ci.ams3.digitaloceanspaces.com/linuxserver/codimd/latest/badge.svg)](https://lsio-ci.ams3.digitaloceanspaces.com/linuxserver/codimd/latest/index.html)
|
||||
|
||||
[LinuxServer.io](https://linuxserver.io) have created an Ubuntu-based multi-arch container image for x86-64, arm64 and armhf which supports PDF export from all architectures using [PhantomJS](https://phantomjs.org/).
|
||||
|
||||
- It supports all the environment variables detailed in the [configuration documentation](../configuration-env-vars.md) to modify it according to your needs.
|
||||
|
||||
- It gets rebuilt on new releases from CodiMD and also weekly if necessary to update any other package changes in the underlying container, making it easy to keep your CodiMD instance up to date.
|
||||
|
||||
- It also details how to easily [utilize Docker networking to reverse proxy](https://github.com/linuxserver/docker-codimd/#application-setup) CodiMD using their [LetsEncrypt docker image](https://github.com/linuxserver/docker-letsencrypt)
|
||||
|
||||
In order to contribute check the LinuxServer.io [GitHub repository](https://github.com/linuxserver/docker-codimd/) for CodiMD.
|
||||
|
|
|
@ -1,15 +1,12 @@
|
|||
CodiMD Docker Image
|
||||
===
|
||||
# CodiMD Docker Image
|
||||
|
||||
[![Try in PWD](https://cdn.rawgit.com/play-with-docker/stacks/cff22438/assets/images/button.png)](http://play-with-docker.com?stack=https://github.com/codimd/container/raw/master/docker-compose.yml&stack_name=codimd)
|
||||
|
||||
|
||||
**Debian-based version:**
|
||||
## Debian-based version
|
||||
|
||||
[![Docker Repository on Quay](https://quay.io/repository/codimd/server/status "Docker Repository on Quay")](https://quay.io/repository/codimd/server)
|
||||
|
||||
|
||||
**Alpine-based version:**
|
||||
## Alpine-based version
|
||||
|
||||
[![Docker Repository on Quay](https://quay.io/repository/codimd/server/status "Docker Repository on Quay")](https://quay.io/repository/codimd/server)
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
Heroku Deployment
|
||||
===
|
||||
# Heroku Deployment
|
||||
|
||||
You can quickly setup a sample Heroku CodiMD application by clicking the button
|
||||
below.
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
Kubernetes
|
||||
===
|
||||
# Kubernetes
|
||||
|
||||
To install use `helm install stable/hackmd`.
|
||||
|
||||
|
|
|
@ -1,33 +1,42 @@
|
|||
Manual Installation
|
||||
===
|
||||
# Manual Installation
|
||||
|
||||
## Requirements on your server
|
||||
|
||||
- Node.js 8.5 or up
|
||||
|
||||
- Database (PostgreSQL, MySQL, MariaDB, SQLite, MSSQL). Must use charset `utf8`: this is typically the
|
||||
default in PostgreSQL and SQLite, while in MySQL and MariaDB utf8 might need to be set with
|
||||
`alter database <DBNAME> character set utf8 collate utf8_bin;`
|
||||
- npm (and its dependencies, [node-gyp](https://github.com/nodejs/node-gyp#installation))
|
||||
- yarn
|
||||
- Bash (for the setup script)
|
||||
- For **building** CodiMD we recommend to use a machine with at least **2GB** RAM
|
||||
|
||||
- npm (and its dependencies, [node-gyp](https://github.com/nodejs/node-gyp#installation))
|
||||
|
||||
- yarn
|
||||
|
||||
- Bash (for the setup script)
|
||||
|
||||
- For **building** CodiMD we recommend to use a machine with at least **2GB** RAM
|
||||
|
||||
## Instructions
|
||||
|
||||
1. Check if you meet the [requirements at the top of this document](#requirements-on-your-server).
|
||||
|
||||
2. Clone this repository (preferred) or download a release and unzip it.
|
||||
|
||||
3. Enter the directory and type `bin/setup`, which will install npm dependencies and create configs.
|
||||
|
||||
4. Modify `config.json` or configure CodiMD through environment variables which will
|
||||
overwrite the configs, see docs [here](https://github.com/codimd/server/blob/master/docs/configuration.md).
|
||||
|
||||
5. Build front-end bundle by `yarn run build` (use `yarn run dev` if you are in development)
|
||||
|
||||
6. Modify the file named `.sequelizerc`, change the value of the variable `url` with your db connection string. For example:
|
||||
- `postgres://username:password@localhost:5432/codimd`
|
||||
- `mysql://username:password@localhost:3306/codimd`
|
||||
- `sqlite://:memory:`
|
||||
7. It is recommended to start your server manually once: `npm start --production`, this way it's easier to see warnings or errors that might occur (leave out `--production` for development).
|
||||
8. Run the server as you like (node, forever, pm2, SystemD, Init-Scripts)
|
||||
|
||||
7. It is recommended to start your server manually once: `npm start --production`, this way it's easier to see warnings or errors that might occur (leave out `--production` for development).
|
||||
|
||||
8. Run the server as you like (node, forever, pm2, SystemD, Init-Scripts)
|
||||
|
||||
## How to upgrade your installation
|
||||
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
Slide Separators
|
||||
===
|
||||
# Slide Separators
|
||||
|
||||
If you're getting started with reveal.js slides, there are a few things you need to know.
|
||||
|
||||
There are two types of slides, those that transition horizontally and those that transition vertically (subslides).
|
||||
|
||||
The following separators are used for each in the CodiMD syntax:
|
||||
```
|
||||
|
||||
```markdown
|
||||
# First Slide
|
||||
|
||||
---
|
||||
|
@ -23,7 +23,7 @@ as you can see, horizontal transitions are separated by `---` and vertical trans
|
|||
It's possible to customise the slide options using the YAML header in the slide markdown.
|
||||
|
||||
eg:
|
||||
```
|
||||
```yaml
|
||||
---
|
||||
title: Example Slide
|
||||
tags: presentation
|
||||
|
@ -38,7 +38,8 @@ make sure to have two spaces only at the start of the listed slide options.
|
|||
you can comment out options with a `#`
|
||||
|
||||
### Some other options
|
||||
```
|
||||
|
||||
```markdown
|
||||
# Display controls in the bottom right corner
|
||||
controls: true
|
||||
|
||||
|
@ -151,7 +152,8 @@ display: 'block'
|
|||
## Customising individual slides
|
||||
|
||||
custom background image:
|
||||
```
|
||||
|
||||
```markdown
|
||||
---
|
||||
|
||||
<!-- .slide: data-background="https://s3.amazonaws.com/hakim-static/reveal-js/reveal-parallax-1.jpg" -->
|
||||
|
|
|
@ -9,7 +9,7 @@ When you create a new note by clicking the "New note" button, your note is given
|
|||
|
||||
| example URL | prefix | mode | content updates |
|
||||
| -------------------------------------- | ------ | ----------------- | --------------- |
|
||||
| pad.example.com/Ndmv3oCyREKZMjSGR9uhnQ | _none_ | editor | in realtime |
|
||||
| pad.example.com/Ndmv3oCyREKZMjSGR9uhnQ | *none* | editor | in realtime |
|
||||
| pad.example.com/s/ByXF7k-YI | s/ | read-only version | on reload |
|
||||
| pad.example.com/p/ByXF7k-YI | p/ | presentation mode | on reload |
|
||||
|
||||
|
@ -19,7 +19,7 @@ If the setting `CMD_ALLOW_FREEURL` is enabled, users may create notes with a cus
|
|||
|
||||
| example URL | prefix | mode | content updates |
|
||||
| --------------------------------- | ------ | ----------------- | --------------- |
|
||||
| pad.example.com/my-awesome-note | _none_ | editor | in realtime |
|
||||
| pad.example.com/my-awesome-note | *none* | editor | in realtime |
|
||||
| pad.example.com/s/my-awesome-note | s/ | read-only version | on reload |
|
||||
| pad.example.com/p/my-awesome-note | p/ | presentation mode | on reload |
|
||||
|
||||
|
|
|
@ -4,9 +4,9 @@
|
|||
|
||||
<i class="fa fa-file-text"></i> **CodiMD** is a real-time, multi-platform collaborative markdown note editor.
|
||||
This means that you can write notes with other people on your **desktop**, **tablet** or even on the **phone**.
|
||||
You can sign-in via multiple auth providers like **Facebook**, **Twitter**, **GitHub** and many more on the [_homepage_](/).
|
||||
You can sign-in via multiple auth providers like **Facebook**, **Twitter**, **GitHub** and many more on the [*homepage*](/).
|
||||
|
||||
If you experience any _issues_, feel free to report it on [**GitHub**](https://github.com/codimd/server/issues).
|
||||
If you experience any *issues*, feel free to report it on [**GitHub**](https://github.com/codimd/server/issues).
|
||||
Or meet us on [**Matrix.org**](https://riot.im/app/#/room/#codimd:matrix.org) for dev-talk and interactive help.
|
||||
**Thank you very much!**
|
||||
|
||||
|
@ -50,21 +50,21 @@ Currently, you can save to **Dropbox** <i class="fa fa-dropbox"></i> (depending
|
|||
|
||||
### Import Notes
|
||||
|
||||
Similarly to the _save_ feature, you can also import a Markdown file from **Dropbox** <i class="fa fa-dropbox"></i> (depending on the instance's configuration), or import content from your **clipboard** <i class="fa fa-clipboard"></i>, which can parse some HTML. :smiley:
|
||||
Similarly to the *save* feature, you can also import a Markdown file from **Dropbox** <i class="fa fa-dropbox"></i> (depending on the instance's configuration), or import content from your **clipboard** <i class="fa fa-clipboard"></i>, which can parse some HTML. :smiley:
|
||||
|
||||
### Permissions
|
||||
|
||||
It is possible to change the access permission of a note through the little button on the top right of the view.
|
||||
There are four possible options:
|
||||
|
||||
| |Owner read/write|Signed-in read|Signed-in write|Guest read|Guest write|
|
||||
|:-----------------------------|:--------------:|:------------:|:-------------:|:--------:|:---------:|
|
||||
|<span class="text-nowrap"><i class="fa fa-leaf fa-fw"></i> **Freely**</span>|✔|✔|✔|✔|✔|
|
||||
|<span class="text-nowrap"><i class="fa fa-pencil fa-fw"></i> **Editable**</span>|✔|✔|✔|✔|✖|
|
||||
|<span class="text-nowrap"><i class="fa fa-id-card fa-fw"></i> **Limited**</span>|✔|✔|✔|✖|✖|
|
||||
|<span class="text-nowrap"><i class="fa fa-lock fa-fw"></i> **Locked**</span>|✔|✔|✖|✔|✖|
|
||||
|<span class="text-nowrap"><i class="fa fa-umbrella fa-fw"></i> **Protected**</span>|✔|✔|✖|✖|✖|
|
||||
|<span class="text-nowrap"><i class="fa fa-hand-stop-o fa-fw"></i> **Private**</span>|✔|✖|✖|✖|✖|
|
||||
| | Owner read/write | Signed-in read | Signed-in write | Guest read | Guest write |
|
||||
|:------------------------------------------------------------------------------------ |:----------------:|:--------------:|:---------------:|:----------:|:-----------:|
|
||||
| <span class="text-nowrap"><i class="fa fa-leaf fa-fw"></i> **Freely**</span> | ✔ | ✔ | ✔ | ✔ | ✔ |
|
||||
| <span class="text-nowrap"><i class="fa fa-pencil fa-fw"></i> **Editable**</span> | ✔ | ✔ | ✔ | ✔ | ✖ |
|
||||
| <span class="text-nowrap"><i class="fa fa-id-card fa-fw"></i> **Limited**</span> | ✔ | ✔ | ✔ | ✖ | ✖ |
|
||||
| <span class="text-nowrap"><i class="fa fa-lock fa-fw"></i> **Locked**</span> | ✔ | ✔ | ✖ | ✔ | ✖ |
|
||||
| <span class="text-nowrap"><i class="fa fa-umbrella fa-fw"></i> **Protected**</span> | ✔ | ✔ | ✖ | ✖ | ✖ |
|
||||
| <span class="text-nowrap"><i class="fa fa-hand-stop-o fa-fw"></i> **Private**</span> | ✔ | ✖ | ✖ | ✖ | ✖ |
|
||||
|
||||
**Only the owner of the note can change the note's permissions.**
|
||||
|
||||
|
@ -88,8 +88,8 @@ To switch the editor into slide mode, set the [document type](./yaml-metadata#ty
|
|||
|
||||
### Autogenerated Table of Contents
|
||||
|
||||
You can look at the bottom right section of the view area, there is a _ToC_ button <i class="fa fa-bars"></i>.
|
||||
Pressing that button will show you a current _Table of Contents_, and will highlight which section you're at.
|
||||
You can look at the bottom right section of the view area, there is a *ToC* button <i class="fa fa-bars"></i>.
|
||||
Pressing that button will show you a current *Table of Contents*, and will highlight which section you're at.
|
||||
ToCs support up to **three header levels**.
|
||||
|
||||
### Permalink
|
||||
|
@ -127,7 +127,7 @@ The first **level 1 heading** (e.g. `# Title`) will be used as the note title.
|
|||
|
||||
Using tags as follows, the specified tags will show in your **history**.
|
||||
|
||||
###### tags: `features` `cool` `updated`
|
||||
#### tags: `features` `cool` `updated`
|
||||
|
||||
### [YAML Metadata](./yaml-metadata)
|
||||
|
||||
|
@ -246,7 +246,7 @@ When you’re a carpenter making a beautiful chest of drawers, you’re not goin
|
|||
#### PDF
|
||||
|
||||
**Caution: this might be blocked by your browser if not using an `https` URL.**
|
||||
{%pdf https://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf %}
|
||||
{%pdf <https://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf> %}
|
||||
|
||||
### MathJax
|
||||
|
||||
|
@ -492,41 +492,41 @@ console.log(foo(5));
|
|||
|
||||
#### Tables
|
||||
|
||||
| Option | Description |
|
||||
| ------ | ----------- |
|
||||
| Option | Description |
|
||||
| ------ | ------------------------------------------------------------------------- |
|
||||
| data | path to data files to supply the data that will be passed into templates. |
|
||||
| engine | engine to be used for processing templates. Handlebars is the default. |
|
||||
| ext | extension to be used for dest files. |
|
||||
| engine | engine to be used for processing templates. Handlebars is the default. |
|
||||
| ext | extension to be used for dest files. |
|
||||
|
||||
Right aligned columns
|
||||
|
||||
| Option | Description |
|
||||
| ------:| -----------:|
|
||||
| data | path to data files to supply the data that will be passed into templates. |
|
||||
| engine | engine to be used for processing templates. Handlebars is the default. |
|
||||
| ext | extension to be used for dest files. |
|
||||
| Option | Description |
|
||||
| ------:| -------------------------------------------------------------------------:|
|
||||
| data | path to data files to supply the data that will be passed into templates. |
|
||||
| engine | engine to be used for processing templates. Handlebars is the default. |
|
||||
| ext | extension to be used for dest files. |
|
||||
|
||||
Left aligned columns
|
||||
|
||||
| Option | Description |
|
||||
|:------ |:----------- |
|
||||
| Option | Description |
|
||||
|:------ |:------------------------------------------------------------------------- |
|
||||
| data | path to data files to supply the data that will be passed into templates. |
|
||||
| engine | engine to be used for processing templates. Handlebars is the default. |
|
||||
| ext | extension to be used for dest files. |
|
||||
| engine | engine to be used for processing templates. Handlebars is the default. |
|
||||
| ext | extension to be used for dest files. |
|
||||
|
||||
Center aligned columns
|
||||
|
||||
| Option | Description |
|
||||
|:------:|:-----------:|
|
||||
| data | path to data files to supply the data that will be passed into templates. |
|
||||
| engine | engine to be used for processing templates. Handlebars is the default. |
|
||||
| ext | extension to be used for dest files. |
|
||||
| Option | Description |
|
||||
|:------:|:-------------------------------------------------------------------------:|
|
||||
| data | path to data files to supply the data that will be passed into templates. |
|
||||
| engine | engine to be used for processing templates. Handlebars is the default. |
|
||||
| ext | extension to be used for dest files. |
|
||||
|
||||
#### Links
|
||||
|
||||
[link text](https://demo.codimd.org)
|
||||
[link with title](https://nodeca.github.io/pica/demo/ "title text!")
|
||||
Autoconverted link https://github.com/nodeca/pica
|
||||
Autoconverted link <https://github.com/nodeca/pica>
|
||||
|
||||
#### Images
|
||||
|
||||
|
@ -569,7 +569,7 @@ Term 2 with *inline markup*
|
|||
|
||||
Third paragraph of definition 2.
|
||||
|
||||
_Compact style:_
|
||||
*Compact style:*
|
||||
|
||||
Term 1
|
||||
~ Definition 1
|
||||
|
|
|
@ -1,14 +1,13 @@
|
|||
Privacy
|
||||
===
|
||||
# Privacy
|
||||
|
||||
We process the following data, for the following purposes:
|
||||
|
||||
|your data|our usage|
|
||||
|---------|---------|
|
||||
|IP-Address|Used to communicate with your browser and our servers. It's may exposed to third-parties which provide resources for this service. These services are, depending on your login method, the document you visit and the setup of this instance: Google, Disqus, MathJax, GitHub, SlideShare/LinkedIn, yahoo, Libravatar, Imgur, Amazon, and Cloudflare.|
|
||||
|Usernames and profiles|Your username as well as user profiles that are connected with it are transmitted and stored by us to provide a useful login integration with services like GitHub, Facebook, Twitter, GitLab, Dropbox, Google. Depending on the setup of this CodiMD instance there are maybe other third-parties involved using SAML, LDAP or the integration with a Mattermost instance.|
|
||||
|Profile pictures| Your profile picture is either loaded from the service you used to login, the CodiMD instance or Libravatar.|
|
||||
|Uploaded pictures| Pictures that are uploaded for documents are either uploaded to Amazon S3, Imgur, a minio instance or the local filesystem of the CodiMD server.|
|
||||
| your data | our usage |
|
||||
| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| IP-Address | Used to communicate with your browser and our servers. It's may exposed to third-parties which provide resources for this service. These services are, depending on your login method, the document you visit and the setup of this instance: Google, Disqus, MathJax, GitHub, SlideShare/LinkedIn, yahoo, Libravatar, Imgur, Amazon, and Cloudflare. |
|
||||
| Usernames and profiles | Your username as well as user profiles that are connected with it are transmitted and stored by us to provide a useful login integration with services like GitHub, Facebook, Twitter, GitLab, Dropbox, Google. Depending on the setup of this CodiMD instance there are maybe other third-parties involved using SAML, LDAP or the integration with a Mattermost instance. |
|
||||
| Profile pictures | Your profile picture is either loaded from the service you used to login, the CodiMD instance or Libravatar. |
|
||||
| Uploaded pictures | Pictures that are uploaded for documents are either uploaded to Amazon S3, Imgur, a minio instance or the local filesystem of the CodiMD server. |
|
||||
|
||||
All account data and notes are stored in a mysql/postgres/sqlite database. Besides the user accounts and the document themselves also relationships between the documents and the user accounts are stored. This includes ownership, authorship and revisions of all changes made during the creation of a note.
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -9,7 +9,7 @@ slideOptions:
|
|||
This feature still in beta, may have some issues.
|
||||
|
||||
For details please visit:
|
||||
https://github.com/hakimel/reveal.js/
|
||||
<https://github.com/hakimel/reveal.js/>
|
||||
|
||||
You can use `URL query` or `slideOptions` of the YAML metadata to customize your slides.
|
||||
|
||||
|
@ -29,7 +29,7 @@ Is the divider of slides
|
|||
|
||||
Is the divider of branches
|
||||
|
||||
Use the _Space_ key to navigate through all slides.
|
||||
Use the *Space* key to navigate through all slides.
|
||||
|
||||
----
|
||||
|
||||
|
@ -254,7 +254,7 @@ You can link between slides internally, [like this](#/1/3).
|
|||
|
||||
There's a [speaker view](https://github.com/hakimel/reveal.js#speaker-notes). It includes a timer, preview of the upcoming slide as well as your speaker notes.
|
||||
|
||||
Press the _S_ key to try it out.
|
||||
Press the *S* key to try it out.
|
||||
|
||||
Note:
|
||||
Oh hey, these are some notes. They'll be hidden in your presentation, but you can see them if you open the speaker notes window (hit `s` on your keyboard).
|
||||
|
|
|
@ -5,11 +5,10 @@ dir: ltr
|
|||
breaks: true
|
||||
---
|
||||
|
||||
Supported YAML metadata
|
||||
===
|
||||
# Supported YAML metadata
|
||||
|
||||
First you need to insert syntax like this at the **start** of the note:
|
||||
```
|
||||
```yaml
|
||||
---
|
||||
YAML metas
|
||||
---
|
||||
|
@ -18,8 +17,8 @@ YAML metas
|
|||
Replace the "YAML metas" in this section with any YAML options as below.
|
||||
You can also refer to this note's source code.
|
||||
|
||||
title
|
||||
---
|
||||
## title
|
||||
|
||||
This option will set the note title which prior than content title.
|
||||
|
||||
> default: not set
|
||||
|
@ -29,8 +28,8 @@ This option will set the note title which prior than content title.
|
|||
title: meta title
|
||||
```
|
||||
|
||||
description
|
||||
---
|
||||
## description
|
||||
|
||||
This option will set the note description as a `<meta name="description">` tag. This only affects the [Publish](../features#Share-Notes) function.
|
||||
|
||||
> default: not set
|
||||
|
@ -40,8 +39,8 @@ This option will set the note description as a `<meta name="description">` tag.
|
|||
description: meta description
|
||||
```
|
||||
|
||||
tags
|
||||
---
|
||||
## tags
|
||||
|
||||
This option will set the tags which prior than content tags.
|
||||
|
||||
> default: not set
|
||||
|
@ -51,8 +50,8 @@ This option will set the tags which prior than content tags.
|
|||
tags: features, cool, updated
|
||||
```
|
||||
|
||||
robots
|
||||
---
|
||||
## robots
|
||||
|
||||
This option will give below meta in the note head meta:
|
||||
```xml
|
||||
<meta name="robots" content="your_meta">
|
||||
|
@ -66,12 +65,12 @@ So you can prevent any search engine index your note by set `noindex, nofollow`.
|
|||
robots: noindex, nofollow
|
||||
```
|
||||
|
||||
lang
|
||||
---
|
||||
## lang
|
||||
|
||||
This option will set the language of the note.
|
||||
Setting the language helps the browser to apply rules such as typography correctly.
|
||||
You can find your the language code in ISO 639-1 standard:
|
||||
https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
|
||||
<https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes>
|
||||
|
||||
> default: not set (which will be en)
|
||||
|
||||
|
@ -80,12 +79,12 @@ https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
|
|||
langs: ja-jp
|
||||
```
|
||||
|
||||
dir
|
||||
---
|
||||
## dir
|
||||
|
||||
This option specifies the direction of the text in this note.
|
||||
You can only use whether `rtl` or `ltr`.
|
||||
Look more at here:
|
||||
http://www.w3.org/International/questions/qa-html-dir
|
||||
<http://www.w3.org/International/questions/qa-html-dir>
|
||||
|
||||
> default: not set (which will be ltr)
|
||||
|
||||
|
@ -94,8 +93,8 @@ http://www.w3.org/International/questions/qa-html-dir
|
|||
dir: rtl
|
||||
```
|
||||
|
||||
breaks
|
||||
---
|
||||
## breaks
|
||||
|
||||
This option means the hardbreaks in the note will be parsed or be ignore.
|
||||
The original markdown syntax breaks only if you put space twice, but CodiMD choose to breaks every time you enter a break.
|
||||
You can only use whether `true` or `false`.
|
||||
|
@ -107,8 +106,8 @@ You can only use whether `true` or `false`.
|
|||
breaks: false
|
||||
```
|
||||
|
||||
GA
|
||||
---
|
||||
## GA
|
||||
|
||||
This option allows you to enable Google Analytics with your ID.
|
||||
|
||||
> default: not set (which won't enable)
|
||||
|
@ -118,8 +117,8 @@ This option allows you to enable Google Analytics with your ID.
|
|||
GA: UA-12345667-8
|
||||
```
|
||||
|
||||
disqus
|
||||
---
|
||||
## disqus
|
||||
|
||||
This option allows you to enable Disqus with your shortname.
|
||||
|
||||
> default: not set (which won't enable)
|
||||
|
@ -129,8 +128,8 @@ This option allows you to enable Disqus with your shortname.
|
|||
disqus: codimd
|
||||
```
|
||||
|
||||
type
|
||||
---
|
||||
## type
|
||||
|
||||
This option allows you to switch the document view to the slide preview, to simplify live editing of presentations.
|
||||
|
||||
> default: not set
|
||||
|
@ -140,14 +139,14 @@ This option allows you to switch the document view to the slide preview, to simp
|
|||
type: slide
|
||||
```
|
||||
|
||||
slideOptions
|
||||
---
|
||||
## slideOptions
|
||||
|
||||
This option allows you to provide custom options to slide mode.
|
||||
Please below document for more details:
|
||||
https://github.com/hakimel/reveal.js/#configuration
|
||||
<https://github.com/hakimel/reveal.js/#configuration>
|
||||
|
||||
You could also set slide theme which named in below css files:
|
||||
https://github.com/hakimel/reveal.js/tree/master/css/theme
|
||||
<https://github.com/hakimel/reveal.js/tree/master/css/theme>
|
||||
|
||||
**Notice: always use two spaces as indention in YAML metadata!**
|
||||
|
||||
|
@ -160,8 +159,8 @@ slideOptions:
|
|||
theme: white
|
||||
```
|
||||
|
||||
opengraph
|
||||
---
|
||||
## opengraph
|
||||
|
||||
This option allows you to override the default generated opengraph metadata.
|
||||
See the [OpenGraph protocol documentation](https://ogp.me) for more information.
|
||||
|
||||
|
|
Loading…
Reference in a new issue