Merge branch 'master' into hs/proposal-appservice-login
This commit is contained in:
commit
24fedc2299
678 changed files with 25660 additions and 28336 deletions
|
@ -1,16 +1,39 @@
|
||||||
steps:
|
steps:
|
||||||
- label: ":books: Build spec"
|
- label: ":snake: Build swagger definitions for matrix.org"
|
||||||
command:
|
command:
|
||||||
- python3 -m venv env
|
# Install the python dependencies necessary to build the spec
|
||||||
- env/bin/pip install -r scripts/requirements.txt
|
- python3 -m venv env && . env/bin/activate
|
||||||
- ". env/bin/activate; scripts/generate-matrix-org-assets"
|
- pip install -r scripts/requirements.txt
|
||||||
|
# Build the spec
|
||||||
|
- scripts/generate-matrix-org-assets
|
||||||
artifact_paths:
|
artifact_paths:
|
||||||
- assets.tar.gz
|
- assets.tar.gz
|
||||||
plugins:
|
plugins:
|
||||||
- docker#v3.0.1:
|
- docker#v3.7.0:
|
||||||
image: "python:3.6"
|
image: python:3.9
|
||||||
|
|
||||||
- label: "rebuild matrix.org"
|
- label: "rebuild matrix.org"
|
||||||
trigger: "matrix-dot-org"
|
trigger: "matrix-dot-org"
|
||||||
async: true
|
async: true
|
||||||
branches: "master"
|
branches: "master"
|
||||||
|
|
||||||
|
- label: ":books: Build the spec"
|
||||||
|
command:
|
||||||
|
# Install package dependencies
|
||||||
|
- apk add nodejs npm git hugo
|
||||||
|
# Install the node dependencies necessary to build the spec
|
||||||
|
- npm i
|
||||||
|
# Pull all git submodules, required for the hugo theme
|
||||||
|
- git submodule update --init --recursive
|
||||||
|
# Pull current proposal information
|
||||||
|
- npm run get-proposals
|
||||||
|
# Build the spec, will build to './spec'
|
||||||
|
# Set the baseURL as we're deploying to https://spec.matrix.org/unstable
|
||||||
|
- hugo --baseURL "/unstable" -d "spec"
|
||||||
|
# Compress the result and make it available as an artifact
|
||||||
|
- tar -czf spec.tar.gz spec
|
||||||
|
artifact_paths:
|
||||||
|
- spec.tar.gz
|
||||||
|
plugins:
|
||||||
|
- docker#v3.7.0:
|
||||||
|
image: alpine
|
|
@ -1,13 +1,19 @@
|
||||||
gendoc: &gendoc
|
gendoc: &gendoc
|
||||||
name: Generate the docs
|
name: Generate the docs
|
||||||
|
# Note: Node dependencies are required for the hugo build.
|
||||||
|
# Note: We use a custom config file for circleci due to some specifics with hosting the
|
||||||
|
# site using CircleCI's artifacts platform. See config-circleci.toml for details.
|
||||||
command: |
|
command: |
|
||||||
source /env/bin/activate
|
apk add nodejs npm git hugo
|
||||||
scripts/gendoc.py
|
npm i
|
||||||
|
cat config-circleci.toml config.toml > hugo-config.toml
|
||||||
|
hugo --config hugo-config.toml --baseURL "/${CIRCLE_NODE_INDEX}/public"
|
||||||
|
|
||||||
genswagger: &genswagger
|
genswagger: &genswagger
|
||||||
name: Generate the swagger
|
name: Validate sources and generate swagger json
|
||||||
command: |
|
command: |
|
||||||
source /env/bin/activate
|
source /env/bin/activate
|
||||||
|
scripts/check-swagger-sources.py
|
||||||
scripts/dump-swagger.py
|
scripts/dump-swagger.py
|
||||||
|
|
||||||
buildswaggerui: &buildswaggerui
|
buildswaggerui: &buildswaggerui
|
||||||
|
@ -27,23 +33,14 @@ checkexamples: &checkexamples
|
||||||
name: Check Event Examples
|
name: Check Event Examples
|
||||||
command: |
|
command: |
|
||||||
source /env/bin/activate
|
source /env/bin/activate
|
||||||
cd event-schemas
|
scripts/check-event-schema-examples.py
|
||||||
./check_examples.py
|
|
||||||
cd ../api
|
|
||||||
./check_examples.py
|
|
||||||
|
|
||||||
genmatrixassets: &genmatrixassets
|
|
||||||
name: Generate/Verify matrix.org assets
|
|
||||||
command: |
|
|
||||||
source /env/bin/activate
|
|
||||||
./scripts/generate-matrix-org-assets
|
|
||||||
|
|
||||||
validateapi: &validateapi
|
validateapi: &validateapi
|
||||||
name: Validate OpenAPI specifications
|
name: Validate OpenAPI specifications
|
||||||
command: |
|
command: |
|
||||||
cd api
|
cd scripts
|
||||||
npm install
|
npm install
|
||||||
node validator.js -s "client-server"
|
node validator.js -s "../data/api/client-server"
|
||||||
|
|
||||||
buildspeculator: &buildspeculator
|
buildspeculator: &buildspeculator
|
||||||
name: Build Speculator
|
name: Build Speculator
|
||||||
|
@ -51,12 +48,6 @@ buildspeculator: &buildspeculator
|
||||||
cd scripts/speculator
|
cd scripts/speculator
|
||||||
go build -v
|
go build -v
|
||||||
|
|
||||||
buildcontinuserv: &buildcontinuserv
|
|
||||||
name: Build Continuserv
|
|
||||||
command: |
|
|
||||||
cd scripts/continuserv
|
|
||||||
go build -v
|
|
||||||
|
|
||||||
version: 2
|
version: 2
|
||||||
jobs:
|
jobs:
|
||||||
validate-docs:
|
validate-docs:
|
||||||
|
@ -71,18 +62,21 @@ jobs:
|
||||||
steps:
|
steps:
|
||||||
- checkout
|
- checkout
|
||||||
- run: *checkexamples
|
- run: *checkexamples
|
||||||
- run: *genmatrixassets # We don't actually use the assets, but we do want to make sure they build
|
|
||||||
build-docs:
|
build-docs:
|
||||||
docker:
|
docker:
|
||||||
- image: uhoreg/matrix-doc-build
|
- image: alpine
|
||||||
steps:
|
steps:
|
||||||
|
# Note: We install git in the image so we can pull git submodules. The hugo theme in use
|
||||||
|
# is a git submodule, which has its own submodules, and all need to be loaded.
|
||||||
|
- run: apk add git
|
||||||
- checkout
|
- checkout
|
||||||
|
- run: git submodule update --init --recursive
|
||||||
- run: *gendoc
|
- run: *gendoc
|
||||||
- store_artifacts:
|
- store_artifacts:
|
||||||
path: scripts/gen
|
path: public
|
||||||
- run:
|
- run:
|
||||||
name: "Doc build is available at:"
|
name: "Doc build is available at:"
|
||||||
command: DOCS_URL="${CIRCLE_BUILD_URL}/artifacts/${CIRCLE_NODE_INDEX}/${CIRCLE_WORKING_DIRECTORY/#\~/$HOME}/scripts/gen/index.html"; echo $DOCS_URL
|
command: DOCS_URL="${CIRCLE_BUILD_URL}/artifacts/${CIRCLE_NODE_INDEX}/public/index.html"; echo $DOCS_URL
|
||||||
build-swagger:
|
build-swagger:
|
||||||
docker:
|
docker:
|
||||||
- image: uhoreg/matrix-doc-build
|
- image: uhoreg/matrix-doc-build
|
||||||
|
@ -104,8 +98,6 @@ jobs:
|
||||||
name: Install Dependencies
|
name: Install Dependencies
|
||||||
command: |
|
command: |
|
||||||
go get -v github.com/hashicorp/golang-lru
|
go get -v github.com/hashicorp/golang-lru
|
||||||
go get -v gopkg.in/fsnotify/fsnotify.v1
|
|
||||||
- run: *buildcontinuserv
|
|
||||||
- run: *buildspeculator
|
- run: *buildspeculator
|
||||||
|
|
||||||
workflows:
|
workflows:
|
||||||
|
|
13
.github/ISSUE_TEMPLATE/clarification.md
vendored
Normal file
13
.github/ISSUE_TEMPLATE/clarification.md
vendored
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
---
|
||||||
|
name: Clarity problem
|
||||||
|
about: Report an area of the spec that is unclear.
|
||||||
|
title: ''
|
||||||
|
labels: 'clarification'
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Link to problem area**:
|
||||||
|
|
||||||
|
**Issue**
|
||||||
|
What is wrong? How can we improve?
|
8
.github/ISSUE_TEMPLATE/config.yaml
vendored
Normal file
8
.github/ISSUE_TEMPLATE/config.yaml
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
blank_issues_enabled: true
|
||||||
|
contact_links:
|
||||||
|
- name: Matrix Spec Discussion
|
||||||
|
url: "https://matrix.to/#/#matrix-spec:matrix.org"
|
||||||
|
about: Questions about the spec and proposal process can be asked here.
|
||||||
|
- name: Matrix Security Policy
|
||||||
|
url: https://www.matrix.org/security-disclosure-policy/
|
||||||
|
about: Learn more about our security disclosure policy.
|
13
.github/ISSUE_TEMPLATE/cosmetic-bug.md
vendored
Normal file
13
.github/ISSUE_TEMPLATE/cosmetic-bug.md
vendored
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
---
|
||||||
|
name: Cosmetic issue
|
||||||
|
about: Report an issue with how the spec looks.
|
||||||
|
title: ''
|
||||||
|
labels: 'aesthetic'
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Link to problem area**:
|
||||||
|
|
||||||
|
**Issue**
|
||||||
|
What is wrong? What can we do to improve?
|
12
.github/ISSUE_TEMPLATE/idea.md
vendored
Normal file
12
.github/ISSUE_TEMPLATE/idea.md
vendored
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
---
|
||||||
|
name: Spec idea
|
||||||
|
about: Suggest a future MSC idea.
|
||||||
|
title: ''
|
||||||
|
labels: 'improvement'
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Suggestion**
|
||||||
|
What would you like to see in Matrix? If your idea is vaguely complete enough, we
|
||||||
|
recommend submitting [an MSC](https://matrix.org/docs/spec/proposals) instead.
|
16
.github/ISSUE_TEMPLATE/spec-bug.md
vendored
Normal file
16
.github/ISSUE_TEMPLATE/spec-bug.md
vendored
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
---
|
||||||
|
name: Documentation error
|
||||||
|
about: Report an issue with the spec itself (incorrect text).
|
||||||
|
title: ''
|
||||||
|
labels: 'spec-bug'
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Link to problem area**:
|
||||||
|
|
||||||
|
**Issue**
|
||||||
|
What is wrong?
|
||||||
|
|
||||||
|
**Expected behaviour**
|
||||||
|
How can the issue be fixed? Links to implementations/documents which prove the spec is wrong are appreciated.
|
6
.gitignore
vendored
6
.gitignore
vendored
|
@ -1,15 +1,21 @@
|
||||||
/api/node_modules
|
/api/node_modules
|
||||||
/assets
|
/assets
|
||||||
/assets.tar.gz
|
/assets.tar.gz
|
||||||
|
/data/msc
|
||||||
/env*
|
/env*
|
||||||
|
/node_modules
|
||||||
|
/resources
|
||||||
/scripts/gen
|
/scripts/gen
|
||||||
/scripts/continuserv/continuserv
|
/scripts/continuserv/continuserv
|
||||||
/scripts/speculator/speculator
|
/scripts/speculator/speculator
|
||||||
/scripts/swagger
|
/scripts/swagger
|
||||||
/scripts/tmp
|
/scripts/tmp
|
||||||
/templating/out
|
/templating/out
|
||||||
|
/hugo-config.toml
|
||||||
|
/public
|
||||||
*.pyc
|
*.pyc
|
||||||
*.swp
|
*.swp
|
||||||
_rendered.rst
|
_rendered.rst
|
||||||
/.vscode/
|
/.vscode/
|
||||||
/.idea/
|
/.idea/
|
||||||
|
/spec/
|
4
.gitmodules
vendored
Normal file
4
.gitmodules
vendored
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
[submodule "themes/docsy"]
|
||||||
|
path = themes/docsy
|
||||||
|
url = https://github.com/matrix-org/docsy.git
|
||||||
|
branch = master
|
|
@ -29,9 +29,7 @@ some time to complete.
|
||||||
Changes to the protocol (new endpoints, ideas, etc) need to go through the
|
Changes to the protocol (new endpoints, ideas, etc) need to go through the
|
||||||
`proposals process <https://matrix.org/docs/spec/proposals>`_. Other changes,
|
`proposals process <https://matrix.org/docs/spec/proposals>`_. Other changes,
|
||||||
such as fixing bugs, typos, or clarifying existing behaviour do not need a proposal.
|
such as fixing bugs, typos, or clarifying existing behaviour do not need a proposal.
|
||||||
If you're not sure, visit us at `#matrix-spec:matrix.org`_
|
If you're not sure, visit us at `#matrix-spec:matrix.org`_ and ask.
|
||||||
and ask.
|
|
||||||
|
|
||||||
|
|
||||||
Other changes
|
Other changes
|
||||||
~~~~~~~~~~~~~
|
~~~~~~~~~~~~~
|
||||||
|
@ -64,12 +62,17 @@ following:
|
||||||
to fix. On the other hand, introducing new behaviour is best represented by a
|
to fix. On the other hand, introducing new behaviour is best represented by a
|
||||||
proposal.
|
proposal.
|
||||||
|
|
||||||
|
* Design or aesthetic changes, such as improving accessibility, colour schemes,
|
||||||
|
etc. Please check in with us at `#matrix-docs:matrix.org`_ with your proposed
|
||||||
|
design change before opening a PR so we can work with you on it.
|
||||||
|
|
||||||
For such changes, please do just open a `pull request`_. If you're not sure if
|
For such changes, please do just open a `pull request`_. If you're not sure if
|
||||||
your change is covered by the above, please visit `#matrix-spec:matrix.org` and
|
your change is covered by the above, please visit `#matrix-spec:matrix.org` and
|
||||||
ask.
|
ask.
|
||||||
|
|
||||||
.. _`pull request`: https://help.github.com/articles/about-pull-requests
|
.. _`pull request`: https://help.github.com/articles/about-pull-requests
|
||||||
.. _`#matrix-spec:matrix.org`: https://matrix.to/#/#matrix-spec:matrix.org
|
.. _`#matrix-spec:matrix.org`: https://matrix.to/#/#matrix-spec:matrix.org
|
||||||
|
.. _`#matrix-docs:matrix.org`: https://matrix.to/#/#matrix-docs:matrix.org
|
||||||
|
|
||||||
|
|
||||||
Adding to the changelog
|
Adding to the changelog
|
||||||
|
@ -86,8 +89,8 @@ To create a changelog entry, create a file named in the format ``prNumber.type``
|
||||||
the ``newsfragments`` directory. The ``type`` can be one of the following:
|
the ``newsfragments`` directory. The ``type`` can be one of the following:
|
||||||
|
|
||||||
* ``new`` - Used when adding new endpoints. Please have the file contents be the
|
* ``new`` - Used when adding new endpoints. Please have the file contents be the
|
||||||
method and route being added, surrounded in RST code tags. For example: ``POST
|
method and route being added, surrounded in markdown code tags. For example: \`POST
|
||||||
/accounts/whoami``
|
/accounts/whoami\`.
|
||||||
|
|
||||||
* ``feature`` - Used when adding backwards-compatible changes to the API.
|
* ``feature`` - Used when adding backwards-compatible changes to the API.
|
||||||
|
|
||||||
|
@ -100,8 +103,7 @@ the ``newsfragments`` directory. The ``type`` can be one of the following:
|
||||||
|
|
||||||
All news fragments must have a brief summary explaining the change in the
|
All news fragments must have a brief summary explaining the change in the
|
||||||
contents of the file. The summary must end in a full stop to be in line with
|
contents of the file. The summary must end in a full stop to be in line with
|
||||||
the style guide and and formatting must be done using `Restructured Text
|
the style guide and formatting must be done using Markdown.
|
||||||
<http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html>`_.
|
|
||||||
|
|
||||||
Changes that do not change the spec, such as changes to the build script, formatting,
|
Changes that do not change the spec, such as changes to the build script, formatting,
|
||||||
CSS, etc should not get a news fragment.
|
CSS, etc should not get a news fragment.
|
||||||
|
|
96
README.md
Normal file
96
README.md
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
# Matrix Specification
|
||||||
|
|
||||||
|
This repository contains the Matrix Specification, rendered at [spec.matrix.org](http://spec.matrix.org/).
|
||||||
|
|
||||||
|
Developers looking to use Matrix should join [#matrix-dev:matrix.org](https://matrix.to/#/#matrix-dev:matrix.org)
|
||||||
|
on Matrix for help.
|
||||||
|
|
||||||
|
Spec authors and proposal writers are welcome to join [#matrix-spec:matrix.org](https://matrix.to/#/#matrix-spec:matrix.org).
|
||||||
|
We welcome contributions! See [CONTRIBUTING.rst](./CONTRIBUTING.rst) for details.
|
||||||
|
|
||||||
|
## Structure
|
||||||
|
|
||||||
|
The Matrix spec is compiled with [Hugo](https://gohugo.io/) (a static site generator) with the following structure:
|
||||||
|
|
||||||
|
* `/assets`: assets that need postprocessing using [Hugo Pipes](https://gohugo.io/hugo-pipes/introduction/).
|
||||||
|
For example, Sass files would go here.
|
||||||
|
|
||||||
|
* `/content`: files that will become pages in the site go here. Typically these are Markdown files with some YAML front
|
||||||
|
matter indicating, [among other things](https://gohugo.io/content-management/front-matter/), what layout should be
|
||||||
|
applied to this page. The organization of files under `/content` determines the organization of pages in the built
|
||||||
|
site.
|
||||||
|
|
||||||
|
* `/data`: this can contain TOML, YAML, or JSON files. Files kept here are directly available to template code as
|
||||||
|
[data objects](https://gohugo.io/templates/data-templates/), so templates don't need to load them from a file and
|
||||||
|
parse them. This is also where our Swagger/OpenAPI definitions and schemas are.
|
||||||
|
|
||||||
|
* `/layouts`: this contains [Hugo templates](https://gohugo.io/templates/). Some templates define the overall layout of
|
||||||
|
a page: for example, whether it has header, footer, sidebar, and so on.
|
||||||
|
* `/layouts/partials`: these templates can be called from other templates, so they can be used to factor out
|
||||||
|
template code that's used in more than one template. An obvious example here is something like a sidebar, where
|
||||||
|
several different page layouts might all include the sidebar. But also, partial templates can return values: this
|
||||||
|
means they can be used like functions, that can be called by multiple templates to do some common processing.
|
||||||
|
* `/layouts/shortcodes`: these templates can be called directly from files in `/content`.
|
||||||
|
|
||||||
|
* `/static`: static files which don't need preprocessing. JS or CSS files could live here.
|
||||||
|
|
||||||
|
* `/themes`: you can use just Hugo or use it with a theme. Themes primarily provide additional templates, which are
|
||||||
|
supplied in a `/themes/$theme_name/layouts` directory. You can use a theme but customise it by providing your own
|
||||||
|
versions of any of the theme layouts in the base `/layouts` directory. That is, if a theme provides
|
||||||
|
`/themes/$theme_name/layouts/sidebar.html` and you provide `/layouts/sidebar.html`, then your version of the
|
||||||
|
template will be used.
|
||||||
|
|
||||||
|
It also has the following top-level file:
|
||||||
|
|
||||||
|
* `config.toml`: site-wide configuration settings. Some of these are built-in and you can add your own. Config settings
|
||||||
|
defined here are available in templates. All these directories above are configurable via `config.toml` settings.
|
||||||
|
|
||||||
|
Additionally, the following directories may be of interest:
|
||||||
|
|
||||||
|
* `/attic`: Here contains historical sections of specification and legacy drafts for the specification.
|
||||||
|
* `/changelogs`: Various bits of changelog for the specification areas.
|
||||||
|
* `/data-definitions`: Bits of structured data consumable by Matrix implementations.
|
||||||
|
* `/meta`: Documentation relating to the spec's processes that are otherwise untracked (release instructions, etc).
|
||||||
|
* `/scripts`: Various scripts for generating the spec and validating its contents.
|
||||||
|
* `/proposals`: Matrix Spec Change (MSC) proposals. See <https://spec.matrix.org/unstable/proposals/>.
|
||||||
|
|
||||||
|
## Authoring changes to the spec
|
||||||
|
|
||||||
|
Please read [CONTRIBUTING.rst](./CONTRIBUTING.rst) before authoring a change to the spec. Note that spec authoring takes
|
||||||
|
place after an MSC has been accepted, not as part of a proposal itself.
|
||||||
|
|
||||||
|
1. Install the extended version (often the OS default) of Hugo: <https://gohugo.io/getting-started/installing>
|
||||||
|
2. Run `git submodule update --init --recursive` for good measure.
|
||||||
|
3. Run `npm i` to install the dependencies. Note that this will require NodeJS to be installed.
|
||||||
|
4. Run `npm run get-proposals` to seed proposal data. This is merely for populating the content of the "Spec Change Proposals"
|
||||||
|
page and is not required.
|
||||||
|
5. Run `hugo serve` to run a local webserver which builds whenever a file change is detected. If watching doesn't appear
|
||||||
|
to be working for you, try `hugo serve --disableFastRender` instead.
|
||||||
|
6. Edit the specification 🙂
|
||||||
|
|
||||||
|
We use a highly customized [Docsy](https://www.docsy.dev/) theme for our generated site, which uses Bootstrap and Font
|
||||||
|
Awesome. If you're looking at making design-related changes to the spec site, please coordinate with us in
|
||||||
|
[#matrix-docs:matrix.org](https://matrix.to/#/#matrix-docs:matrix.org) before opening a PR.
|
||||||
|
|
||||||
|
## Building the specification
|
||||||
|
|
||||||
|
If for some reason you're not a CI/CD system and want to render a static version of the spec for yourself, follow the above
|
||||||
|
steps for authoring changes to the specification and instead of `hugo serve` run `hugo -d "spec"` - this will generate the
|
||||||
|
spec to `/spec`. If you'd like to serve the spec off a path instead of a domain root (eg: `/unstable`), add `--baseURL "/unstable"`
|
||||||
|
to the `hugo -d "spec"` command.
|
||||||
|
|
||||||
|
For building the swagger definitions, create a python3 virtualenv and activate it. Then run `pip install -r ./scripts/requirements.txt`
|
||||||
|
and finally `python ./scripts/dump-swagger.py` to generate it to `./scripts/swagger/api-docs.json`. To make use of the generated file,
|
||||||
|
there are a number of options:
|
||||||
|
|
||||||
|
* It can be uploaded from your filesystem to an online editor/viewer such as [on the swagger website](http://editor.swagger.io/).
|
||||||
|
* You can run a local HTTP server by running `./scripts/swagger-http-server.py`, and then view the documentation via an
|
||||||
|
online viewer; for example, at <http://petstore.swagger.io/?url=http://localhost:8000/api-docs.json>.
|
||||||
|
* You can host the swagger UI yourself. See <https://github.com/swagger-api/swagger-ui#how-to-run> for advice on how to
|
||||||
|
do so.
|
||||||
|
|
||||||
|
## Issue tracking
|
||||||
|
|
||||||
|
Specification issues are tracked on github at <https://github.com/matrix-org/matrix-doc/issues>.
|
||||||
|
|
||||||
|
See [meta/github-labels.rst](./meta/github-labels.rst) for information on what the labels mean.
|
143
README.rst
143
README.rst
|
@ -1,143 +0,0 @@
|
||||||
This repository contains the Matrix specification.
|
|
||||||
|
|
||||||
If you want to ask more about the specification, join us on
|
|
||||||
`#matrix-dev:matrix.org <http://matrix.to/#/#matrix-dev:matrix.org>`_.
|
|
||||||
|
|
||||||
We welcome contributions to the spec! See the notes below on `Building the
|
|
||||||
specification`_, and `<CONTRIBUTING.rst>`_ to get started making contributions.
|
|
||||||
|
|
||||||
Note that the Matrix Project lists, which were previously kept in this
|
|
||||||
repository, are now in https://github.com/matrix-org/matrix.org.
|
|
||||||
|
|
||||||
Structure of this repository
|
|
||||||
============================
|
|
||||||
|
|
||||||
- ``api`` : `OpenAPI`_ (swagger) specifications for the the HTTP APIs.
|
|
||||||
- ``attic``: historical sections of specification for reference
|
|
||||||
purposes.
|
|
||||||
- ``changelogs``: change logs for the various parts of the
|
|
||||||
specification.
|
|
||||||
- ``drafts``: Previously, contained documents which were under discussion for
|
|
||||||
future incusion into the specification and/or supporting documentation. This
|
|
||||||
is now historical, as we use separate discussion documents (see
|
|
||||||
`<CONTRIBUTING.rst>`_).
|
|
||||||
- ``event-schemas``: the `JSON Schema`_ for all Matrix events
|
|
||||||
contained in the specification, along with example JSON files.
|
|
||||||
- ``meta``: documents outlining the processes involved when writing
|
|
||||||
documents, e.g. documentation style, guidelines.
|
|
||||||
- ``scripts``: scripts to generate formatted versions of the
|
|
||||||
documentation, typically HTML.
|
|
||||||
- ``specification``: the specification split up into sections.
|
|
||||||
|
|
||||||
.. _OpenAPI: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md
|
|
||||||
.. _JSON Schema: http://json-schema.org/
|
|
||||||
|
|
||||||
Building the specification
|
|
||||||
==========================
|
|
||||||
|
|
||||||
The Matrix Spec is generated by a set of scripts, from the RST documents, API
|
|
||||||
specs and event schemas in this repository.
|
|
||||||
|
|
||||||
Preparation
|
|
||||||
-----------
|
|
||||||
|
|
||||||
To use the scripts, it is best to create a Python 3.4+ virtualenv as follows::
|
|
||||||
|
|
||||||
virtualenv -p python3 env
|
|
||||||
env/bin/pip install -r scripts/requirements.txt
|
|
||||||
|
|
||||||
(Benjamin Saunders has contributed a script for `Nix`_ users, which can be
|
|
||||||
invoked with ``nix-shell scripts/contrib/shell.nix``.)
|
|
||||||
|
|
||||||
.. TODO: Possibly we need some libs installed; should record what they are.
|
|
||||||
|
|
||||||
.. _`Nix`: https://nixos.org/nix/
|
|
||||||
|
|
||||||
Generating the specification
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
To rebuild the specification, use ``scripts/gendoc.py``::
|
|
||||||
|
|
||||||
source env/bin/activate
|
|
||||||
./scripts/gendoc.py
|
|
||||||
|
|
||||||
The above will write the rendered version of the specification to
|
|
||||||
``scripts/gen``. To view it, point your browser at ``scripts/gen/index.html``.
|
|
||||||
|
|
||||||
Windows users
|
|
||||||
~~~~~~~~~~~~~
|
|
||||||
The ``source`` program does not exist on Windows, so instead run one of the
|
|
||||||
``activate`` files in ``.\env\Scripts\`` to activate the virtual environment.
|
|
||||||
|
|
||||||
If you're on Windows Vista or higher, be sure that the "Symbolic Links"
|
|
||||||
option was selected when installing Git prior to cloning this repository. If
|
|
||||||
you're still seeing errors about files not being found it is likely because
|
|
||||||
the symlink at ``api/client-server/definitions/event-schemas`` looks like a
|
|
||||||
file. To correct the problem, open an Administrative/Elevated Command Prompt in your
|
|
||||||
cloned matrix-doc directory and run the following::
|
|
||||||
|
|
||||||
cd api\client-server\definitions
|
|
||||||
del event-schemas
|
|
||||||
mklink /D event-schemas "..\..\..\event-schemas"
|
|
||||||
|
|
||||||
This will delete the file and replace it with a symlink. Git should not detect
|
|
||||||
this as a change, and you should be able to go back to building the project.
|
|
||||||
|
|
||||||
Generating the OpenAPI (Swagger) specs
|
|
||||||
--------------------------------------
|
|
||||||
|
|
||||||
`Swagger`_ is a framework for representing RESTful APIs. We use it to generate
|
|
||||||
interactive documentation for our APIs.
|
|
||||||
|
|
||||||
Before the Swagger docs can be used in the Swagger UI (or other tool expecting
|
|
||||||
a Swagger specs, they must be combined into a single json file. This can be
|
|
||||||
done as follows::
|
|
||||||
|
|
||||||
source env/bin/activate
|
|
||||||
./scripts/dump-swagger.py
|
|
||||||
|
|
||||||
By default, ``dump-swagger`` will write to ``scripts/swagger/api-docs.json``.
|
|
||||||
|
|
||||||
To make use of the generated file, there are a number of options:
|
|
||||||
|
|
||||||
* It can be uploaded from your filesystem to an online editor/viewer such as
|
|
||||||
http://editor.swagger.io/
|
|
||||||
* You can run a local HTTP server by running
|
|
||||||
``./scripts/swagger-http-server.py``, and then view the documentation via an
|
|
||||||
online viewer; for example, at
|
|
||||||
http://petstore.swagger.io/?url=http://localhost:8000/api-docs.json
|
|
||||||
* You can host the swagger UI yourself. See
|
|
||||||
https://github.com/swagger-api/swagger-ui#how-to-run for advice on how to do
|
|
||||||
so.
|
|
||||||
|
|
||||||
.. _`Swagger`: http://swagger.io/
|
|
||||||
|
|
||||||
Continuserv
|
|
||||||
-----------
|
|
||||||
|
|
||||||
Continuserv is a script which will rebuild the specification every time a file
|
|
||||||
is changed, and will serve it to a browser over HTTP. It is intended for use by
|
|
||||||
specification authors, so that they can quickly see the effects of their
|
|
||||||
changes.
|
|
||||||
|
|
||||||
It is written in Go, so you will need the ``go`` compiler installed on your
|
|
||||||
computer. You will also need to install fsnotify by running::
|
|
||||||
|
|
||||||
go get gopkg.in/fsnotify/fsnotify.v1
|
|
||||||
|
|
||||||
Then, create a virtualenv as described above under `Preparation`_,
|
|
||||||
and::
|
|
||||||
|
|
||||||
source env/bin/activate
|
|
||||||
go run ./scripts/continuserv/main.go
|
|
||||||
|
|
||||||
You will then be able to view the generated spec by visiting
|
|
||||||
http://localhost:8000/index.html.
|
|
||||||
|
|
||||||
Issue tracking
|
|
||||||
==============
|
|
||||||
|
|
||||||
Issues with the Matrix specification are tracked in `GitHub
|
|
||||||
<https://github.com/matrix-org/matrix-doc/issues>`_.
|
|
||||||
|
|
||||||
See `meta/github-labels.rst <meta/github-labels.rst>`_ for notes on what the labels mean.
|
|
|
@ -1,2 +0,0 @@
|
||||||
This directory contains swagger-compatible representations of our APIs. See
|
|
||||||
the main README.rst for details on how to make use of them.
|
|
|
@ -1 +0,0 @@
|
||||||
../../../event-schemas
|
|
38
api/files/backbone-min.js
vendored
38
api/files/backbone-min.js
vendored
|
@ -1,38 +0,0 @@
|
||||||
// Backbone.js 0.9.2
|
|
||||||
|
|
||||||
// (c) 2010-2012 Jeremy Ashkenas, DocumentCloud Inc.
|
|
||||||
// Backbone may be freely distributed under the MIT license.
|
|
||||||
// For all details and documentation:
|
|
||||||
// http://backbonejs.org
|
|
||||||
(function(){var l=this,y=l.Backbone,z=Array.prototype.slice,A=Array.prototype.splice,g;g="undefined"!==typeof exports?exports:l.Backbone={};g.VERSION="0.9.2";var f=l._;!f&&"undefined"!==typeof require&&(f=require("underscore"));var i=l.jQuery||l.Zepto||l.ender;g.setDomLibrary=function(a){i=a};g.noConflict=function(){l.Backbone=y;return this};g.emulateHTTP=!1;g.emulateJSON=!1;var p=/\s+/,k=g.Events={on:function(a,b,c){var d,e,f,g,j;if(!b)return this;a=a.split(p);for(d=this._callbacks||(this._callbacks=
|
|
||||||
{});e=a.shift();)f=(j=d[e])?j.tail:{},f.next=g={},f.context=c,f.callback=b,d[e]={tail:g,next:j?j.next:f};return this},off:function(a,b,c){var d,e,h,g,j,q;if(e=this._callbacks){if(!a&&!b&&!c)return delete this._callbacks,this;for(a=a?a.split(p):f.keys(e);d=a.shift();)if(h=e[d],delete e[d],h&&(b||c))for(g=h.tail;(h=h.next)!==g;)if(j=h.callback,q=h.context,b&&j!==b||c&&q!==c)this.on(d,j,q);return this}},trigger:function(a){var b,c,d,e,f,g;if(!(d=this._callbacks))return this;f=d.all;a=a.split(p);for(g=
|
|
||||||
z.call(arguments,1);b=a.shift();){if(c=d[b])for(e=c.tail;(c=c.next)!==e;)c.callback.apply(c.context||this,g);if(c=f){e=c.tail;for(b=[b].concat(g);(c=c.next)!==e;)c.callback.apply(c.context||this,b)}}return this}};k.bind=k.on;k.unbind=k.off;var o=g.Model=function(a,b){var c;a||(a={});b&&b.parse&&(a=this.parse(a));if(c=n(this,"defaults"))a=f.extend({},c,a);b&&b.collection&&(this.collection=b.collection);this.attributes={};this._escapedAttributes={};this.cid=f.uniqueId("c");this.changed={};this._silent=
|
|
||||||
{};this._pending={};this.set(a,{silent:!0});this.changed={};this._silent={};this._pending={};this._previousAttributes=f.clone(this.attributes);this.initialize.apply(this,arguments)};f.extend(o.prototype,k,{changed:null,_silent:null,_pending:null,idAttribute:"id",initialize:function(){},toJSON:function(){return f.clone(this.attributes)},get:function(a){return this.attributes[a]},escape:function(a){var b;if(b=this._escapedAttributes[a])return b;b=this.get(a);return this._escapedAttributes[a]=f.escape(null==
|
|
||||||
b?"":""+b)},has:function(a){return null!=this.get(a)},set:function(a,b,c){var d,e;f.isObject(a)||null==a?(d=a,c=b):(d={},d[a]=b);c||(c={});if(!d)return this;d instanceof o&&(d=d.attributes);if(c.unset)for(e in d)d[e]=void 0;if(!this._validate(d,c))return!1;this.idAttribute in d&&(this.id=d[this.idAttribute]);var b=c.changes={},h=this.attributes,g=this._escapedAttributes,j=this._previousAttributes||{};for(e in d){a=d[e];if(!f.isEqual(h[e],a)||c.unset&&f.has(h,e))delete g[e],(c.silent?this._silent:
|
|
||||||
b)[e]=!0;c.unset?delete h[e]:h[e]=a;!f.isEqual(j[e],a)||f.has(h,e)!=f.has(j,e)?(this.changed[e]=a,c.silent||(this._pending[e]=!0)):(delete this.changed[e],delete this._pending[e])}c.silent||this.change(c);return this},unset:function(a,b){(b||(b={})).unset=!0;return this.set(a,null,b)},clear:function(a){(a||(a={})).unset=!0;return this.set(f.clone(this.attributes),a)},fetch:function(a){var a=a?f.clone(a):{},b=this,c=a.success;a.success=function(d,e,f){if(!b.set(b.parse(d,f),a))return!1;c&&c(b,d)};
|
|
||||||
a.error=g.wrapError(a.error,b,a);return(this.sync||g.sync).call(this,"read",this,a)},save:function(a,b,c){var d,e;f.isObject(a)||null==a?(d=a,c=b):(d={},d[a]=b);c=c?f.clone(c):{};if(c.wait){if(!this._validate(d,c))return!1;e=f.clone(this.attributes)}a=f.extend({},c,{silent:!0});if(d&&!this.set(d,c.wait?a:c))return!1;var h=this,i=c.success;c.success=function(a,b,e){b=h.parse(a,e);if(c.wait){delete c.wait;b=f.extend(d||{},b)}if(!h.set(b,c))return false;i?i(h,a):h.trigger("sync",h,a,c)};c.error=g.wrapError(c.error,
|
|
||||||
h,c);b=this.isNew()?"create":"update";b=(this.sync||g.sync).call(this,b,this,c);c.wait&&this.set(e,a);return b},destroy:function(a){var a=a?f.clone(a):{},b=this,c=a.success,d=function(){b.trigger("destroy",b,b.collection,a)};if(this.isNew())return d(),!1;a.success=function(e){a.wait&&d();c?c(b,e):b.trigger("sync",b,e,a)};a.error=g.wrapError(a.error,b,a);var e=(this.sync||g.sync).call(this,"delete",this,a);a.wait||d();return e},url:function(){var a=n(this,"urlRoot")||n(this.collection,"url")||t();
|
|
||||||
return this.isNew()?a:a+("/"==a.charAt(a.length-1)?"":"/")+encodeURIComponent(this.id)},parse:function(a){return a},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return null==this.id},change:function(a){a||(a={});var b=this._changing;this._changing=!0;for(var c in this._silent)this._pending[c]=!0;var d=f.extend({},a.changes,this._silent);this._silent={};for(c in d)this.trigger("change:"+c,this,this.get(c),a);if(b)return this;for(;!f.isEmpty(this._pending);){this._pending=
|
|
||||||
{};this.trigger("change",this,a);for(c in this.changed)!this._pending[c]&&!this._silent[c]&&delete this.changed[c];this._previousAttributes=f.clone(this.attributes)}this._changing=!1;return this},hasChanged:function(a){return!arguments.length?!f.isEmpty(this.changed):f.has(this.changed,a)},changedAttributes:function(a){if(!a)return this.hasChanged()?f.clone(this.changed):!1;var b,c=!1,d=this._previousAttributes,e;for(e in a)if(!f.isEqual(d[e],b=a[e]))(c||(c={}))[e]=b;return c},previous:function(a){return!arguments.length||
|
|
||||||
!this._previousAttributes?null:this._previousAttributes[a]},previousAttributes:function(){return f.clone(this._previousAttributes)},isValid:function(){return!this.validate(this.attributes)},_validate:function(a,b){if(b.silent||!this.validate)return!0;var a=f.extend({},this.attributes,a),c=this.validate(a,b);if(!c)return!0;b&&b.error?b.error(this,c,b):this.trigger("error",this,c,b);return!1}});var r=g.Collection=function(a,b){b||(b={});b.model&&(this.model=b.model);b.comparator&&(this.comparator=b.comparator);
|
|
||||||
this._reset();this.initialize.apply(this,arguments);a&&this.reset(a,{silent:!0,parse:b.parse})};f.extend(r.prototype,k,{model:o,initialize:function(){},toJSON:function(a){return this.map(function(b){return b.toJSON(a)})},add:function(a,b){var c,d,e,g,i,j={},k={},l=[];b||(b={});a=f.isArray(a)?a.slice():[a];c=0;for(d=a.length;c<d;c++){if(!(e=a[c]=this._prepareModel(a[c],b)))throw Error("Can't add an invalid model to a collection");g=e.cid;i=e.id;j[g]||this._byCid[g]||null!=i&&(k[i]||this._byId[i])?
|
|
||||||
l.push(c):j[g]=k[i]=e}for(c=l.length;c--;)a.splice(l[c],1);c=0;for(d=a.length;c<d;c++)(e=a[c]).on("all",this._onModelEvent,this),this._byCid[e.cid]=e,null!=e.id&&(this._byId[e.id]=e);this.length+=d;A.apply(this.models,[null!=b.at?b.at:this.models.length,0].concat(a));this.comparator&&this.sort({silent:!0});if(b.silent)return this;c=0;for(d=this.models.length;c<d;c++)if(j[(e=this.models[c]).cid])b.index=c,e.trigger("add",e,this,b);return this},remove:function(a,b){var c,d,e,g;b||(b={});a=f.isArray(a)?
|
|
||||||
a.slice():[a];c=0;for(d=a.length;c<d;c++)if(g=this.getByCid(a[c])||this.get(a[c]))delete this._byId[g.id],delete this._byCid[g.cid],e=this.indexOf(g),this.models.splice(e,1),this.length--,b.silent||(b.index=e,g.trigger("remove",g,this,b)),this._removeReference(g);return this},push:function(a,b){a=this._prepareModel(a,b);this.add(a,b);return a},pop:function(a){var b=this.at(this.length-1);this.remove(b,a);return b},unshift:function(a,b){a=this._prepareModel(a,b);this.add(a,f.extend({at:0},b));return a},
|
|
||||||
shift:function(a){var b=this.at(0);this.remove(b,a);return b},get:function(a){return null==a?void 0:this._byId[null!=a.id?a.id:a]},getByCid:function(a){return a&&this._byCid[a.cid||a]},at:function(a){return this.models[a]},where:function(a){return f.isEmpty(a)?[]:this.filter(function(b){for(var c in a)if(a[c]!==b.get(c))return!1;return!0})},sort:function(a){a||(a={});if(!this.comparator)throw Error("Cannot sort a set without a comparator");var b=f.bind(this.comparator,this);1==this.comparator.length?
|
|
||||||
this.models=this.sortBy(b):this.models.sort(b);a.silent||this.trigger("reset",this,a);return this},pluck:function(a){return f.map(this.models,function(b){return b.get(a)})},reset:function(a,b){a||(a=[]);b||(b={});for(var c=0,d=this.models.length;c<d;c++)this._removeReference(this.models[c]);this._reset();this.add(a,f.extend({silent:!0},b));b.silent||this.trigger("reset",this,b);return this},fetch:function(a){a=a?f.clone(a):{};void 0===a.parse&&(a.parse=!0);var b=this,c=a.success;a.success=function(d,
|
|
||||||
e,f){b[a.add?"add":"reset"](b.parse(d,f),a);c&&c(b,d)};a.error=g.wrapError(a.error,b,a);return(this.sync||g.sync).call(this,"read",this,a)},create:function(a,b){var c=this,b=b?f.clone(b):{},a=this._prepareModel(a,b);if(!a)return!1;b.wait||c.add(a,b);var d=b.success;b.success=function(e,f){b.wait&&c.add(e,b);d?d(e,f):e.trigger("sync",a,f,b)};a.save(null,b);return a},parse:function(a){return a},chain:function(){return f(this.models).chain()},_reset:function(){this.length=0;this.models=[];this._byId=
|
|
||||||
{};this._byCid={}},_prepareModel:function(a,b){b||(b={});a instanceof o?a.collection||(a.collection=this):(b.collection=this,a=new this.model(a,b),a._validate(a.attributes,b)||(a=!1));return a},_removeReference:function(a){this==a.collection&&delete a.collection;a.off("all",this._onModelEvent,this)},_onModelEvent:function(a,b,c,d){("add"==a||"remove"==a)&&c!=this||("destroy"==a&&this.remove(b,d),b&&a==="change:"+b.idAttribute&&(delete this._byId[b.previous(b.idAttribute)],this._byId[b.id]=b),this.trigger.apply(this,
|
|
||||||
arguments))}});f.each("forEach,each,map,reduce,reduceRight,find,detect,filter,select,reject,every,all,some,any,include,contains,invoke,max,min,sortBy,sortedIndex,toArray,size,first,initial,rest,last,without,indexOf,shuffle,lastIndexOf,isEmpty,groupBy".split(","),function(a){r.prototype[a]=function(){return f[a].apply(f,[this.models].concat(f.toArray(arguments)))}});var u=g.Router=function(a){a||(a={});a.routes&&(this.routes=a.routes);this._bindRoutes();this.initialize.apply(this,arguments)},B=/:\w+/g,
|
|
||||||
C=/\*\w+/g,D=/[-[\]{}()+?.,\\^$|#\s]/g;f.extend(u.prototype,k,{initialize:function(){},route:function(a,b,c){g.history||(g.history=new m);f.isRegExp(a)||(a=this._routeToRegExp(a));c||(c=this[b]);g.history.route(a,f.bind(function(d){d=this._extractParameters(a,d);c&&c.apply(this,d);this.trigger.apply(this,["route:"+b].concat(d));g.history.trigger("route",this,b,d)},this));return this},navigate:function(a,b){g.history.navigate(a,b)},_bindRoutes:function(){if(this.routes){var a=[],b;for(b in this.routes)a.unshift([b,
|
|
||||||
this.routes[b]]);b=0;for(var c=a.length;b<c;b++)this.route(a[b][0],a[b][1],this[a[b][1]])}},_routeToRegExp:function(a){a=a.replace(D,"\\$&").replace(B,"([^/]+)").replace(C,"(.*?)");return RegExp("^"+a+"$")},_extractParameters:function(a,b){return a.exec(b).slice(1)}});var m=g.History=function(){this.handlers=[];f.bindAll(this,"checkUrl")},s=/^[#\/]/,E=/msie [\w.]+/;m.started=!1;f.extend(m.prototype,k,{interval:50,getHash:function(a){return(a=(a?a.location:window.location).href.match(/#(.*)$/))?a[1]:
|
|
||||||
""},getFragment:function(a,b){if(null==a)if(this._hasPushState||b){var a=window.location.pathname,c=window.location.search;c&&(a+=c)}else a=this.getHash();a.indexOf(this.options.root)||(a=a.substr(this.options.root.length));return a.replace(s,"")},start:function(a){if(m.started)throw Error("Backbone.history has already been started");m.started=!0;this.options=f.extend({},{root:"/"},this.options,a);this._wantsHashChange=!1!==this.options.hashChange;this._wantsPushState=!!this.options.pushState;this._hasPushState=
|
|
||||||
!(!this.options.pushState||!window.history||!window.history.pushState);var a=this.getFragment(),b=document.documentMode;if(b=E.exec(navigator.userAgent.toLowerCase())&&(!b||7>=b))this.iframe=i('<iframe src="javascript:0" tabindex="-1" />').hide().appendTo("body")[0].contentWindow,this.navigate(a);this._hasPushState?i(window).bind("popstate",this.checkUrl):this._wantsHashChange&&"onhashchange"in window&&!b?i(window).bind("hashchange",this.checkUrl):this._wantsHashChange&&(this._checkUrlInterval=setInterval(this.checkUrl,
|
|
||||||
this.interval));this.fragment=a;a=window.location;b=a.pathname==this.options.root;if(this._wantsHashChange&&this._wantsPushState&&!this._hasPushState&&!b)return this.fragment=this.getFragment(null,!0),window.location.replace(this.options.root+"#"+this.fragment),!0;this._wantsPushState&&this._hasPushState&&b&&a.hash&&(this.fragment=this.getHash().replace(s,""),window.history.replaceState({},document.title,a.protocol+"//"+a.host+this.options.root+this.fragment));if(!this.options.silent)return this.loadUrl()},
|
|
||||||
stop:function(){i(window).unbind("popstate",this.checkUrl).unbind("hashchange",this.checkUrl);clearInterval(this._checkUrlInterval);m.started=!1},route:function(a,b){this.handlers.unshift({route:a,callback:b})},checkUrl:function(){var a=this.getFragment();a==this.fragment&&this.iframe&&(a=this.getFragment(this.getHash(this.iframe)));if(a==this.fragment)return!1;this.iframe&&this.navigate(a);this.loadUrl()||this.loadUrl(this.getHash())},loadUrl:function(a){var b=this.fragment=this.getFragment(a);return f.any(this.handlers,
|
|
||||||
function(a){if(a.route.test(b))return a.callback(b),!0})},navigate:function(a,b){if(!m.started)return!1;if(!b||!0===b)b={trigger:b};var c=(a||"").replace(s,"");this.fragment!=c&&(this._hasPushState?(0!=c.indexOf(this.options.root)&&(c=this.options.root+c),this.fragment=c,window.history[b.replace?"replaceState":"pushState"]({},document.title,c)):this._wantsHashChange?(this.fragment=c,this._updateHash(window.location,c,b.replace),this.iframe&&c!=this.getFragment(this.getHash(this.iframe))&&(b.replace||
|
|
||||||
this.iframe.document.open().close(),this._updateHash(this.iframe.location,c,b.replace))):window.location.assign(this.options.root+a),b.trigger&&this.loadUrl(a))},_updateHash:function(a,b,c){c?a.replace(a.toString().replace(/(javascript:|#).*$/,"")+"#"+b):a.hash=b}});var v=g.View=function(a){this.cid=f.uniqueId("view");this._configure(a||{});this._ensureElement();this.initialize.apply(this,arguments);this.delegateEvents()},F=/^(\S+)\s*(.*)$/,w="model,collection,el,id,attributes,className,tagName".split(",");
|
|
||||||
f.extend(v.prototype,k,{tagName:"div",$:function(a){return this.$el.find(a)},initialize:function(){},render:function(){return this},remove:function(){this.$el.remove();return this},make:function(a,b,c){a=document.createElement(a);b&&i(a).attr(b);c&&i(a).html(c);return a},setElement:function(a,b){this.$el&&this.undelegateEvents();this.$el=a instanceof i?a:i(a);this.el=this.$el[0];!1!==b&&this.delegateEvents();return this},delegateEvents:function(a){if(a||(a=n(this,"events"))){this.undelegateEvents();
|
|
||||||
for(var b in a){var c=a[b];f.isFunction(c)||(c=this[a[b]]);if(!c)throw Error('Method "'+a[b]+'" does not exist');var d=b.match(F),e=d[1],d=d[2],c=f.bind(c,this),e=e+(".delegateEvents"+this.cid);""===d?this.$el.bind(e,c):this.$el.delegate(d,e,c)}}},undelegateEvents:function(){this.$el.unbind(".delegateEvents"+this.cid)},_configure:function(a){this.options&&(a=f.extend({},this.options,a));for(var b=0,c=w.length;b<c;b++){var d=w[b];a[d]&&(this[d]=a[d])}this.options=a},_ensureElement:function(){if(this.el)this.setElement(this.el,
|
|
||||||
!1);else{var a=n(this,"attributes")||{};this.id&&(a.id=this.id);this.className&&(a["class"]=this.className);this.setElement(this.make(this.tagName,a),!1)}}});o.extend=r.extend=u.extend=v.extend=function(a,b){var c=G(this,a,b);c.extend=this.extend;return c};var H={create:"POST",update:"PUT","delete":"DELETE",read:"GET"};g.sync=function(a,b,c){var d=H[a];c||(c={});var e={type:d,dataType:"json"};c.url||(e.url=n(b,"url")||t());if(!c.data&&b&&("create"==a||"update"==a))e.contentType="application/json",
|
|
||||||
e.data=JSON.stringify(b.toJSON());g.emulateJSON&&(e.contentType="application/x-www-form-urlencoded",e.data=e.data?{model:e.data}:{});if(g.emulateHTTP&&("PUT"===d||"DELETE"===d))g.emulateJSON&&(e.data._method=d),e.type="POST",e.beforeSend=function(a){a.setRequestHeader("X-HTTP-Method-Override",d)};"GET"!==e.type&&!g.emulateJSON&&(e.processData=!1);return i.ajax(f.extend(e,c))};g.wrapError=function(a,b,c){return function(d,e){e=d===b?e:d;a?a(b,e,c):b.trigger("error",b,e,c)}};var x=function(){},G=function(a,
|
|
||||||
b,c){var d;d=b&&b.hasOwnProperty("constructor")?b.constructor:function(){a.apply(this,arguments)};f.extend(d,a);x.prototype=a.prototype;d.prototype=new x;b&&f.extend(d.prototype,b);c&&f.extend(d,c);d.prototype.constructor=d;d.__super__=a.prototype;return d},n=function(a,b){return!a||!a[b]?null:f.isFunction(a[b])?a[b]():a[b]},t=function(){throw Error('A "url" property or function must be specified');}}).call(this);
|
|
|
@ -1,16 +0,0 @@
|
||||||
/* latin */
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Droid Sans';
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 400;
|
|
||||||
src: local('Droid Sans'), local('DroidSans'), url(http://fonts.gstatic.com/s/droidsans/v5/s-BiyweUPV0v-yRb-cjciPk_vArhqVIZ0nv9q090hN8.woff2), format('woff2');
|
|
||||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
|
|
||||||
}
|
|
||||||
/* latin */
|
|
||||||
@font-face {
|
|
||||||
font-family: 'Droid Sans';
|
|
||||||
font-style: normal;
|
|
||||||
font-weight: 700;
|
|
||||||
src: local('Droid Sans Bold'), local('DroidSans-Bold'), url(http://fonts.gstatic.com/s/droidsans/v5/EFpQQyG9GqCrobXxL-KRMYWiMMZ7xLd792ULpGE4W_Y.woff2), format('woff2');
|
|
||||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
2
api/files/jquery-1.8.0.min.js
vendored
2
api/files/jquery-1.8.0.min.js
vendored
File diff suppressed because one or more lines are too long
18
api/files/jquery.ba-bbq.min.js
vendored
18
api/files/jquery.ba-bbq.min.js
vendored
|
@ -1,18 +0,0 @@
|
||||||
/*
|
|
||||||
* jQuery BBQ: Back Button & Query Library - v1.2.1 - 2/17/2010
|
|
||||||
* http://benalman.com/projects/jquery-bbq-plugin/
|
|
||||||
*
|
|
||||||
* Copyright (c) 2010 "Cowboy" Ben Alman
|
|
||||||
* Dual licensed under the MIT and GPL licenses.
|
|
||||||
* http://benalman.com/about/license/
|
|
||||||
*/
|
|
||||||
(function($,p){var i,m=Array.prototype.slice,r=decodeURIComponent,a=$.param,c,l,v,b=$.bbq=$.bbq||{},q,u,j,e=$.event.special,d="hashchange",A="querystring",D="fragment",y="elemUrlAttr",g="location",k="href",t="src",x=/^.*\?|#.*$/g,w=/^.*\#/,h,C={};function E(F){return typeof F==="string"}function B(G){var F=m.call(arguments,1);return function(){return G.apply(this,F.concat(m.call(arguments)))}}function n(F){return F.replace(/^[^#]*#?(.*)$/,"$1")}function o(F){return F.replace(/(?:^[^?#]*\?([^#]*).*$)?.*/,"$1")}function f(H,M,F,I,G){var O,L,K,N,J;if(I!==i){K=F.match(H?/^([^#]*)\#?(.*)$/:/^([^#?]*)\??([^#]*)(#?.*)/);J=K[3]||"";if(G===2&&E(I)){L=I.replace(H?w:x,"")}else{N=l(K[2]);I=E(I)?l[H?D:A](I):I;L=G===2?I:G===1?$.extend({},I,N):$.extend({},N,I);L=a(L);if(H){L=L.replace(h,r)}}O=K[1]+(H?"#":L||!K[1]?"?":"")+L+J}else{O=M(F!==i?F:p[g][k])}return O}a[A]=B(f,0,o);a[D]=c=B(f,1,n);c.noEscape=function(G){G=G||"";var F=$.map(G.split(""),encodeURIComponent);h=new RegExp(F.join("|"),"g")};c.noEscape(",/");$.deparam=l=function(I,F){var H={},G={"true":!0,"false":!1,"null":null};$.each(I.replace(/\+/g," ").split("&"),function(L,Q){var K=Q.split("="),P=r(K[0]),J,O=H,M=0,R=P.split("]["),N=R.length-1;if(/\[/.test(R[0])&&/\]$/.test(R[N])){R[N]=R[N].replace(/\]$/,"");R=R.shift().split("[").concat(R);N=R.length-1}else{N=0}if(K.length===2){J=r(K[1]);if(F){J=J&&!isNaN(J)?+J:J==="undefined"?i:G[J]!==i?G[J]:J}if(N){for(;M<=N;M++){P=R[M]===""?O.length:R[M];O=O[P]=M<N?O[P]||(R[M+1]&&isNaN(R[M+1])?{}:[]):J}}else{if($.isArray(H[P])){H[P].push(J)}else{if(H[P]!==i){H[P]=[H[P],J]}else{H[P]=J}}}}else{if(P){H[P]=F?i:""}}});return H};function z(H,F,G){if(F===i||typeof F==="boolean"){G=F;F=a[H?D:A]()}else{F=E(F)?F.replace(H?w:x,""):F}return l(F,G)}l[A]=B(z,0);l[D]=v=B(z,1);$[y]||($[y]=function(F){return $.extend(C,F)})({a:k,base:k,iframe:t,img:t,input:t,form:"action",link:k,script:t});j=$[y];function s(I,G,H,F){if(!E(H)&&typeof H!=="object"){F=H;H=G;G=i}return this.each(function(){var L=$(this),J=G||j()[(this.nodeName||"").toLowerCase()]||"",K=J&&L.attr(J)||"";L.attr(J,a[I](K,H,F))})}$.fn[A]=B(s,A);$.fn[D]=B(s,D);b.pushState=q=function(I,F){if(E(I)&&/^#/.test(I)&&F===i){F=2}var H=I!==i,G=c(p[g][k],H?I:{},H?F:2);p[g][k]=G+(/#/.test(G)?"":"#")};b.getState=u=function(F,G){return F===i||typeof F==="boolean"?v(F):v(G)[F]};b.removeState=function(F){var G={};if(F!==i){G=u();$.each($.isArray(F)?F:arguments,function(I,H){delete G[H]})}q(G,2)};e[d]=$.extend(e[d],{add:function(F){var H;function G(J){var I=J[D]=c();J.getState=function(K,L){return K===i||typeof K==="boolean"?l(I,K):l(I,L)[K]};H.apply(this,arguments)}if($.isFunction(F)){H=F;return G}else{H=F.handler;F.handler=G}}})})(jQuery,this);
|
|
||||||
/*
|
|
||||||
* jQuery hashchange event - v1.2 - 2/11/2010
|
|
||||||
* http://benalman.com/projects/jquery-hashchange-plugin/
|
|
||||||
*
|
|
||||||
* Copyright (c) 2010 "Cowboy" Ben Alman
|
|
||||||
* Dual licensed under the MIT and GPL licenses.
|
|
||||||
* http://benalman.com/about/license/
|
|
||||||
*/
|
|
||||||
(function($,i,b){var j,k=$.event.special,c="location",d="hashchange",l="href",f=$.browser,g=document.documentMode,h=f.msie&&(g===b||g<8),e="on"+d in i&&!h;function a(m){m=m||i[c][l];return m.replace(/^[^#]*#?(.*)$/,"$1")}$[d+"Delay"]=100;k[d]=$.extend(k[d],{setup:function(){if(e){return false}$(j.start)},teardown:function(){if(e){return false}$(j.stop)}});j=(function(){var m={},r,n,o,q;function p(){o=q=function(s){return s};if(h){n=$('<iframe src="javascript:0"/>').hide().insertAfter("body")[0].contentWindow;q=function(){return a(n.document[c][l])};o=function(u,s){if(u!==s){var t=n.document;t.open().close();t[c].hash="#"+u}};o(a())}}m.start=function(){if(r){return}var t=a();o||p();(function s(){var v=a(),u=q(t);if(v!==t){o(t=v,u);$(i).trigger(d)}else{if(u!==t){i[c][l]=i[c][l].replace(/#.*/,"")+"#"+u}}r=setTimeout(s,$[d+"Delay"])})()};m.stop=function(){if(!n){r&&clearTimeout(r);r=0}};return m})()})(jQuery,this);
|
|
1
api/files/jquery.slideto.min.js
vendored
1
api/files/jquery.slideto.min.js
vendored
|
@ -1 +0,0 @@
|
||||||
(function(b){b.fn.slideto=function(a){a=b.extend({slide_duration:"slow",highlight_duration:3E3,highlight:true,highlight_color:"#FFFF99"},a);return this.each(function(){obj=b(this);b("body").animate({scrollTop:obj.offset().top},a.slide_duration,function(){a.highlight&&b.ui.version&&obj.effect("highlight",{color:a.highlight_color},a.highlight_duration)})})}})(jQuery);
|
|
8
api/files/jquery.wiggle.min.js
vendored
8
api/files/jquery.wiggle.min.js
vendored
|
@ -1,8 +0,0 @@
|
||||||
/*
|
|
||||||
jQuery Wiggle
|
|
||||||
Author: WonderGroup, Jordan Thomas
|
|
||||||
URL: http://labs.wondergroup.com/demos/mini-ui/index.html
|
|
||||||
License: MIT (http://en.wikipedia.org/wiki/MIT_License)
|
|
||||||
*/
|
|
||||||
jQuery.fn.wiggle=function(o){var d={speed:50,wiggles:3,travel:5,callback:null};var o=jQuery.extend(d,o);return this.each(function(){var cache=this;var wrap=jQuery(this).wrap('<div class="wiggle-wrap"></div>').css("position","relative");var calls=0;for(i=1;i<=o.wiggles;i++){jQuery(this).animate({left:"-="+o.travel},o.speed).animate({left:"+="+o.travel*2},o.speed*2).animate({left:"-="+o.travel},o.speed,function(){calls++;if(jQuery(cache).parent().hasClass('wiggle-wrap')){jQuery(cache).parent().replaceWith(cache);}
|
|
||||||
if(calls==o.wiggles&&jQuery.isFunction(o.callback)){o.callback();}});}});};
|
|
|
@ -1,125 +0,0 @@
|
||||||
/* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 */
|
|
||||||
html,
|
|
||||||
body,
|
|
||||||
div,
|
|
||||||
span,
|
|
||||||
applet,
|
|
||||||
object,
|
|
||||||
iframe,
|
|
||||||
h1,
|
|
||||||
h2,
|
|
||||||
h3,
|
|
||||||
h4,
|
|
||||||
h5,
|
|
||||||
h6,
|
|
||||||
p,
|
|
||||||
blockquote,
|
|
||||||
pre,
|
|
||||||
a,
|
|
||||||
abbr,
|
|
||||||
acronym,
|
|
||||||
address,
|
|
||||||
big,
|
|
||||||
cite,
|
|
||||||
code,
|
|
||||||
del,
|
|
||||||
dfn,
|
|
||||||
em,
|
|
||||||
img,
|
|
||||||
ins,
|
|
||||||
kbd,
|
|
||||||
q,
|
|
||||||
s,
|
|
||||||
samp,
|
|
||||||
small,
|
|
||||||
strike,
|
|
||||||
strong,
|
|
||||||
sub,
|
|
||||||
sup,
|
|
||||||
tt,
|
|
||||||
var,
|
|
||||||
b,
|
|
||||||
u,
|
|
||||||
i,
|
|
||||||
center,
|
|
||||||
dl,
|
|
||||||
dt,
|
|
||||||
dd,
|
|
||||||
ol,
|
|
||||||
ul,
|
|
||||||
li,
|
|
||||||
fieldset,
|
|
||||||
form,
|
|
||||||
label,
|
|
||||||
legend,
|
|
||||||
table,
|
|
||||||
caption,
|
|
||||||
tbody,
|
|
||||||
tfoot,
|
|
||||||
thead,
|
|
||||||
tr,
|
|
||||||
th,
|
|
||||||
td,
|
|
||||||
article,
|
|
||||||
aside,
|
|
||||||
canvas,
|
|
||||||
details,
|
|
||||||
embed,
|
|
||||||
figure,
|
|
||||||
figcaption,
|
|
||||||
footer,
|
|
||||||
header,
|
|
||||||
hgroup,
|
|
||||||
menu,
|
|
||||||
nav,
|
|
||||||
output,
|
|
||||||
ruby,
|
|
||||||
section,
|
|
||||||
summary,
|
|
||||||
time,
|
|
||||||
mark,
|
|
||||||
audio,
|
|
||||||
video {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
border: 0;
|
|
||||||
font-size: 100%;
|
|
||||||
font: inherit;
|
|
||||||
vertical-align: baseline;
|
|
||||||
}
|
|
||||||
/* HTML5 display-role reset for older browsers */
|
|
||||||
article,
|
|
||||||
aside,
|
|
||||||
details,
|
|
||||||
figcaption,
|
|
||||||
figure,
|
|
||||||
footer,
|
|
||||||
header,
|
|
||||||
hgroup,
|
|
||||||
menu,
|
|
||||||
nav,
|
|
||||||
section {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
body {
|
|
||||||
line-height: 1;
|
|
||||||
}
|
|
||||||
ol,
|
|
||||||
ul {
|
|
||||||
list-style: none;
|
|
||||||
}
|
|
||||||
blockquote,
|
|
||||||
q {
|
|
||||||
quotes: none;
|
|
||||||
}
|
|
||||||
blockquote:before,
|
|
||||||
blockquote:after,
|
|
||||||
q:before,
|
|
||||||
q:after {
|
|
||||||
content: '';
|
|
||||||
content: none;
|
|
||||||
}
|
|
||||||
table {
|
|
||||||
border-collapse: collapse;
|
|
||||||
border-spacing: 0;
|
|
||||||
}
|
|
1221
api/files/screen.css
1221
api/files/screen.css
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,211 +0,0 @@
|
||||||
var appName;
|
|
||||||
var popupMask;
|
|
||||||
var popupDialog;
|
|
||||||
var clientId;
|
|
||||||
var realm;
|
|
||||||
|
|
||||||
function handleLogin() {
|
|
||||||
var scopes = [];
|
|
||||||
|
|
||||||
if(window.swaggerUi.api.authSchemes
|
|
||||||
&& window.swaggerUi.api.authSchemes.oauth2
|
|
||||||
&& window.swaggerUi.api.authSchemes.oauth2.scopes) {
|
|
||||||
scopes = window.swaggerUi.api.authSchemes.oauth2.scopes;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(window.swaggerUi.api
|
|
||||||
&& window.swaggerUi.api.info) {
|
|
||||||
appName = window.swaggerUi.api.info.title;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(popupDialog.length > 0)
|
|
||||||
popupDialog = popupDialog.last();
|
|
||||||
else {
|
|
||||||
popupDialog = $(
|
|
||||||
[
|
|
||||||
'<div class="api-popup-dialog">',
|
|
||||||
'<div class="api-popup-title">Select OAuth2.0 Scopes</div>',
|
|
||||||
'<div class="api-popup-content">',
|
|
||||||
'<p>Scopes are used to grant an application different levels of access to data on behalf of the end user. Each API may declare one or more scopes.',
|
|
||||||
'<a href="#">Learn how to use</a>',
|
|
||||||
'</p>',
|
|
||||||
'<p><strong>' + appName + '</strong> API requires the following scopes. Select which ones you want to grant to Swagger UI.</p>',
|
|
||||||
'<ul class="api-popup-scopes">',
|
|
||||||
'</ul>',
|
|
||||||
'<p class="error-msg"></p>',
|
|
||||||
'<div class="api-popup-actions"><button class="api-popup-authbtn api-button green" type="button">Authorize</button><button class="api-popup-cancel api-button gray" type="button">Cancel</button></div>',
|
|
||||||
'</div>',
|
|
||||||
'</div>'].join(''));
|
|
||||||
$(document.body).append(popupDialog);
|
|
||||||
|
|
||||||
popup = popupDialog.find('ul.api-popup-scopes').empty();
|
|
||||||
for (i = 0; i < scopes.length; i ++) {
|
|
||||||
scope = scopes[i];
|
|
||||||
str = '<li><input type="checkbox" id="scope_' + i + '" scope="' + scope.scope + '"/>' + '<label for="scope_' + i + '">' + scope.scope;
|
|
||||||
if (scope.description) {
|
|
||||||
str += '<br/><span class="api-scope-desc">' + scope.description + '</span>';
|
|
||||||
}
|
|
||||||
str += '</label></li>';
|
|
||||||
popup.append(str);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var $win = $(window),
|
|
||||||
dw = $win.width(),
|
|
||||||
dh = $win.height(),
|
|
||||||
st = $win.scrollTop(),
|
|
||||||
dlgWd = popupDialog.outerWidth(),
|
|
||||||
dlgHt = popupDialog.outerHeight(),
|
|
||||||
top = (dh -dlgHt)/2 + st,
|
|
||||||
left = (dw - dlgWd)/2;
|
|
||||||
|
|
||||||
popupDialog.css({
|
|
||||||
top: (top < 0? 0 : top) + 'px',
|
|
||||||
left: (left < 0? 0 : left) + 'px'
|
|
||||||
});
|
|
||||||
|
|
||||||
popupDialog.find('button.api-popup-cancel').click(function() {
|
|
||||||
popupMask.hide();
|
|
||||||
popupDialog.hide();
|
|
||||||
});
|
|
||||||
popupDialog.find('button.api-popup-authbtn').click(function() {
|
|
||||||
popupMask.hide();
|
|
||||||
popupDialog.hide();
|
|
||||||
|
|
||||||
var authSchemes = window.swaggerUi.api.authSchemes;
|
|
||||||
var host = window.location;
|
|
||||||
var redirectUrl = host.protocol + '//' + host.host + "/o2c.html";
|
|
||||||
var url = null;
|
|
||||||
|
|
||||||
var p = window.swaggerUi.api.authSchemes;
|
|
||||||
for (var key in p) {
|
|
||||||
if (p.hasOwnProperty(key)) {
|
|
||||||
var o = p[key].grantTypes;
|
|
||||||
for(var t in o) {
|
|
||||||
if(o.hasOwnProperty(t) && t === 'implicit') {
|
|
||||||
var dets = o[t];
|
|
||||||
url = dets.loginEndpoint.url + "?response_type=token";
|
|
||||||
window.swaggerUi.tokenName = dets.tokenName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var scopes = []
|
|
||||||
var o = $('.api-popup-scopes').find('input:checked');
|
|
||||||
|
|
||||||
for(k =0; k < o.length; k++) {
|
|
||||||
scopes.push($(o[k]).attr("scope"));
|
|
||||||
}
|
|
||||||
|
|
||||||
window.enabledScopes=scopes;
|
|
||||||
|
|
||||||
url += '&redirect_uri=' + encodeURIComponent(redirectUrl);
|
|
||||||
url += '&realm=' + encodeURIComponent(realm);
|
|
||||||
url += '&client_id=' + encodeURIComponent(clientId);
|
|
||||||
url += '&scope=' + encodeURIComponent(scopes);
|
|
||||||
|
|
||||||
window.open(url);
|
|
||||||
});
|
|
||||||
|
|
||||||
popupMask.show();
|
|
||||||
popupDialog.show();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function handleLogout() {
|
|
||||||
for(key in window.authorizations.authz){
|
|
||||||
window.authorizations.remove(key)
|
|
||||||
}
|
|
||||||
window.enabledScopes = null;
|
|
||||||
$('.api-ic.ic-on').addClass('ic-off');
|
|
||||||
$('.api-ic.ic-on').removeClass('ic-on');
|
|
||||||
|
|
||||||
// set the info box
|
|
||||||
$('.api-ic.ic-warning').addClass('ic-error');
|
|
||||||
$('.api-ic.ic-warning').removeClass('ic-warning');
|
|
||||||
}
|
|
||||||
|
|
||||||
function initOAuth(opts) {
|
|
||||||
var o = (opts||{});
|
|
||||||
var errors = [];
|
|
||||||
|
|
||||||
appName = (o.appName||errors.push("missing appName"));
|
|
||||||
popupMask = (o.popupMask||$('#api-common-mask'));
|
|
||||||
popupDialog = (o.popupDialog||$('.api-popup-dialog'));
|
|
||||||
clientId = (o.clientId||errors.push("missing client id"));
|
|
||||||
realm = (o.realm||errors.push("missing realm"));
|
|
||||||
|
|
||||||
if(errors.length > 0){
|
|
||||||
log("auth unable initialize oauth: " + errors);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$('pre code').each(function(i, e) {hljs.highlightBlock(e)});
|
|
||||||
$('.api-ic').click(function(s) {
|
|
||||||
if($(s.target).hasClass('ic-off'))
|
|
||||||
handleLogin();
|
|
||||||
else {
|
|
||||||
handleLogout();
|
|
||||||
}
|
|
||||||
false;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function onOAuthComplete(token) {
|
|
||||||
if(token) {
|
|
||||||
if(token.error) {
|
|
||||||
var checkbox = $('input[type=checkbox],.secured')
|
|
||||||
checkbox.each(function(pos){
|
|
||||||
checkbox[pos].checked = false;
|
|
||||||
});
|
|
||||||
alert(token.error);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
var b = token[window.swaggerUi.tokenName];
|
|
||||||
if(b){
|
|
||||||
// if all roles are satisfied
|
|
||||||
var o = null;
|
|
||||||
$.each($('.auth #api_information_panel'), function(k, v) {
|
|
||||||
var children = v;
|
|
||||||
if(children && children.childNodes) {
|
|
||||||
var requiredScopes = [];
|
|
||||||
$.each((children.childNodes), function (k1, v1){
|
|
||||||
var inner = v1.innerHTML;
|
|
||||||
if(inner)
|
|
||||||
requiredScopes.push(inner);
|
|
||||||
});
|
|
||||||
var diff = [];
|
|
||||||
for(var i=0; i < requiredScopes.length; i++) {
|
|
||||||
var s = requiredScopes[i];
|
|
||||||
if(window.enabledScopes && window.enabledScopes.indexOf(s) == -1) {
|
|
||||||
diff.push(s);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(diff.length > 0){
|
|
||||||
o = v.parentNode;
|
|
||||||
$(o.parentNode).find('.api-ic.ic-on').addClass('ic-off');
|
|
||||||
$(o.parentNode).find('.api-ic.ic-on').removeClass('ic-on');
|
|
||||||
|
|
||||||
// sorry, not all scopes are satisfied
|
|
||||||
$(o).find('.api-ic').addClass('ic-warning');
|
|
||||||
$(o).find('.api-ic').removeClass('ic-error');
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
o = v.parentNode;
|
|
||||||
$(o.parentNode).find('.api-ic.ic-off').addClass('ic-on');
|
|
||||||
$(o.parentNode).find('.api-ic.ic-off').removeClass('ic-off');
|
|
||||||
|
|
||||||
// all scopes are satisfied
|
|
||||||
$(o).find('.api-ic').addClass('ic-info');
|
|
||||||
$(o).find('.api-ic').removeClass('ic-warning');
|
|
||||||
$(o).find('.api-ic').removeClass('ic-error');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
window.authorizations.add("oauth2", new ApiKeyAuthorization("Authorization", "Bearer " + b, "header"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load diff
1604
api/files/swagger.js
1604
api/files/swagger.js
File diff suppressed because it is too large
Load diff
32
api/files/underscore-min.js
vendored
32
api/files/underscore-min.js
vendored
|
@ -1,32 +0,0 @@
|
||||||
// Underscore.js 1.3.3
|
|
||||||
// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
|
|
||||||
// Underscore is freely distributable under the MIT license.
|
|
||||||
// Portions of Underscore are inspired or borrowed from Prototype,
|
|
||||||
// Oliver Steele's Functional, and John Resig's Micro-Templating.
|
|
||||||
// For all details and documentation:
|
|
||||||
// http://documentcloud.github.com/underscore
|
|
||||||
(function(){function r(a,c,d){if(a===c)return 0!==a||1/a==1/c;if(null==a||null==c)return a===c;a._chain&&(a=a._wrapped);c._chain&&(c=c._wrapped);if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return!1;switch(e){case "[object String]":return a==""+c;case "[object Number]":return a!=+a?c!=+c:0==a?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source==
|
|
||||||
c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if("object"!=typeof a||"object"!=typeof c)return!1;for(var f=d.length;f--;)if(d[f]==a)return!0;d.push(a);var f=0,g=!0;if("[object Array]"==e){if(f=a.length,g=f==c.length)for(;f--&&(g=f in a==f in c&&r(a[f],c[f],d)););}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return!1;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&r(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c,h)&&!f--)break;
|
|
||||||
g=!f}}d.pop();return g}var s=this,I=s._,o={},k=Array.prototype,p=Object.prototype,i=k.slice,J=k.unshift,l=p.toString,K=p.hasOwnProperty,y=k.forEach,z=k.map,A=k.reduce,B=k.reduceRight,C=k.filter,D=k.every,E=k.some,q=k.indexOf,F=k.lastIndexOf,p=Array.isArray,L=Object.keys,t=Function.prototype.bind,b=function(a){return new m(a)};"undefined"!==typeof exports?("undefined"!==typeof module&&module.exports&&(exports=module.exports=b),exports._=b):s._=b;b.VERSION="1.3.3";var j=b.each=b.forEach=function(a,
|
|
||||||
c,d){if(a!=null)if(y&&a.forEach===y)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(d,a[e],e,a)===o)break}else for(e in a)if(b.has(a,e)&&c.call(d,a[e],e,a)===o)break};b.map=b.collect=function(a,c,b){var e=[];if(a==null)return e;if(z&&a.map===z)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});if(a.length===+a.length)e.length=a.length;return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(A&&
|
|
||||||
a.reduce===A){e&&(c=b.bind(c,e));return f?a.reduce(c,d):a.reduce(c)}j(a,function(a,b,i){if(f)d=c.call(e,d,a,b,i);else{d=a;f=true}});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(B&&a.reduceRight===B){e&&(c=b.bind(c,e));return f?a.reduceRight(c,d):a.reduceRight(c)}var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect=function(a,
|
|
||||||
c,b){var e;G(a,function(a,g,h){if(c.call(b,a,g,h)){e=a;return true}});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(C&&a.filter===C)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(D&&a.every===D)return a.every(c,b);j(a,function(a,g,h){if(!(e=e&&c.call(b,
|
|
||||||
a,g,h)))return o});return!!e};var G=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(E&&a.some===E)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return o});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;if(q&&a.indexOf===q)return a.indexOf(c)!=-1;return b=G(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck=
|
|
||||||
function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a)&&a[0]===+a[0])return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a)&&a[0]===+a[0])return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&
|
|
||||||
(e={value:a,computed:b})});return e.value};b.shuffle=function(a){var b=[],d;j(a,function(a,f){d=Math.floor(Math.random()*(f+1));b[f]=b[d];b[d]=a});return b};b.sortBy=function(a,c,d){var e=b.isFunction(c)?c:function(a){return a[c]};return b.pluck(b.map(a,function(a,b,c){return{value:a,criteria:e.call(d,a,b,c)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c===void 0?1:d===void 0?-1:c<d?-1:c>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};
|
|
||||||
j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a,c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:b.isArray(a)||b.isArguments(a)?i.call(a):a.toArray&&b.isFunction(a.toArray)?a.toArray():b.values(a)};b.size=function(a){return b.isArray(a)?a.length:b.keys(a).length};b.first=b.head=b.take=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,
|
|
||||||
0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-1]};b.rest=b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,
|
|
||||||
e=[];a.length<3&&(c=true);b.reduce(d,function(d,g,h){if(c?b.last(d)!==g||!d.length:!b.include(d,g)){d.push(g);e.push(a[h])}return d},[]);return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1),true);return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=
|
|
||||||
i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,c,d){if(a==null)return-1;var e;if(d){d=b.sortedIndex(a,c);return a[d]===c?d:-1}if(q&&a.indexOf===q)return a.indexOf(c);d=0;for(e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(F&&a.lastIndexOf===F)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){if(arguments.length<=
|
|
||||||
1){b=a||0;a=0}for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;){g[f++]=a;a=a+d}return g};var H=function(){};b.bind=function(a,c){var d,e;if(a.bind===t&&t)return t.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));H.prototype=a.prototype;var b=new H,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=
|
|
||||||
i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,c){var d={};c||(c=b.identity);return function(){var e=c.apply(this,arguments);return b.has(d,e)?d[e]:d[e]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(null,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i,j=b.debounce(function(){h=
|
|
||||||
g=false},c);return function(){d=this;e=arguments;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);j()},c));g?h=true:i=a.apply(d,e);j();g=true;return i}};b.debounce=function(a,b,d){var e;return function(){var f=this,g=arguments;d&&!e&&a.apply(f,g);clearTimeout(e);e=setTimeout(function(){e=null;d||a.apply(f,g)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(i.call(arguments,0));
|
|
||||||
return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=L||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&
|
|
||||||
c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.pick=function(a){var c={};j(b.flatten(i.call(arguments,1)),function(b){b in a&&(c[b]=a[b])});return c};b.defaults=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return r(a,b,[])};b.isEmpty=
|
|
||||||
function(a){if(a==null)return true;if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=p||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)};b.isArguments=function(a){return l.call(a)=="[object Arguments]"};b.isArguments(arguments)||(b.isArguments=function(a){return!(!a||!b.has(a,"callee"))});b.isFunction=function(a){return l.call(a)=="[object Function]"};
|
|
||||||
b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isFinite=function(a){return b.isNumber(a)&&isFinite(a)};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"};b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,
|
|
||||||
b){return K.call(a,b)};b.noConflict=function(){s._=I;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")};b.result=function(a,c){if(a==null)return null;var d=a[c];return b.isFunction(d)?d.call(a):d};b.mixin=function(a){j(b.functions(a),function(c){M(c,b[c]=a[c])})};var N=0;b.uniqueId=
|
|
||||||
function(a){var b=N++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var u=/.^/,n={"\\":"\\","'":"'",r:"\r",n:"\n",t:"\t",u2028:"\u2028",u2029:"\u2029"},v;for(v in n)n[n[v]]=v;var O=/\\|'|\r|\n|\t|\u2028|\u2029/g,P=/\\(\\|'|r|n|t|u2028|u2029)/g,w=function(a){return a.replace(P,function(a,b){return n[b]})};b.template=function(a,c,d){d=b.defaults(d||{},b.templateSettings);a="__p+='"+a.replace(O,function(a){return"\\"+n[a]}).replace(d.escape||
|
|
||||||
u,function(a,b){return"'+\n_.escape("+w(b)+")+\n'"}).replace(d.interpolate||u,function(a,b){return"'+\n("+w(b)+")+\n'"}).replace(d.evaluate||u,function(a,b){return"';\n"+w(b)+"\n;__p+='"})+"';\n";d.variable||(a="with(obj||{}){\n"+a+"}\n");var a="var __p='';var print=function(){__p+=Array.prototype.join.call(arguments, '')};\n"+a+"return __p;\n",e=new Function(d.variable||"obj","_",a);if(c)return e(c,b);c=function(a){return e.call(this,a,b)};c.source="function("+(d.variable||"obj")+"){\n"+a+"}";return c};
|
|
||||||
b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var x=function(a,c){return c?b(a).chain():a},M=function(a,c){m.prototype[a]=function(){var a=i.call(arguments);J.call(a,this._wrapped);return x(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return x(d,
|
|
||||||
this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return x(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain=true;return this};m.prototype.value=function(){return this._wrapped}}).call(this);
|
|
|
@ -1,302 +0,0 @@
|
||||||
# Copyright 2018 New Vector Ltd
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
swagger: '2.0'
|
|
||||||
info:
|
|
||||||
title: "Matrix Identity Service Establishing Associations API"
|
|
||||||
version: "1.0.0"
|
|
||||||
host: localhost:8090
|
|
||||||
schemes:
|
|
||||||
- https
|
|
||||||
basePath: /_matrix/identity/api/v1
|
|
||||||
consumes:
|
|
||||||
- application/json
|
|
||||||
produces:
|
|
||||||
- application/json
|
|
||||||
paths:
|
|
||||||
"/3pid/getValidated3pid":
|
|
||||||
get:
|
|
||||||
summary: Check whether ownership of a 3pid was validated.
|
|
||||||
description: |-
|
|
||||||
Determines if a given 3pid has been validated by a user.
|
|
||||||
operationId: getValidated3pid
|
|
||||||
deprecated: true
|
|
||||||
parameters:
|
|
||||||
- in: query
|
|
||||||
type: string
|
|
||||||
name: sid
|
|
||||||
description: The Session ID generated by the ``requestToken`` call.
|
|
||||||
required: true
|
|
||||||
x-example: 1234
|
|
||||||
- in: query
|
|
||||||
type: string
|
|
||||||
name: client_secret
|
|
||||||
description: The client secret passed to the ``requestToken`` call.
|
|
||||||
required: true
|
|
||||||
x-example: monkeys_are_GREAT
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: Validation information for the session.
|
|
||||||
examples:
|
|
||||||
application/json: {
|
|
||||||
"medium": "email",
|
|
||||||
"validated_at": 1457622739026,
|
|
||||||
"address": "louise@bobs.burgers"
|
|
||||||
}
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
medium:
|
|
||||||
type: string
|
|
||||||
description: The medium type of the 3pid.
|
|
||||||
address:
|
|
||||||
type: string
|
|
||||||
description: The address of the 3pid being looked up.
|
|
||||||
validated_at:
|
|
||||||
type: integer
|
|
||||||
description: |-
|
|
||||||
Timestamp, in milliseconds, indicating the time that the 3pid
|
|
||||||
was validated.
|
|
||||||
required: ['medium', 'address', 'validated_at']
|
|
||||||
400:
|
|
||||||
description: |-
|
|
||||||
The session has not been validated.
|
|
||||||
|
|
||||||
If the session has not been validated, then ``errcode`` will be
|
|
||||||
``M_SESSION_NOT_VALIDATED``. If the session has timed out, then
|
|
||||||
``errcode`` will be ``M_SESSION_EXPIRED``.
|
|
||||||
examples:
|
|
||||||
application/json: {
|
|
||||||
"errcode": "M_SESSION_NOT_VALIDATED",
|
|
||||||
"error": "This validation session has not yet been completed"
|
|
||||||
}
|
|
||||||
schema:
|
|
||||||
$ref: "../client-server/definitions/errors/error.yaml"
|
|
||||||
404:
|
|
||||||
description: The Session ID or client secret were not found.
|
|
||||||
examples:
|
|
||||||
application/json: {
|
|
||||||
"errcode": "M_NO_VALID_SESSION",
|
|
||||||
"error": "No valid session was found matching that sid and client secret"
|
|
||||||
}
|
|
||||||
schema:
|
|
||||||
$ref: "../client-server/definitions/errors/error.yaml"
|
|
||||||
"/3pid/bind":
|
|
||||||
post:
|
|
||||||
summary: Publish an association between a session and a Matrix user ID.
|
|
||||||
description: |-
|
|
||||||
Publish an association between a session and a Matrix user ID.
|
|
||||||
|
|
||||||
Future calls to ``/lookup`` for any of the session\'s 3pids will return
|
|
||||||
this association.
|
|
||||||
|
|
||||||
Note: for backwards compatibility with previous drafts of this
|
|
||||||
specification, the parameters may also be specified as
|
|
||||||
``application/x-form-www-urlencoded`` data. However, this usage is
|
|
||||||
deprecated.
|
|
||||||
operationId: bind
|
|
||||||
deprecated: true
|
|
||||||
parameters:
|
|
||||||
- in: body
|
|
||||||
name: body
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
example: {
|
|
||||||
"sid": "1234",
|
|
||||||
"client_secret": "monkeys_are_GREAT",
|
|
||||||
"mxid": "@ears:matrix.org"
|
|
||||||
}
|
|
||||||
properties:
|
|
||||||
sid:
|
|
||||||
type: string
|
|
||||||
description: The Session ID generated by the ``requestToken`` call.
|
|
||||||
client_secret:
|
|
||||||
type: string
|
|
||||||
description: The client secret passed to the ``requestToken`` call.
|
|
||||||
mxid:
|
|
||||||
type: string
|
|
||||||
description: The Matrix user ID to associate with the 3pids.
|
|
||||||
required: ["sid", "client_secret", "mxid"]
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: The association was published.
|
|
||||||
examples:
|
|
||||||
application/json: {
|
|
||||||
"address": "louise@bobs.burgers",
|
|
||||||
"medium": "email",
|
|
||||||
"mxid": "@ears:matrix.org",
|
|
||||||
"not_before": 1428825849161,
|
|
||||||
"not_after": 4582425849161,
|
|
||||||
"ts": 1428825849161,
|
|
||||||
"signatures": {
|
|
||||||
"matrix.org": {
|
|
||||||
"ed25519:0": "ENiU2YORYUJgE6WBMitU0mppbQjidDLanAusj8XS2nVRHPu+0t42OKA/r6zV6i2MzUbNQ3c3MiLScJuSsOiVDQ"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
address:
|
|
||||||
type: string
|
|
||||||
description: The 3pid address of the user being looked up.
|
|
||||||
medium:
|
|
||||||
type: string
|
|
||||||
description: The medium type of the 3pid.
|
|
||||||
mxid:
|
|
||||||
type: string
|
|
||||||
description: The Matrix user ID associated with the 3pid.
|
|
||||||
not_before:
|
|
||||||
type: integer
|
|
||||||
description: A unix timestamp before which the association is not known to be valid.
|
|
||||||
not_after:
|
|
||||||
type: integer
|
|
||||||
description: A unix timestamp after which the association is not known to be valid.
|
|
||||||
ts:
|
|
||||||
type: integer
|
|
||||||
description: The unix timestamp at which the association was verified.
|
|
||||||
signatures:
|
|
||||||
type: object
|
|
||||||
description: |-
|
|
||||||
The signatures of the verifying identity servers which show that the
|
|
||||||
association should be trusted, if you trust the verifying identity
|
|
||||||
services.
|
|
||||||
$ref: "../../schemas/server-signatures.yaml"
|
|
||||||
required:
|
|
||||||
- address
|
|
||||||
- medium
|
|
||||||
- mxid
|
|
||||||
- not_before
|
|
||||||
- not_after
|
|
||||||
- ts
|
|
||||||
- signatures
|
|
||||||
400:
|
|
||||||
description: |-
|
|
||||||
The association was not published.
|
|
||||||
|
|
||||||
If the session has not been validated, then ``errcode`` will be
|
|
||||||
``M_SESSION_NOT_VALIDATED``. If the session has timed out, then
|
|
||||||
``errcode`` will be ``M_SESSION_EXPIRED``.
|
|
||||||
examples:
|
|
||||||
application/json: {
|
|
||||||
"errcode": "M_SESSION_NOT_VALIDATED",
|
|
||||||
"error": "This validation session has not yet been completed"
|
|
||||||
}
|
|
||||||
schema:
|
|
||||||
$ref: "../client-server/definitions/errors/error.yaml"
|
|
||||||
404:
|
|
||||||
description: The Session ID or client secret were not found
|
|
||||||
examples:
|
|
||||||
application/json: {
|
|
||||||
"errcode": "M_NO_VALID_SESSION",
|
|
||||||
"error": "No valid session was found matching that sid and client secret"
|
|
||||||
}
|
|
||||||
schema:
|
|
||||||
$ref: "../client-server/definitions/errors/error.yaml"
|
|
||||||
"/3pid/unbind":
|
|
||||||
post:
|
|
||||||
summary: Remove an association between a session and a Matrix user ID.
|
|
||||||
description: |-
|
|
||||||
Remove an association between a session and a Matrix user ID.
|
|
||||||
|
|
||||||
Future calls to ``/lookup`` for any of the session's 3pids will not
|
|
||||||
return the removed association.
|
|
||||||
|
|
||||||
The identity server should authenticate the request in one of two
|
|
||||||
ways:
|
|
||||||
|
|
||||||
1. The request is signed by the homeserver which controls the ``user_id``.
|
|
||||||
2. The request includes the ``sid`` and ``client_secret`` parameters,
|
|
||||||
as per ``/3pid/bind``, which proves ownership of the 3PID.
|
|
||||||
|
|
||||||
If this endpoint returns a JSON Matrix error, that error should be passed
|
|
||||||
through to the client requesting an unbind through a homeserver, if the
|
|
||||||
homeserver is acting on behalf of a client.
|
|
||||||
operationId: unbind
|
|
||||||
deprecated: true
|
|
||||||
parameters:
|
|
||||||
- in: body
|
|
||||||
name: body
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
example: {
|
|
||||||
"sid": "1234",
|
|
||||||
"client_secret": "monkeys_are_GREAT",
|
|
||||||
"mxid": "@ears:example.org",
|
|
||||||
"threepid": {
|
|
||||||
"medium": "email",
|
|
||||||
"address": "monkeys_have_ears@example.org"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
properties:
|
|
||||||
sid:
|
|
||||||
type: string
|
|
||||||
description: The Session ID generated by the ``requestToken`` call.
|
|
||||||
client_secret:
|
|
||||||
type: string
|
|
||||||
description: The client secret passed to the ``requestToken`` call.
|
|
||||||
mxid:
|
|
||||||
type: string
|
|
||||||
description: The Matrix user ID to remove from the 3pids.
|
|
||||||
threepid:
|
|
||||||
type: object
|
|
||||||
title: 3PID
|
|
||||||
description: |-
|
|
||||||
The 3PID to remove. Must match the 3PID used to generate the session
|
|
||||||
if using ``sid`` and ``client_secret`` to authenticate this request.
|
|
||||||
properties:
|
|
||||||
medium:
|
|
||||||
type: string
|
|
||||||
description: |-
|
|
||||||
A medium from the `3PID Types`_ Appendix, matching the medium
|
|
||||||
of the identifier to unbind.
|
|
||||||
address:
|
|
||||||
type: string
|
|
||||||
description: The 3PID address to remove.
|
|
||||||
required: ['medium', 'address']
|
|
||||||
required: ["threepid", "mxid"]
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: The association was successfully removed.
|
|
||||||
examples:
|
|
||||||
application/json: {}
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
400:
|
|
||||||
description: |-
|
|
||||||
If the response body is not a JSON Matrix error, the identity server
|
|
||||||
does not support unbinds. If a JSON Matrix error is in the response
|
|
||||||
body, the requesting party should respect the error.
|
|
||||||
404:
|
|
||||||
description: |-
|
|
||||||
If the response body is not a JSON Matrix error, the identity server
|
|
||||||
does not support unbinds. If a JSON Matrix error is in the response
|
|
||||||
body, the requesting party should respect the error.
|
|
||||||
403:
|
|
||||||
description: |-
|
|
||||||
The credentials supplied to authenticate the request were invalid.
|
|
||||||
This may also be returned if the identity server does not support
|
|
||||||
the chosen authentication method (such as blocking homeservers from
|
|
||||||
unbinding identifiers).
|
|
||||||
examples:
|
|
||||||
application/json: {
|
|
||||||
"errcode": "M_FORBIDDEN",
|
|
||||||
"error": "Invalid homeserver signature"
|
|
||||||
}
|
|
||||||
schema:
|
|
||||||
$ref: "../client-server/definitions/errors/error.yaml"
|
|
||||||
501:
|
|
||||||
description: |-
|
|
||||||
If the response body is not a JSON Matrix error, the identity server
|
|
||||||
does not support unbinds. If a JSON Matrix error is in the response
|
|
||||||
body, the requesting party should respect the error.
|
|
|
@ -1,177 +0,0 @@
|
||||||
# Copyright 2018 New Vector Ltd
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
swagger: '2.0'
|
|
||||||
info:
|
|
||||||
title: "Matrix Identity Service Email Associations API"
|
|
||||||
version: "1.0.0"
|
|
||||||
host: localhost:8090
|
|
||||||
schemes:
|
|
||||||
- https
|
|
||||||
basePath: /_matrix/identity/api/v1
|
|
||||||
consumes:
|
|
||||||
- application/json
|
|
||||||
produces:
|
|
||||||
- application/json
|
|
||||||
paths:
|
|
||||||
"/validate/email/requestToken":
|
|
||||||
post:
|
|
||||||
summary: Request a token for validating an email address.
|
|
||||||
description: |-
|
|
||||||
Create a session for validating an email address.
|
|
||||||
|
|
||||||
The identity server will send an email containing a token. If that
|
|
||||||
token is presented to the identity server in the future, it indicates
|
|
||||||
that that user was able to read the email for that email address, and
|
|
||||||
so we validate ownership of the email address.
|
|
||||||
|
|
||||||
Note that homeservers offer APIs that proxy this API, adding
|
|
||||||
additional behaviour on top, for example,
|
|
||||||
``/register/email/requestToken`` is designed specifically for use when
|
|
||||||
registering an account and therefore will inform the user if the email
|
|
||||||
address given is already registered on the server.
|
|
||||||
|
|
||||||
Note: for backwards compatibility with previous drafts of this
|
|
||||||
specification, the parameters may also be specified as
|
|
||||||
``application/x-form-www-urlencoded`` data. However, this usage is
|
|
||||||
deprecated.
|
|
||||||
operationId: emailRequestToken
|
|
||||||
deprecated: true
|
|
||||||
parameters:
|
|
||||||
- in: body
|
|
||||||
name: body
|
|
||||||
schema:
|
|
||||||
$ref: "definitions/request_email_validation.yaml"
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: Session created.
|
|
||||||
schema:
|
|
||||||
$ref: "definitions/sid.yaml"
|
|
||||||
400:
|
|
||||||
description: |
|
|
||||||
An error ocurred. Some possible errors are:
|
|
||||||
|
|
||||||
- ``M_INVALID_EMAIL``: The email address provided was invalid.
|
|
||||||
- ``M_EMAIL_SEND_ERROR``: The validation email could not be sent.
|
|
||||||
examples:
|
|
||||||
application/json: {
|
|
||||||
"errcode": "M_INVALID_EMAIL",
|
|
||||||
"error": "The email address is not valid"
|
|
||||||
}
|
|
||||||
schema:
|
|
||||||
$ref: "../client-server/definitions/errors/error.yaml"
|
|
||||||
"/validate/email/submitToken":
|
|
||||||
post:
|
|
||||||
summary: Validate ownership of an email address.
|
|
||||||
description: |-
|
|
||||||
Validate ownership of an email address.
|
|
||||||
|
|
||||||
If the three parameters are consistent with a set generated by a
|
|
||||||
``requestToken`` call, ownership of the email address is considered to
|
|
||||||
have been validated. This does not publish any information publicly, or
|
|
||||||
associate the email address with any Matrix user ID. Specifically,
|
|
||||||
calls to ``/lookup`` will not show a binding.
|
|
||||||
|
|
||||||
The identity server is free to match the token case-insensitively, or
|
|
||||||
carry out other mapping operations such as unicode
|
|
||||||
normalisation. Whether to do so is an implementation detail for the
|
|
||||||
identity server. Clients must always pass on the token without
|
|
||||||
modification.
|
|
||||||
|
|
||||||
Note: for backwards compatibility with previous drafts of this
|
|
||||||
specification, the parameters may also be specified as
|
|
||||||
``application/x-form-www-urlencoded`` data. However, this usage is
|
|
||||||
deprecated.
|
|
||||||
operationId: emailSubmitTokenPost
|
|
||||||
deprecated: true
|
|
||||||
parameters:
|
|
||||||
- in: body
|
|
||||||
name: body
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
example: {
|
|
||||||
"sid": "1234",
|
|
||||||
"client_secret": "monkeys_are_GREAT",
|
|
||||||
"token": "atoken"
|
|
||||||
}
|
|
||||||
properties:
|
|
||||||
sid:
|
|
||||||
type: string
|
|
||||||
description: The session ID, generated by the ``requestToken`` call.
|
|
||||||
client_secret:
|
|
||||||
type: string
|
|
||||||
description: The client secret that was supplied to the ``requestToken`` call.
|
|
||||||
token:
|
|
||||||
type: string
|
|
||||||
description: The token generated by the ``requestToken`` call and emailed to the user.
|
|
||||||
required: ["sid", "client_secret", "token"]
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description:
|
|
||||||
The success of the validation.
|
|
||||||
examples:
|
|
||||||
application/json: {
|
|
||||||
"success": true
|
|
||||||
}
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
success:
|
|
||||||
type: boolean
|
|
||||||
description: Whether the validation was successful or not.
|
|
||||||
required: ['success']
|
|
||||||
get:
|
|
||||||
summary: Validate ownership of an email address.
|
|
||||||
description: |-
|
|
||||||
Validate ownership of an email address.
|
|
||||||
|
|
||||||
If the three parameters are consistent with a set generated by a
|
|
||||||
``requestToken`` call, ownership of the email address is considered to
|
|
||||||
have been validated. This does not publish any information publicly, or
|
|
||||||
associate the email address with any Matrix user ID. Specifically,
|
|
||||||
calls to ``/lookup`` will not show a binding.
|
|
||||||
|
|
||||||
Note that, in contrast with the POST version, this endpoint will be
|
|
||||||
used by end-users, and so the response should be human-readable.
|
|
||||||
operationId: emailSubmitTokenGet
|
|
||||||
deprecated: true
|
|
||||||
parameters:
|
|
||||||
- in: query
|
|
||||||
type: string
|
|
||||||
name: sid
|
|
||||||
required: true
|
|
||||||
description: The session ID, generated by the ``requestToken`` call.
|
|
||||||
x-example: 1234
|
|
||||||
- in: query
|
|
||||||
type: string
|
|
||||||
name: client_secret
|
|
||||||
required: true
|
|
||||||
description: The client secret that was supplied to the ``requestToken`` call.
|
|
||||||
x-example: monkeys_are_GREAT
|
|
||||||
- in: query
|
|
||||||
type: string
|
|
||||||
name: token
|
|
||||||
required: true
|
|
||||||
description: The token generated by the ``requestToken`` call and emailed to the user.
|
|
||||||
x-example: atoken
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: Email address is validated.
|
|
||||||
"3xx":
|
|
||||||
description: |-
|
|
||||||
Email address is validated, and the ``next_link`` parameter was
|
|
||||||
provided to the ``requestToken`` call. The user must be redirected
|
|
||||||
to the URL provided by the ``next_link`` parameter.
|
|
||||||
"4xx":
|
|
||||||
description:
|
|
||||||
Validation failed.
|
|
|
@ -1,97 +0,0 @@
|
||||||
# Copyright 2018 New Vector Ltd
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
swagger: '2.0'
|
|
||||||
info:
|
|
||||||
title: "Matrix Identity Service Ephemeral Invitation Signing API"
|
|
||||||
version: "1.0.0"
|
|
||||||
host: localhost:8090
|
|
||||||
schemes:
|
|
||||||
- https
|
|
||||||
basePath: /_matrix/identity/api/v1
|
|
||||||
consumes:
|
|
||||||
- application/json
|
|
||||||
produces:
|
|
||||||
- application/json
|
|
||||||
paths:
|
|
||||||
"/sign-ed25519":
|
|
||||||
post:
|
|
||||||
summary: Sign invitation details
|
|
||||||
description: |-
|
|
||||||
Sign invitation details.
|
|
||||||
|
|
||||||
The identity server will look up ``token`` which was stored in a call
|
|
||||||
to ``store-invite``, and fetch the sender of the invite.
|
|
||||||
operationId: blindlySignStuff
|
|
||||||
deprecated: true
|
|
||||||
parameters:
|
|
||||||
- in: body
|
|
||||||
name: body
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
example: {
|
|
||||||
"mxid": "@foo:bar.com",
|
|
||||||
"token": "sometoken",
|
|
||||||
"private_key": "base64encodedkey"
|
|
||||||
}
|
|
||||||
properties:
|
|
||||||
mxid:
|
|
||||||
type: string
|
|
||||||
description: The Matrix user ID of the user accepting the invitation.
|
|
||||||
token:
|
|
||||||
type: string
|
|
||||||
description: The token from the call to ``store-invite``.
|
|
||||||
private_key:
|
|
||||||
type: string
|
|
||||||
description: The private key, encoded as `Unpadded base64`_.
|
|
||||||
required: ["mxid", "token", "private_key"]
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: The signed JSON of the mxid, sender, and token.
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
mxid:
|
|
||||||
type: string
|
|
||||||
description: The Matrix user ID of the user accepting the invitation.
|
|
||||||
sender:
|
|
||||||
type: string
|
|
||||||
description: The Matrix user ID of the user who sent the invitation.
|
|
||||||
signatures:
|
|
||||||
type: object
|
|
||||||
description: The signature of the mxid, sender, and token.
|
|
||||||
$ref: "../../schemas/server-signatures.yaml"
|
|
||||||
token:
|
|
||||||
type: string
|
|
||||||
description: The token for the invitation.
|
|
||||||
required: ['mxid', 'sender', 'signatures', 'token']
|
|
||||||
examples:
|
|
||||||
application/json: {
|
|
||||||
"mxid": "@foo:bar.com",
|
|
||||||
"sender": "@baz:bar.com",
|
|
||||||
"signatures": {
|
|
||||||
"my.id.server": {
|
|
||||||
"ed25519:0": "def987"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"token": "abc123"
|
|
||||||
}
|
|
||||||
404:
|
|
||||||
description: The token was not found.
|
|
||||||
examples:
|
|
||||||
application/json: {
|
|
||||||
"errcode": "M_UNRECOGNIZED",
|
|
||||||
"error": "Didn't recognize token"
|
|
||||||
}
|
|
||||||
schema:
|
|
||||||
$ref: "../client-server/definitions/errors/error.yaml"
|
|
|
@ -1,171 +0,0 @@
|
||||||
# Copyright 2016 OpenMarket Ltd
|
|
||||||
# Copyright 2017 Kamax.io
|
|
||||||
# Copyright 2017 New Vector Ltd
|
|
||||||
# Copyright 2018 New Vector Ltd
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
swagger: '2.0'
|
|
||||||
info:
|
|
||||||
title: "Matrix Identity Service Lookup API"
|
|
||||||
version: "1.0.0"
|
|
||||||
host: localhost:8090
|
|
||||||
schemes:
|
|
||||||
- https
|
|
||||||
basePath: /_matrix/identity/api/v1
|
|
||||||
consumes:
|
|
||||||
- application/json
|
|
||||||
produces:
|
|
||||||
- application/json
|
|
||||||
paths:
|
|
||||||
"/lookup":
|
|
||||||
get:
|
|
||||||
summary: Look up the Matrix user ID for a 3pid.
|
|
||||||
description: Look up the Matrix user ID for a 3pid.
|
|
||||||
operationId: lookupUser
|
|
||||||
deprecated: true
|
|
||||||
parameters:
|
|
||||||
- in: query
|
|
||||||
type: string
|
|
||||||
name: medium
|
|
||||||
required: true
|
|
||||||
description: The medium type of the 3pid. See the `3PID Types`_ Appendix.
|
|
||||||
x-example: "email"
|
|
||||||
- in: query
|
|
||||||
type: string
|
|
||||||
name: address
|
|
||||||
required: true
|
|
||||||
description: The address of the 3pid being looked up. See the `3PID Types`_ Appendix.
|
|
||||||
x-example: "louise@bobs.burgers"
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description:
|
|
||||||
The association for that 3pid, or an empty object if no association is known.
|
|
||||||
examples:
|
|
||||||
application/json: {
|
|
||||||
"address": "louise@bobs.burgers",
|
|
||||||
"medium": "email",
|
|
||||||
"mxid": "@ears:matrix.org",
|
|
||||||
"not_before": 1428825849161,
|
|
||||||
"not_after": 4582425849161,
|
|
||||||
"ts": 1428825849161,
|
|
||||||
"signatures": {
|
|
||||||
"matrix.org": {
|
|
||||||
"ed25519:0": "ENiU2YORYUJgE6WBMitU0mppbQjidDLanAusj8XS2nVRHPu+0t42OKA/r6zV6i2MzUbNQ3c3MiLScJuSsOiVDQ"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
address:
|
|
||||||
type: string
|
|
||||||
description: The 3pid address of the user being looked up, matching the address requested.
|
|
||||||
medium:
|
|
||||||
type: string
|
|
||||||
description: A medium from the `3PID Types`_ Appendix, matching the medium requested.
|
|
||||||
mxid:
|
|
||||||
type: string
|
|
||||||
description: The Matrix user ID associated with the 3pid.
|
|
||||||
not_before:
|
|
||||||
type: integer
|
|
||||||
description: A unix timestamp before which the association is not known to be valid.
|
|
||||||
not_after:
|
|
||||||
type: integer
|
|
||||||
description: A unix timestamp after which the association is not known to be valid.
|
|
||||||
ts:
|
|
||||||
type: integer
|
|
||||||
description: The unix timestamp at which the association was verified.
|
|
||||||
signatures:
|
|
||||||
type: object
|
|
||||||
description: The signatures of the verifying identity servers which show that the association should be trusted, if you trust the verifying identity servers.
|
|
||||||
$ref: "../../schemas/server-signatures.yaml"
|
|
||||||
required:
|
|
||||||
- address
|
|
||||||
- medium
|
|
||||||
- mxid
|
|
||||||
- not_before
|
|
||||||
- not_after
|
|
||||||
- ts
|
|
||||||
- signatures
|
|
||||||
"/bulk_lookup":
|
|
||||||
post:
|
|
||||||
summary: Lookup Matrix user IDs for a list of 3pids.
|
|
||||||
description: Lookup Matrix user IDs for a list of 3pids.
|
|
||||||
operationId: lookupUsers
|
|
||||||
deprecated: true
|
|
||||||
parameters:
|
|
||||||
- in: body
|
|
||||||
name: body
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
example: {
|
|
||||||
"threepids":
|
|
||||||
[
|
|
||||||
["email","user@example.org"],
|
|
||||||
["msisdn", "123456789"],
|
|
||||||
["email","user2@example.org"]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
properties:
|
|
||||||
threepids:
|
|
||||||
type: array
|
|
||||||
items:
|
|
||||||
type: array
|
|
||||||
title: 3PID mappings
|
|
||||||
minItems: 2
|
|
||||||
maxItems: 2
|
|
||||||
items:
|
|
||||||
# TODO: Give real names to these values. Adding a `title` does not work.
|
|
||||||
#- type: 3PID Medium
|
|
||||||
#- type: 3PID Address
|
|
||||||
- type: string
|
|
||||||
- type: string
|
|
||||||
description: |-
|
|
||||||
An array of arrays containing the `3PID Types`_ with the ``medium``
|
|
||||||
in first position and the ``address`` in second position.
|
|
||||||
required:
|
|
||||||
- "threepids"
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: A list of known 3PID mappings for the supplied 3PIDs.
|
|
||||||
examples:
|
|
||||||
application/json: {
|
|
||||||
"threepids": [
|
|
||||||
["email","user@example.org", "@bla:example.org"],
|
|
||||||
["msisdn", "123456789", "@blah2:example.com"]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
threepids:
|
|
||||||
type: array
|
|
||||||
items:
|
|
||||||
type: array
|
|
||||||
title: 3PID mappings
|
|
||||||
minItems: 3
|
|
||||||
maxItems: 3
|
|
||||||
items:
|
|
||||||
# TODO: Give real names to these values. Adding a `title` does not work.
|
|
||||||
#- type: 3PID Medium
|
|
||||||
#- type: 3PID Address
|
|
||||||
#- type: Matrix User ID
|
|
||||||
- type: string
|
|
||||||
- type: string
|
|
||||||
- type: string
|
|
||||||
description: |-
|
|
||||||
An array of array containing the `3PID Types`_ with the ``medium``
|
|
||||||
in first position, the ``address`` in second position and Matrix user
|
|
||||||
ID in third position.
|
|
||||||
required:
|
|
||||||
- "threepids"
|
|
|
@ -1,179 +0,0 @@
|
||||||
# Copyright 2018 New Vector Ltd
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
swagger: '2.0'
|
|
||||||
info:
|
|
||||||
title: "Matrix Identity Service Phone Number Associations API"
|
|
||||||
version: "1.0.0"
|
|
||||||
host: localhost:8090
|
|
||||||
schemes:
|
|
||||||
- https
|
|
||||||
basePath: /_matrix/identity/api/v1
|
|
||||||
consumes:
|
|
||||||
- application/json
|
|
||||||
produces:
|
|
||||||
- application/json
|
|
||||||
paths:
|
|
||||||
"/validate/msisdn/requestToken":
|
|
||||||
post:
|
|
||||||
summary: Request a token for validating a phone number.
|
|
||||||
description: |-
|
|
||||||
Create a session for validating a phone number.
|
|
||||||
|
|
||||||
The identity server will send an SMS message containing a token. If
|
|
||||||
that token is presented to the identity server in the future, it
|
|
||||||
indicates that that user was able to read the SMS for that phone
|
|
||||||
number, and so we validate ownership of the phone number.
|
|
||||||
|
|
||||||
Note that homeservers offer APIs that proxy this API, adding
|
|
||||||
additional behaviour on top, for example,
|
|
||||||
``/register/msisdn/requestToken`` is designed specifically for use when
|
|
||||||
registering an account and therefore will inform the user if the phone
|
|
||||||
number given is already registered on the server.
|
|
||||||
|
|
||||||
Note: for backwards compatibility with previous drafts of this
|
|
||||||
specification, the parameters may also be specified as
|
|
||||||
``application/x-form-www-urlencoded`` data. However, this usage is
|
|
||||||
deprecated.
|
|
||||||
operationId: msisdnRequestToken
|
|
||||||
deprecated: true
|
|
||||||
parameters:
|
|
||||||
- in: body
|
|
||||||
name: body
|
|
||||||
schema:
|
|
||||||
$ref: "definitions/request_msisdn_validation.yaml"
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: Session created.
|
|
||||||
schema:
|
|
||||||
$ref: "definitions/sid.yaml"
|
|
||||||
400:
|
|
||||||
description: |
|
|
||||||
An error ocurred. Some possible errors are:
|
|
||||||
|
|
||||||
- ``M_INVALID_ADDRESS``: The phone number provided was invalid.
|
|
||||||
- ``M_SEND_ERROR``: The validation SMS could not be sent.
|
|
||||||
- ``M_DESTINATION_REJECTED``: The identity server cannot deliver an
|
|
||||||
SMS to the provided country or region.
|
|
||||||
examples:
|
|
||||||
application/json: {
|
|
||||||
"errcode": "M_INVALID_ADDRESS",
|
|
||||||
"error": "The phone number is not valid"
|
|
||||||
}
|
|
||||||
schema:
|
|
||||||
$ref: "../client-server/definitions/errors/error.yaml"
|
|
||||||
"/validate/msisdn/submitToken":
|
|
||||||
post:
|
|
||||||
summary: Validate ownership of a phone number.
|
|
||||||
description: |-
|
|
||||||
Validate ownership of a phone number.
|
|
||||||
|
|
||||||
If the three parameters are consistent with a set generated by a
|
|
||||||
``requestToken`` call, ownership of the phone number is considered to
|
|
||||||
have been validated. This does not publish any information publicly, or
|
|
||||||
associate the phone number address with any Matrix user
|
|
||||||
ID. Specifically, calls to ``/lookup`` will not show a binding.
|
|
||||||
|
|
||||||
The identity server is free to match the token case-insensitively, or
|
|
||||||
carry out other mapping operations such as unicode
|
|
||||||
normalisation. Whether to do so is an implementation detail for the
|
|
||||||
identity server. Clients must always pass on the token without
|
|
||||||
modification.
|
|
||||||
|
|
||||||
Note: for backwards compatibility with previous drafts of this
|
|
||||||
specification, the parameters may also be specified as
|
|
||||||
``application/x-form-www-urlencoded`` data. However, this usage is
|
|
||||||
deprecated.
|
|
||||||
operationId: msisdnSubmitTokenPost
|
|
||||||
deprecated: true
|
|
||||||
parameters:
|
|
||||||
- in: body
|
|
||||||
name: body
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
example: {
|
|
||||||
"sid": "1234",
|
|
||||||
"client_secret": "monkeys_are_GREAT",
|
|
||||||
"token": "atoken"
|
|
||||||
}
|
|
||||||
properties:
|
|
||||||
sid:
|
|
||||||
type: string
|
|
||||||
description: The session ID, generated by the ``requestToken`` call.
|
|
||||||
client_secret:
|
|
||||||
type: string
|
|
||||||
description: The client secret that was supplied to the ``requestToken`` call.
|
|
||||||
token:
|
|
||||||
type: string
|
|
||||||
description: The token generated by the ``requestToken`` call and sent to the user.
|
|
||||||
required: ["sid", "client_secret", "token"]
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description:
|
|
||||||
The success of the validation.
|
|
||||||
examples:
|
|
||||||
application/json: {
|
|
||||||
"success": true
|
|
||||||
}
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
success:
|
|
||||||
type: boolean
|
|
||||||
description: Whether the validation was successful or not.
|
|
||||||
required: ['success']
|
|
||||||
get:
|
|
||||||
summary: Validate ownership of a phone number.
|
|
||||||
description: |-
|
|
||||||
Validate ownership of a phone number.
|
|
||||||
|
|
||||||
If the three parameters are consistent with a set generated by a
|
|
||||||
``requestToken`` call, ownership of the phone number address is
|
|
||||||
considered to have been validated. This does not publish any
|
|
||||||
information publicly, or associate the phone number with any Matrix
|
|
||||||
user ID. Specifically, calls to ``/lookup`` will not show a binding.
|
|
||||||
|
|
||||||
Note that, in contrast with the POST version, this endpoint will be
|
|
||||||
used by end-users, and so the response should be human-readable.
|
|
||||||
operationId: msisdnSubmitTokenGet
|
|
||||||
deprecated: true
|
|
||||||
parameters:
|
|
||||||
- in: query
|
|
||||||
type: string
|
|
||||||
name: sid
|
|
||||||
required: true
|
|
||||||
description: The session ID, generated by the ``requestToken`` call.
|
|
||||||
x-example: 1234
|
|
||||||
- in: query
|
|
||||||
type: string
|
|
||||||
name: client_secret
|
|
||||||
required: true
|
|
||||||
description: The client secret that was supplied to the ``requestToken`` call.
|
|
||||||
x-example: monkeys_are_GREAT
|
|
||||||
- in: query
|
|
||||||
type: string
|
|
||||||
name: token
|
|
||||||
required: true
|
|
||||||
description: The token generated by the ``requestToken`` call and sent to the user.
|
|
||||||
x-example: atoken
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: Phone number is validated.
|
|
||||||
"3xx":
|
|
||||||
description: |-
|
|
||||||
Phone number address is validated, and the ``next_link`` parameter
|
|
||||||
was provided to the ``requestToken`` call. The user must be
|
|
||||||
redirected to the URL provided by the ``next_link`` parameter.
|
|
||||||
"4xx":
|
|
||||||
description:
|
|
||||||
Validation failed.
|
|
|
@ -1,46 +0,0 @@
|
||||||
# Copyright 2018 Kamax Sàrl
|
|
||||||
# Copyright 2018 New Vector Ltd
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
|
|
||||||
swagger: "2.0"
|
|
||||||
info:
|
|
||||||
title: "Matrix Identity Service Ping API"
|
|
||||||
version: "1.0.0"
|
|
||||||
host: localhost:8090
|
|
||||||
schemes:
|
|
||||||
- https
|
|
||||||
basePath: /_matrix/identity
|
|
||||||
produces:
|
|
||||||
- application/json
|
|
||||||
paths:
|
|
||||||
"/api/v1":
|
|
||||||
get:
|
|
||||||
summary: Checks that an identity server is available at this API endpoint.
|
|
||||||
description: |-
|
|
||||||
Checks that an identity server is available at this API endpoint.
|
|
||||||
|
|
||||||
To discover that an identity server is available at a specific URL,
|
|
||||||
this endpoint can be queried and will return an empty object.
|
|
||||||
|
|
||||||
This is primarly used for auto-discovery and health check purposes
|
|
||||||
by entities acting as a client for the identity server.
|
|
||||||
operationId: ping
|
|
||||||
deprecated: true
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: An identity server is ready to serve requests.
|
|
||||||
examples:
|
|
||||||
application/json: {}
|
|
||||||
schema:
|
|
||||||
type: object
|
|
|
@ -1,129 +0,0 @@
|
||||||
# Copyright 2016 OpenMarket Ltd
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
swagger: '2.0'
|
|
||||||
info:
|
|
||||||
title: "Matrix Identity Service Public Key API"
|
|
||||||
version: "1.0.0"
|
|
||||||
host: localhost:8090
|
|
||||||
schemes:
|
|
||||||
- https
|
|
||||||
basePath: /_matrix/identity/api/v1
|
|
||||||
consumes:
|
|
||||||
- application/json
|
|
||||||
produces:
|
|
||||||
- application/json
|
|
||||||
paths:
|
|
||||||
"/pubkey/{keyId}":
|
|
||||||
get:
|
|
||||||
summary: Get a public key.
|
|
||||||
description: |-
|
|
||||||
Get the public key for the passed key ID.
|
|
||||||
operationId: getPubKey
|
|
||||||
deprecated: true
|
|
||||||
parameters:
|
|
||||||
- in: path
|
|
||||||
type: string
|
|
||||||
name: keyId
|
|
||||||
required: true
|
|
||||||
description: |-
|
|
||||||
The ID of the key. This should take the form algorithm:identifier
|
|
||||||
where algorithm identifies the signing algorithm, and the identifier
|
|
||||||
is an opaque string.
|
|
||||||
x-example: "ed25519:0"
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description:
|
|
||||||
The public key exists.
|
|
||||||
examples:
|
|
||||||
application/json: {
|
|
||||||
"public_key": "VXuGitF39UH5iRfvbIknlvlAVKgD1BsLDMvBf0pmp7c"
|
|
||||||
}
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
public_key:
|
|
||||||
type: string
|
|
||||||
description: Unpadded Base64 encoded public key.
|
|
||||||
required: ['public_key']
|
|
||||||
404:
|
|
||||||
description:
|
|
||||||
The public key was not found.
|
|
||||||
examples:
|
|
||||||
application/json: {
|
|
||||||
"errcode": "M_NOT_FOUND",
|
|
||||||
"error": "The public key was not found"
|
|
||||||
}
|
|
||||||
schema:
|
|
||||||
$ref: "../client-server/definitions/errors/error.yaml"
|
|
||||||
"/pubkey/isvalid":
|
|
||||||
get:
|
|
||||||
summary: Check whether a long-term public key is valid.
|
|
||||||
description: |-
|
|
||||||
Check whether a long-term public key is valid. The response should always
|
|
||||||
be the same, provided the key exists.
|
|
||||||
operationId: isPubKeyValid
|
|
||||||
deprecated: true
|
|
||||||
parameters:
|
|
||||||
- in: query
|
|
||||||
type: string
|
|
||||||
name: public_key
|
|
||||||
required: true
|
|
||||||
description: |-
|
|
||||||
The unpadded base64-encoded public key to check.
|
|
||||||
x-example: "VXuGitF39UH5iRfvbIknlvlAVKgD1BsLDMvBf0pmp7c"
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description:
|
|
||||||
The validity of the public key.
|
|
||||||
examples:
|
|
||||||
application/json: {
|
|
||||||
"valid": true
|
|
||||||
}
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
valid:
|
|
||||||
type: boolean
|
|
||||||
description: Whether the public key is recognised and is currently valid.
|
|
||||||
required: ['valid']
|
|
||||||
"/pubkey/ephemeral/isvalid":
|
|
||||||
get:
|
|
||||||
summary: Check whether a short-term public key is valid.
|
|
||||||
description: |-
|
|
||||||
Check whether a short-term public key is valid.
|
|
||||||
operationId: isEphemeralPubKeyValid
|
|
||||||
deprecated: true
|
|
||||||
parameters:
|
|
||||||
- in: query
|
|
||||||
type: string
|
|
||||||
name: public_key
|
|
||||||
required: true
|
|
||||||
description: |-
|
|
||||||
The unpadded base64-encoded public key to check.
|
|
||||||
x-example: "VXuGitF39UH5iRfvbIknlvlAVKgD1BsLDMvBf0pmp7c"
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description:
|
|
||||||
The validity of the public key.
|
|
||||||
examples:
|
|
||||||
application/json: {
|
|
||||||
"valid": true
|
|
||||||
}
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
valid:
|
|
||||||
type: boolean
|
|
||||||
description: Whether the public key is recognised and is currently valid.
|
|
||||||
required: ['valid']
|
|
|
@ -1,161 +0,0 @@
|
||||||
# Copyright 2018 New Vector Ltd
|
|
||||||
#
|
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
# you may not use this file except in compliance with the License.
|
|
||||||
# You may obtain a copy of the License at
|
|
||||||
#
|
|
||||||
# http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
#
|
|
||||||
# Unless required by applicable law or agreed to in writing, software
|
|
||||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
# See the License for the specific language governing permissions and
|
|
||||||
# limitations under the License.
|
|
||||||
swagger: '2.0'
|
|
||||||
info:
|
|
||||||
title: "Matrix Identity Service Store Invitations API"
|
|
||||||
version: "1.0.0"
|
|
||||||
host: localhost:8090
|
|
||||||
schemes:
|
|
||||||
- https
|
|
||||||
basePath: /_matrix/identity/api/v1
|
|
||||||
consumes:
|
|
||||||
- application/json
|
|
||||||
produces:
|
|
||||||
- application/json
|
|
||||||
paths:
|
|
||||||
"/store-invite":
|
|
||||||
post:
|
|
||||||
summary: Store pending invitations to a user's 3pid.
|
|
||||||
description: |-
|
|
||||||
Store pending invitations to a user's 3pid.
|
|
||||||
|
|
||||||
In addition to the request parameters specified below, an arbitrary
|
|
||||||
number of other parameters may also be specified. These may be used in
|
|
||||||
the invite message generation described below.
|
|
||||||
|
|
||||||
The service will generate a random token and an ephemeral key used for
|
|
||||||
accepting the invite.
|
|
||||||
|
|
||||||
The service also generates a ``display_name`` for the inviter, which is
|
|
||||||
a redacted version of ``address`` which does not leak the full contents
|
|
||||||
of the ``address``.
|
|
||||||
|
|
||||||
The service records persistently all of the above information.
|
|
||||||
|
|
||||||
It also generates an email containing all of this data, sent to the
|
|
||||||
``address`` parameter, notifying them of the invitation.
|
|
||||||
|
|
||||||
Also, the generated ephemeral public key will be listed as valid on
|
|
||||||
requests to ``/_matrix/identity/api/v1/pubkey/ephemeral/isvalid``.
|
|
||||||
|
|
||||||
Currently, invites may only be issued for 3pids of the ``email`` medium.
|
|
||||||
|
|
||||||
Optional fields in the request should be populated to the best of the
|
|
||||||
server's ability. Identity servers may use these variables when notifying
|
|
||||||
the ``address`` of the pending invite for display purposes.
|
|
||||||
operationId: storeInvite
|
|
||||||
deprecated: true
|
|
||||||
parameters:
|
|
||||||
- in: body
|
|
||||||
name: body
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
medium:
|
|
||||||
type: string
|
|
||||||
description: The literal string ``email``.
|
|
||||||
example: "email"
|
|
||||||
address:
|
|
||||||
type: string
|
|
||||||
description: The email address of the invited user.
|
|
||||||
example: "foo@example.com"
|
|
||||||
room_id:
|
|
||||||
type: string
|
|
||||||
description: The Matrix room ID to which the user is invited
|
|
||||||
example: "!something:example.org"
|
|
||||||
sender:
|
|
||||||
type: string
|
|
||||||
description: The Matrix user ID of the inviting user
|
|
||||||
example: "@bob:example.com"
|
|
||||||
room_alias:
|
|
||||||
type: string
|
|
||||||
description: |-
|
|
||||||
The Matrix room alias for the room to which the user is
|
|
||||||
invited. This should be retrieved from the ``m.room.canonical_alias``
|
|
||||||
state event.
|
|
||||||
example: "#somewhere:exmaple.org"
|
|
||||||
room_avatar_url:
|
|
||||||
type: string
|
|
||||||
description: |-
|
|
||||||
The Content URI for the room to which the user is invited. This should
|
|
||||||
be retrieved from the ``m.room.avatar`` state event.
|
|
||||||
example: "mxc://example.org/s0meM3dia"
|
|
||||||
room_join_rules:
|
|
||||||
type: string
|
|
||||||
description: |-
|
|
||||||
The ``join_rule`` for the room to which the user is invited. This should
|
|
||||||
be retrieved from the ``m.room.join_rules`` state event.
|
|
||||||
example: "public"
|
|
||||||
room_name:
|
|
||||||
type: string
|
|
||||||
description: |-
|
|
||||||
The name of the room to which the user is invited. This should be retrieved
|
|
||||||
from the ``m.room.name`` state event.
|
|
||||||
example: "Bob's Emporium of Messages"
|
|
||||||
sender_display_name:
|
|
||||||
type: string
|
|
||||||
description: The display name of the user ID initiating the invite.
|
|
||||||
example: "Bob Smith"
|
|
||||||
sender_avatar_url:
|
|
||||||
type: string
|
|
||||||
description: The Content URI for the avatar of the user ID initiating the invite.
|
|
||||||
example: "mxc://example.org/an0th3rM3dia"
|
|
||||||
required: ["medium", "address", "room_id", "sender"]
|
|
||||||
responses:
|
|
||||||
200:
|
|
||||||
description: The invitation was stored.
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
token:
|
|
||||||
type: string
|
|
||||||
description: |
|
|
||||||
The generated token. Must be a string consisting of the
|
|
||||||
characters ``[0-9a-zA-Z.=_-]``. Its length must not exceed
|
|
||||||
255 characters and it must not be empty.
|
|
||||||
public_keys:
|
|
||||||
type: array
|
|
||||||
description: |
|
|
||||||
A list of [server's long-term public key, generated ephemeral
|
|
||||||
public key].
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
display_name:
|
|
||||||
type: string
|
|
||||||
description: The generated (redacted) display_name.
|
|
||||||
required: ['token', 'public_keys', 'display_name']
|
|
||||||
example:
|
|
||||||
application/json: {
|
|
||||||
"token": "sometoken",
|
|
||||||
"public_keys": [
|
|
||||||
"serverpublickey",
|
|
||||||
"ephemeralpublickey"
|
|
||||||
],
|
|
||||||
"display_name": "f...@b..."
|
|
||||||
}
|
|
||||||
400:
|
|
||||||
description: |
|
|
||||||
An error has occured.
|
|
||||||
|
|
||||||
If the 3pid is already bound to a Matrix user ID, the error code
|
|
||||||
will be ``M_THREEPID_IN_USE``. If the medium is unsupported, the
|
|
||||||
error code will be ``M_UNRECOGNIZED``.
|
|
||||||
examples:
|
|
||||||
application/json: {
|
|
||||||
"errcode": "M_THREEPID_IN_USE",
|
|
||||||
"error": "Binding already known",
|
|
||||||
"mxid": "@alice:example.com"
|
|
||||||
}
|
|
||||||
schema:
|
|
||||||
$ref: "../client-server/definitions/errors/error.yaml"
|
|
5
assets-hugo/icons/logo.svg
Normal file
5
assets-hugo/icons/logo.svg
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<svg width="75" height="32" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<g fill="#000" fill-rule="nonzero">
|
||||||
|
<path d="M.936.732V31.25H3.13v.732H.095V0h3.034v.732zM9.386 10.407v1.544h.044a4.461 4.461 0 0 1 1.487-1.368c.58-.323 1.245-.485 1.993-.485.72 0 1.377.14 1.972.42.595.279 1.047.771 1.355 1.477.338-.5.796-.941 1.377-1.323.58-.383 1.266-.574 2.06-.574.602 0 1.16.074 1.674.22.514.148.954.383 1.322.707.366.323.653.746.859 1.268.205.522.308 1.15.308 1.887v7.633H20.71v-6.464c0-.383-.015-.743-.044-1.082a2.305 2.305 0 0 0-.242-.882 1.473 1.473 0 0 0-.584-.596c-.257-.146-.606-.22-1.047-.22-.44 0-.796.085-1.068.253-.272.17-.485.39-.639.662a2.654 2.654 0 0 0-.308.927 7.074 7.074 0 0 0-.078 1.048v6.354h-3.128v-6.398c0-.338-.007-.673-.021-1.004a2.825 2.825 0 0 0-.188-.916 1.411 1.411 0 0 0-.55-.673c-.258-.168-.636-.253-1.135-.253a2.33 2.33 0 0 0-.584.1 1.94 1.94 0 0 0-.705.374c-.228.184-.422.449-.584.794-.161.346-.242.798-.242 1.357v6.619H6.434V10.407h2.952zM25.842 12.084a3.751 3.751 0 0 1 1.233-1.17 5.37 5.37 0 0 1 1.685-.629 9.579 9.579 0 0 1 1.884-.187c.573 0 1.153.04 1.74.121.588.081 1.124.24 1.609.475.484.235.88.562 1.19.981.308.42.462.975.462 1.666v5.934c0 .516.03 1.008.088 1.478.058.471.161.824.308 1.06H32.87a4.435 4.435 0 0 1-.22-1.104c-.5.515-1.087.876-1.762 1.081a7.084 7.084 0 0 1-2.071.31c-.544 0-1.05-.067-1.52-.2a3.472 3.472 0 0 1-1.234-.617 2.87 2.87 0 0 1-.826-1.059c-.199-.426-.298-.934-.298-1.522 0-.647.114-1.18.342-1.6.227-.419.52-.753.881-1.004.36-.25.771-.437 1.234-.562.462-.125.929-.224 1.399-.298.47-.073.932-.132 1.387-.176.456-.044.86-.11 1.212-.199.353-.088.631-.217.837-.386.206-.169.301-.415.287-.74 0-.337-.055-.606-.166-.804a1.217 1.217 0 0 0-.44-.464 1.737 1.737 0 0 0-.639-.22 5.292 5.292 0 0 0-.782-.055c-.617 0-1.101.132-1.454.397-.352.264-.558.706-.617 1.323h-3.128c.044-.735.227-1.345.55-1.83zm6.179 4.423a5.095 5.095 0 0 1-.639.165 9.68 9.68 0 0 1-.716.11c-.25.03-.5.067-.749.11a5.616 5.616 0 0 0-.694.177 2.057 2.057 0 0 0-.594.298c-.17.125-.305.284-.408.474-.103.192-.154.434-.154.728 0 .28.051.515.154.706.103.192.242.342.419.453.176.11.381.187.617.231.234.044.477.066.726.066.617 0 1.094-.102 1.432-.309.338-.205.587-.452.75-.739.16-.286.26-.576.297-.87.036-.295.055-.53.055-.707v-1.17a1.4 1.4 0 0 1-.496.277zM43.884 10.407v2.096h-2.291v5.647c0 .53.088.883.264 1.059.176.177.529.265 1.057.265.177 0 .345-.007.507-.022.161-.015.316-.037.463-.066v2.426a7.49 7.49 0 0 1-.882.089 21.67 21.67 0 0 1-.947.022c-.484 0-.944-.034-1.377-.1a3.233 3.233 0 0 1-1.145-.386 2.04 2.04 0 0 1-.782-.816c-.191-.353-.287-.816-.287-1.39v-6.728H36.57v-2.096h1.894v-3.42h3.129v3.42h2.29zM48.355 10.407v2.118h.044a3.907 3.907 0 0 1 1.454-1.754 4.213 4.213 0 0 1 1.036-.497 3.734 3.734 0 0 1 1.145-.176c.206 0 .433.037.683.11v2.912a5.862 5.862 0 0 0-.528-.077 5.566 5.566 0 0 0-.595-.033c-.573 0-1.058.096-1.454.287a2.52 2.52 0 0 0-.958.783 3.143 3.143 0 0 0-.518 1.158 6.32 6.32 0 0 0-.154 1.434v5.14h-3.128V10.407h2.973zM54.039 8.642V6.06h3.128v2.582H54.04zm3.128 1.765v11.405H54.04V10.407h3.128zM58.797 10.407h3.569l2.005 2.978 1.982-2.978h3.459l-3.745 5.339 4.208 6.067h-3.57l-2.378-3.596-2.38 3.596h-3.502l4.097-6.001zM74.094 31.25V.732H71.9V0h3.035v31.982H71.9v-.732z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 3.1 KiB |
41
assets-hugo/scss/_variables_project.scss
Normal file
41
assets-hugo/scss/_variables_project.scss
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
/*
|
||||||
|
Copyright 2020, 2021 The Matrix.org Foundation C.I.C.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
$primary: #FFF;
|
||||||
|
$secondary: #0098D4;
|
||||||
|
$dark: #333;
|
||||||
|
$gray-100: #FBFBFB;
|
||||||
|
|
||||||
|
$secondary-background: #E5F5FB;
|
||||||
|
$secondary-lighter-background: #F4FaFC;
|
||||||
|
$secondary-lightest-background: #FBFDFD;
|
||||||
|
|
||||||
|
|
||||||
|
$warning: #FF6666;
|
||||||
|
$note: $secondary;
|
||||||
|
|
||||||
|
$note-background: $secondary-background;
|
||||||
|
$warning-background: #FFE0E0;
|
||||||
|
|
||||||
|
$table-row-alternate: $secondary-lightest-background;
|
||||||
|
$table-row-default: $secondary-lighter-background;
|
||||||
|
|
||||||
|
/*
|
||||||
|
Opt to serve fonts locally by overriding web-font-path to be a non-google fonts URL.
|
||||||
|
This is only possible with our modified docsy theme: https://github.com/matrix-org/docsy
|
||||||
|
*/
|
||||||
|
$web-font-path: "../css/fonts/Inter.css";
|
||||||
|
$google_font_name: "Inter";
|
428
assets-hugo/scss/custom.scss
Normal file
428
assets-hugo/scss/custom.scss
Normal file
|
@ -0,0 +1,428 @@
|
||||||
|
/*
|
||||||
|
Copyright 2020, 2021 The Matrix.org Foundation C.I.C.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
Custom SCSS for the Matrix spec
|
||||||
|
*/
|
||||||
|
|
||||||
|
@import "variables_project";
|
||||||
|
@import "variables";
|
||||||
|
|
||||||
|
/* Overrides for the navbar */
|
||||||
|
.td-navbar {
|
||||||
|
box-shadow: 0px 0px 8px rgba(179, 179, 179, 0.25);
|
||||||
|
min-height: 5rem;
|
||||||
|
|
||||||
|
.navbar-brand {
|
||||||
|
font-size: 1.1rem;
|
||||||
|
|
||||||
|
.navbar-version {
|
||||||
|
color: $secondary;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: $black;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Styles for the sidebar nav */
|
||||||
|
.td-sidebar-nav {
|
||||||
|
scroll-behavior: smooth;
|
||||||
|
overscroll-behavior: contain;
|
||||||
|
|
||||||
|
&>.td-sidebar-nav__section {
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
&>.td-sidebar-nav__section > li > a.td-sidebar-link {
|
||||||
|
font-weight: $font-weight-bold;
|
||||||
|
font-size: 1.3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This is to make the width of the items that have sub-items (like room versions)
|
||||||
|
the same as the width of items that don't (like changelog) */
|
||||||
|
.pr-md-3, .px-md-3 {
|
||||||
|
padding-right: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.indent-1 {
|
||||||
|
padding-left: 1rem !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.indent-2 {
|
||||||
|
padding-left: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
a, a.td-sidebar-link {
|
||||||
|
color: $gray-800;
|
||||||
|
font-weight: $font-weight-normal;
|
||||||
|
padding-top: .2rem;
|
||||||
|
padding-bottom: .2rem;
|
||||||
|
|
||||||
|
display: block;
|
||||||
|
transition: all 100ms ease-in-out;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: $secondary-lighter-background;
|
||||||
|
color: $gray-800;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.active, &active:hover {
|
||||||
|
background-color: $secondary-background;
|
||||||
|
font-weight: $font-weight-normal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
@supports (position: sticky) {
|
||||||
|
.td-sidebar-nav {
|
||||||
|
/* This overrides calc(100vh - 10rem);, which gives us a blank space at the bottom of the sidebar */
|
||||||
|
max-height: calc(100vh - 6rem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Customise footer */
|
||||||
|
footer {
|
||||||
|
box-shadow: 0px 0px 8px rgba(179, 179, 179, 0.25);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Auto numbering for headings */
|
||||||
|
.td-content {
|
||||||
|
|
||||||
|
counter-reset: h2;
|
||||||
|
|
||||||
|
&> h2 {
|
||||||
|
counter-reset: h3
|
||||||
|
}
|
||||||
|
|
||||||
|
&> h3 {
|
||||||
|
counter-reset: h4
|
||||||
|
}
|
||||||
|
|
||||||
|
&> h4 {
|
||||||
|
counter-reset: h5
|
||||||
|
}
|
||||||
|
|
||||||
|
&> h5 {
|
||||||
|
counter-reset: h6
|
||||||
|
}
|
||||||
|
|
||||||
|
&> h2:not(.no-numbers):before {
|
||||||
|
display: inline; visibility: visible; counter-increment: h2; content: counter(h2) ". "
|
||||||
|
}
|
||||||
|
|
||||||
|
&> h3:not(.no-numbers):before {
|
||||||
|
display: inline; visibility: visible; counter-increment: h3; content: counter(h2) "." counter(h3) ". "
|
||||||
|
}
|
||||||
|
|
||||||
|
&> h4:not(.no-numbers):before {
|
||||||
|
display: inline; visibility: visible; counter-increment: h4; content: counter(h2) "." counter(h3) "." counter(h4) ". "
|
||||||
|
}
|
||||||
|
|
||||||
|
&> h5:not(.no-numbers):before {
|
||||||
|
display: inline; visibility: visible; counter-increment: h5; content: counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) ". "
|
||||||
|
}
|
||||||
|
|
||||||
|
&> h6:not(.no-numbers):before {
|
||||||
|
display: inline; visibility: visible; counter-increment: h6; content: counter(h2) "." counter(h3) "." counter(h4) "." counter(h5) "." counter(h6) ". "
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Adjust heading anchors for site header */
|
||||||
|
.td-content {
|
||||||
|
&> h2,
|
||||||
|
&> h3,
|
||||||
|
&> h4,
|
||||||
|
&> h5,
|
||||||
|
&> h6,
|
||||||
|
.rendered-data h1 {
|
||||||
|
scroll-margin-top: 5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Styles for the table of contents */
|
||||||
|
#toc {
|
||||||
|
padding-top: .5rem;
|
||||||
|
padding-left: 1.5rem;
|
||||||
|
|
||||||
|
ol {
|
||||||
|
padding-left: 1rem;
|
||||||
|
counter-reset: section;
|
||||||
|
list-style-type: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#TableOfContents {
|
||||||
|
&>ol>li {
|
||||||
|
margin-bottom: .5rem;
|
||||||
|
|
||||||
|
&>a {
|
||||||
|
font-weight: $font-weight-bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ol {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
&>ol>li>a {
|
||||||
|
padding-left: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
&>ol>li>ol>li>a {
|
||||||
|
padding-left: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
&>ol>li>ol>li>ol>li>a {
|
||||||
|
padding-left: 3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
&>ol>li>ol>li>ol>li>ol>li>a {
|
||||||
|
padding-left: 4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
&>ol>li>ol>li>ol>li>ol>li>ol>li>a {
|
||||||
|
padding-left: 5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
li a:before {
|
||||||
|
counter-increment: section;
|
||||||
|
content: counters(section, ".") " ";
|
||||||
|
}
|
||||||
|
|
||||||
|
#toc-title {
|
||||||
|
font-weight: $font-weight-bold;
|
||||||
|
font-size: 1.3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Styles for alert boxes */
|
||||||
|
.alert {
|
||||||
|
&.note {
|
||||||
|
&:not(.omit-title):before {
|
||||||
|
content: "INFO: ";
|
||||||
|
font-weight: $font-weight-bold;
|
||||||
|
}
|
||||||
|
border: 2px solid $note;
|
||||||
|
border-left-width: 5px;
|
||||||
|
background: $note-background;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.rationale {
|
||||||
|
&:not(.omit-title):before {
|
||||||
|
content: "RATIONALE: ";
|
||||||
|
font-weight: $font-weight-bold;
|
||||||
|
}
|
||||||
|
border: 2px solid $note;
|
||||||
|
border-left-width: 5px;
|
||||||
|
background: $note-background;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.warning {
|
||||||
|
&:not(.omit-title):before {
|
||||||
|
content: "WARNING: ";
|
||||||
|
font-weight: $font-weight-bold;
|
||||||
|
}
|
||||||
|
border: 2px solid $warning;
|
||||||
|
border-left-width: 5px;
|
||||||
|
background: $warning-background;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Styles for sections that are rendered from data, such as HTTP APIs and event schemas */
|
||||||
|
.rendered-data {
|
||||||
|
margin: 1rem 0 3rem 0;
|
||||||
|
|
||||||
|
details {
|
||||||
|
|
||||||
|
summary {
|
||||||
|
padding: .5rem 0;
|
||||||
|
list-style-position: outside;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.deprecated-inline {
|
||||||
|
|
||||||
|
&:after {
|
||||||
|
content: " — DEPRECATED";
|
||||||
|
color: $warning;
|
||||||
|
font-weight: $font-weight-bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 1.3rem;
|
||||||
|
|
||||||
|
.endpoint {
|
||||||
|
color: $secondary;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-weight: $font-weight-bold;
|
||||||
|
font-size: 1.3rem;
|
||||||
|
margin: 3rem 0 .5rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-weight: $font-weight-bold;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
margin: 1.5rem 0 .75rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 + table, h3 + table, h3 + div.highlight {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
border-bottom: 2px solid $dark;
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
max-width: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
p code, table code {
|
||||||
|
background-color: $white;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
table-layout: fixed;
|
||||||
|
width: 100%;
|
||||||
|
margin: 4rem 0;
|
||||||
|
|
||||||
|
caption {
|
||||||
|
caption-side: top;
|
||||||
|
color: $dark;
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: $font-weight-bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
th, td, caption {
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
background-color: $white;
|
||||||
|
}
|
||||||
|
|
||||||
|
caption, tr {
|
||||||
|
background-color: $table-row-default;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr:nth-child(even) {
|
||||||
|
background-color: $table-row-alternate;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.basic-info, &.basic-info th, &.basic-info td {
|
||||||
|
table-layout: fixed;
|
||||||
|
margin: 1rem 0 .5rem 0;
|
||||||
|
background-color: $white;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.basic-info th {
|
||||||
|
width: 15rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.col-name, .col-type, .col-status {
|
||||||
|
width: 25%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.col-description {
|
||||||
|
width: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.col-status-description {
|
||||||
|
width: 75%;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
border: 0;
|
||||||
|
border-left: solid 5px $secondary;
|
||||||
|
}
|
||||||
|
|
||||||
|
.http-api-method {
|
||||||
|
font-weight: $font-weight-bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Miscellaneous custom bits */
|
||||||
|
|
||||||
|
/* Update link colours for MAtrix style */
|
||||||
|
a, a:hover {
|
||||||
|
color: $secondary;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This is needed to stop the bottom of the Matrix icon from getting snipped off. */
|
||||||
|
.td-navbar .navbar-brand svg {
|
||||||
|
height: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Give code samples and pre elements full-width */
|
||||||
|
.td-content > .highlight, .td-content > pre {
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The default CSS applies a style for blockquotes but only to immediate children
|
||||||
|
of .td-content. This applies the same style to any blockquotes that descend from
|
||||||
|
.td-content. */
|
||||||
|
.td-content blockquote {
|
||||||
|
padding: 0 0 0 1rem;
|
||||||
|
margin-bottom: $spacer;
|
||||||
|
color: $gray-600;
|
||||||
|
border-left: 6px solid $secondary;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Make padding symmetrical (this selector is used in the default styles to apply padding-left: 3rem)
|
||||||
|
*/
|
||||||
|
.pl-md-5, .px-md-5 {
|
||||||
|
padding-right: 3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Adjust default styles for info banner */
|
||||||
|
.pageinfo-primary {
|
||||||
|
max-width: 80%;
|
||||||
|
margin-left: 0;
|
||||||
|
border: 0;
|
||||||
|
border-left: solid 5px $secondary;
|
||||||
|
background-color: $gray-100;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pageinfo-unstable {
|
||||||
|
background-image: url('../icons/unstable.png');
|
||||||
|
background-position: left 1rem center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
padding-left: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Full-width tables */
|
||||||
|
.td-content > table {
|
||||||
|
width: 100%;
|
||||||
|
display: table;
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
Fix various typos throughout the specification.
|
|
@ -1 +1 @@
|
||||||
Add key backup (``/room_keys/*``) endpoints.
|
Add key backup (`/room_keys/*`) endpoints.
|
||||||
|
|
1
changelogs/client_server/newsfragments/2399.feature
Normal file
1
changelogs/client_server/newsfragments/2399.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Document how clients can advise recipients that it is withholding decryption keys as per [MSC2399](https://github.com/matrix-org/matrix-doc/pull/2399).
|
1
changelogs/client_server/newsfragments/2536.feature
Normal file
1
changelogs/client_server/newsfragments/2536.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Add cross-signing properties to the response of `POST /keys/query` per [MSC1756](https://github.com/matrix-org/matrix-doc/pull/1756).
|
1
changelogs/client_server/newsfragments/2536.new
Normal file
1
changelogs/client_server/newsfragments/2536.new
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Add `POST /keys/device_signing/upload` and `POST /keys/signatures/upload` per [MSC1756](https://github.com/matrix-org/matrix-doc/pull/1756).
|
|
@ -1 +1 @@
|
||||||
Fix issues with ``age`` and ``unsigned`` being shown in the wrong places.
|
Fix issues with `age` and `unsigned` being shown in the wrong places.
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Remove unimplemented ``m.login.oauth2`` and ``m.login.token`` user-interactive authentication mechanisms.
|
Remove unimplemented `m.login.oauth2` and `m.login.token` user-interactive authentication mechanisms.
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Remove ``room_id`` from ``/sync`` examples.
|
Remove `room_id` from `/sync` examples.
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Improve consistency and clarity of event schema ``title``\ s.
|
Improve consistency and clarity of event schema `title` s.
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Add a ``device_id`` parameter to login fallback per `MSC2604 <https://github.com/matrix-org/matrix-doc/pull/2604>`_.
|
Add a `device_id` parameter to login fallback per [MSC2604](https://github.com/matrix-org/matrix-doc/pull/2604).
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Clarify the behaviour of ``state`` for ``/sync`` with lazy-loading.
|
Clarify the behaviour of `state` for `/sync` with lazy-loading.
|
||||||
|
|
1
changelogs/client_server/newsfragments/2795.feature
Normal file
1
changelogs/client_server/newsfragments/2795.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Added support for `reason` on all membership events and related endpoints as per [MSC2367](https://github.com/matrix-org/matrix-doc/pull/2367).
|
1
changelogs/client_server/newsfragments/2796.feature
Normal file
1
changelogs/client_server/newsfragments/2796.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Add a 404 `M_NOT_FOUND` error to push rule endpoints as per [MSC2663](https://github.com/matrix-org/matrix-doc/pull/2663).
|
1
changelogs/client_server/newsfragments/2807.feature
Normal file
1
changelogs/client_server/newsfragments/2807.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Make `reason` and `score` parameters optional in the content reporting API (MSC2414).
|
1
changelogs/client_server/newsfragments/2808.feature
Normal file
1
changelogs/client_server/newsfragments/2808.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Allow guests to get the list of members for a room (MSC2689).
|
|
@ -0,0 +1 @@
|
||||||
|
Fix various typos throughout the specification.
|
|
@ -0,0 +1 @@
|
||||||
|
Clarify description of m.room.redaction event.
|
|
@ -0,0 +1 @@
|
||||||
|
Fix various typos throughout the specification.
|
|
@ -0,0 +1 @@
|
||||||
|
Fix various typos throughout the specification.
|
|
@ -0,0 +1 @@
|
||||||
|
Fix various typos throughout the specification.
|
|
@ -0,0 +1 @@
|
||||||
|
Mark `messages` as a required JSON body field in `PUT /_matrix/client/r0/sendToDevice/{eventType}/{txnId}` calls.
|
|
@ -0,0 +1 @@
|
||||||
|
Correct examples of `client_secret` request body parameters so that they do not include invalid characters.
|
|
@ -0,0 +1 @@
|
||||||
|
Fix example MXC URI for m.presence.
|
1
changelogs/client_server/newsfragments/3098.feature
Normal file
1
changelogs/client_server/newsfragments/3098.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Add support for spoilers ([MSC2010](https://github.com/matrix-org/matrix-doc/pull/2010) and [MSC2557](https://github.com/matrix-org/matrix-doc/pull/2557)), and `color` attribute ([MSC2422](https://github.com/matrix-org/matrix-doc/pull/2422)).
|
|
@ -0,0 +1 @@
|
||||||
|
Clarify that event bodies are untrusted, as per [MSC2801](https://github.com/matrix-org/matrix-doc/pull/2801).
|
1
changelogs/client_server/newsfragments/3100.feature
Normal file
1
changelogs/client_server/newsfragments/3100.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Add `<details>` and `<summary>` to the suggested HTML subset as per [MSC2184](https://github.com/matrix-org/matrix-doc/pull/2184).
|
|
@ -0,0 +1 @@
|
||||||
|
Fix various typos throughout the specification.
|
|
@ -0,0 +1 @@
|
||||||
|
Fix the maximum event size restriction (65535 bytes -> 65536).
|
1
changelogs/client_server/newsfragments/3139.breaking
Normal file
1
changelogs/client_server/newsfragments/3139.breaking
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Add `m.key.verification.ready` and `m.key.verification.done` to key verification framework as per [MSC2366](https://github.com/matrix-org/matrix-doc/pull/2366).
|
1
changelogs/client_server/newsfragments/3139.feature
Normal file
1
changelogs/client_server/newsfragments/3139.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Add key verification using in-room messages as per [MSC2241](https://github.com/matrix-org/matrix-doc/pull/2241).
|
1
changelogs/client_server/newsfragments/3147.feature
Normal file
1
changelogs/client_server/newsfragments/3147.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Add information about using SSSS for cross-signing and key backup.
|
1
changelogs/client_server/newsfragments/3149.feature
Normal file
1
changelogs/client_server/newsfragments/3149.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Add key verification method using QR codes ([MSC1544](https://github.com/matrix-org/matrix-doc/pull/1544)).
|
1
changelogs/client_server/newsfragments/3150.feature
Normal file
1
changelogs/client_server/newsfragments/3150.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Add key verification using in-room messages as per [MSC2241](https://github.com/matrix-org/matrix-doc/pull/2241).
|
1
changelogs/client_server/newsfragments/3151.feature
Normal file
1
changelogs/client_server/newsfragments/3151.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Document how clients can simplify usage of Secure Secret Storage ([MSC2874](https://github.com/uhoreg/matrix-doc/pull/new/single_ssss_spec)).
|
1
changelogs/client_server/newsfragments/3154.feature
Normal file
1
changelogs/client_server/newsfragments/3154.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Add support for knocking, as per [MSC2403](https://github.com/matrix-org/matrix-doc/pull/2403).
|
1
changelogs/client_server/newsfragments/3154.new
Normal file
1
changelogs/client_server/newsfragments/3154.new
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Add `/knock` endpoint as per [MSC2403](https://github.com/matrix-org/matrix-doc/pull/2403).
|
1
changelogs/client_server/newsfragments/3163.feature
Normal file
1
changelogs/client_server/newsfragments/3163.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Multiple SSO providers are possible through `m.login.sso` as per [MSC2858](https://github.com/matrix-org/matrix-doc/pull/2858).
|
1
changelogs/client_server/newsfragments/3163.new
Normal file
1
changelogs/client_server/newsfragments/3163.new
Normal file
|
@ -0,0 +1 @@
|
||||||
|
`/login/sso/redirect/{idpId}` has been added as per [MSC2858](https://github.com/matrix-org/matrix-doc/pull/2858).
|
1
changelogs/client_server/newsfragments/3166.feature
Normal file
1
changelogs/client_server/newsfragments/3166.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Add `device_id` to `/account/whoami` response as per [MSC2033](https://github.com/matrix-org/matrix-doc/pull/2033).
|
1
changelogs/client_server/newsfragments/3169.feature
Normal file
1
changelogs/client_server/newsfragments/3169.feature
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Downgrade identity server discovery failures to `FAIL_PROMPT` as per [MSC2284](https://github.com/matrix-org/matrix-doc/pull/2284).
|
1
changelogs/client_server/newsfragments/3199.deprecaation
Normal file
1
changelogs/client_server/newsfragments/3199.deprecaation
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Deprecate starting verifications that don't start with `m.key.verification.request` as per [MSC3122](https://github.com/matrix-org/matrix-doc/pull/3122).
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue