diff --git a/.codeclimate.yml b/.codeclimate.yml index d40cc58..f2d8cbc 100644 --- a/.codeclimate.yml +++ b/.codeclimate.yml @@ -1,30 +1,30 @@ -# Save as .codeclimate.yml (note leading .) in project root directory -version: "2" -languages: - Ruby: false - JavaScript: true - PHP: false -checks: - file-lines: - config: - threshold: 500 - method-lines: - config: - threshold: 75 - method-complexity: - config: - threshold: 10 - similar-code: - config: - threshold: 65 -plugins: - duplication: - enabled: true - config: - languages: - javascript: - mass_threshold: 110 - count_threshold: 3 -exclude_paths: -- "public/vendor/*" +# Save as .codeclimate.yml (note leading .) in project root directory +version: "2" +languages: + Ruby: false + JavaScript: true + PHP: false +checks: + file-lines: + config: + threshold: 500 + method-lines: + config: + threshold: 75 + method-complexity: + config: + threshold: 10 + similar-code: + config: + threshold: 65 +plugins: + duplication: + enabled: true + config: + languages: + javascript: + mass_threshold: 110 + count_threshold: 3 +exclude_paths: +- "public/vendor/*" - "test/*" \ No newline at end of file diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index acf590a..ecec306 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,12 +1,12 @@ -FROM mcr.microsoft.com/devcontainers/javascript-node:1-22-bookworm - -RUN apt-get update \ - && apt-get install -y \ - iputils-ping \ - redis-server \ - && rm -rf /var/lib/apt/lists/* - -RUN curl https://qlty.sh | /bin/bash \ - && mv ~/.qlty/bin/qlty /usr/local/bin/qlty \ - && rm -rf ~/.qlty \ - && qlty --version +FROM mcr.microsoft.com/devcontainers/javascript-node:1-22-bookworm + +RUN apt-get update \ + && apt-get install -y \ + iputils-ping \ + redis-server \ + && rm -rf /var/lib/apt/lists/* + +RUN curl https://qlty.sh | /bin/bash \ + && mv ~/.qlty/bin/qlty /usr/local/bin/qlty \ + && rm -rf ~/.qlty \ + && qlty --version diff --git a/.editorconfig b/.editorconfig index 8f8a24b..4759b36 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,9 +1,9 @@ -root = true - -[{*.js, *.css, *.tpl, *.json, *.ts}] -indent_style = space -indent_size = 4 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = false +root = true + +[{*.js, *.css, *.tpl, *.json, *.ts}] +indent_style = space +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = false diff --git a/.eslintignore b/.eslintignore index 5afc244..5cfa3ef 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,30 +1,30 @@ -node_modules/ -*.sublime-project -*.sublime-workspace -.project -.vagrant -.DS_Store -logs/ -/public/templates -/public/uploads -/public/vendor -/public/src/modules/string.js -.idea/ -.vscode/ -*.ipr -*.iws -/coverage -/build -.eslintrc -test/files -*.min.js - -/public/src/app.js -/public/src/client.js -/public/src/admin/admin.js -/public/src/modules/translator.common.js -/public/src/modules/pictureCropper.js -/public/src/modules/ace-editor.js -/public/src/client/account/header.js -/public/src/client/test.js +node_modules/ +*.sublime-project +*.sublime-workspace +.project +.vagrant +.DS_Store +logs/ +/public/templates +/public/uploads +/public/vendor +/public/src/modules/string.js +.idea/ +.vscode/ +*.ipr +*.iws +/coverage +/build +.eslintrc +test/files +*.min.js + +/public/src/app.js +/public/src/client.js +/public/src/admin/admin.js +/public/src/modules/translator.common.js +/public/src/modules/pictureCropper.js +/public/src/modules/ace-editor.js +/public/src/client/account/header.js +/public/src/client/test.js themes/ \ No newline at end of file diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 4ed43ff..ae5bf2c 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -1,70 +1,70 @@ - -const fs = require('fs'); -const path = require('path'); - -// Directories that contain TypeScript files of note -const tsDirs = [ - "public/src", - "src", - "test", -]; - -// Helper walk function to check all directories -function walk(dir) { - var results = []; - var list = fs.readdirSync(dir); - list.forEach(function(file) { - file = dir + '/' + file; - var stat = fs.statSync(file); - if (stat && stat.isDirectory()) { - results = results.concat(walk(file)); - } else { - results.push(file); - } - }); - return results; -} - -// Find all JS files that were compiled from TS -function find_compiled_js() { - let jsFilesList = []; - - tsDirs.forEach(tsDir => { - let filesList = walk(tsDir); - const tsFilesList = filesList.filter((file) => path.extname(file).toLowerCase() === '.ts'); - jsFilesList = jsFilesList.concat(filesList.filter( - (file) => path.extname(file).toLowerCase() === '.js' && - tsFilesList.find(tsFile => tsFile === (file.replace(/\.[^/.]+$/, "") + ".ts")) !== undefined)); - }); - - if (jsFilesList.length == 0) return ""; - return jsFilesList; - } - - module.exports = { - extends: ["nodebb"], - root: true, - ignorePatterns: find_compiled_js(), - rules: { - "indent": ["error", 4] - }, - overrides: [ - { - files: ["**/*.ts", "**/*.tsx"], - extends: [ - "plugin:@typescript-eslint/recommended", - "plugin:@typescript-eslint/recommended-requiring-type-checking" - ], - parser: "@typescript-eslint/parser", - plugins: ["@typescript-eslint"], - parserOptions: { - ecmaFeatures: { jsx: true }, - project: "./tsconfig.json" - }, - rules: { - "no-use-before-define": "off", - "@typescript-eslint/no-use-before-define": "error", - } - } - ] + +const fs = require('fs'); +const path = require('path'); + +// Directories that contain TypeScript files of note +const tsDirs = [ + "public/src", + "src", + "test", +]; + +// Helper walk function to check all directories +function walk(dir) { + var results = []; + var list = fs.readdirSync(dir); + list.forEach(function(file) { + file = dir + '/' + file; + var stat = fs.statSync(file); + if (stat && stat.isDirectory()) { + results = results.concat(walk(file)); + } else { + results.push(file); + } + }); + return results; +} + +// Find all JS files that were compiled from TS +function find_compiled_js() { + let jsFilesList = []; + + tsDirs.forEach(tsDir => { + let filesList = walk(tsDir); + const tsFilesList = filesList.filter((file) => path.extname(file).toLowerCase() === '.ts'); + jsFilesList = jsFilesList.concat(filesList.filter( + (file) => path.extname(file).toLowerCase() === '.js' && + tsFilesList.find(tsFile => tsFile === (file.replace(/\.[^/.]+$/, "") + ".ts")) !== undefined)); + }); + + if (jsFilesList.length == 0) return ""; + return jsFilesList; + } + + module.exports = { + extends: ["nodebb"], + root: true, + ignorePatterns: find_compiled_js(), + rules: { + "indent": ["error", 4] + }, + overrides: [ + { + files: ["**/*.ts", "**/*.tsx"], + extends: [ + "plugin:@typescript-eslint/recommended", + "plugin:@typescript-eslint/recommended-requiring-type-checking" + ], + parser: "@typescript-eslint/parser", + plugins: ["@typescript-eslint"], + parserOptions: { + ecmaFeatures: { jsx: true }, + project: "./tsconfig.json" + }, + rules: { + "no-use-before-define": "off", + "@typescript-eslint/no-use-before-define": "error", + } + } + ] }; \ No newline at end of file diff --git a/.gitattributes b/.gitattributes index e0fa760..364ea8e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,13 +1,13 @@ -# These files are text and should be normalized (convert crlf => lf) -*.json text -*.css text -*.less text -*.tpl text -*.html text -*.js text -*.md text - -# Images should be treated as binary -# (binary is a macro for -text -diff) -*.png binary +# These files are text and should be normalized (convert crlf => lf) +*.json text +*.css text +*.less text +*.tpl text +*.html text +*.js text +*.md text + +# Images should be treated as binary +# (binary is a macro for -text -diff) +*.png binary *.jpg binary \ No newline at end of file diff --git a/.github/workflows/hw1.yaml b/.github/workflows/hw1.yaml index cc2454a..8d5a473 100644 --- a/.github/workflows/hw1.yaml +++ b/.github/workflows/hw1.yaml @@ -1,122 +1,122 @@ -name: Homework 1 Check - -on: - pull_request: - branches: - - main - -defaults: - run: - shell: bash - -permissions: - contents: read - -jobs: - hw1: - permissions: - checks: write - contents: read - name: Homework 1 - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest] - node: [16] - runs-on: ${{ matrix.os }} - env: - TEST_ENV: ${{ matrix.test_env || 'production' }} - - services: - mongo: - image: 'mongo:3.7' - ports: - # Maps port 27017 on service container to the host - - 27017:27017 - - steps: - - uses: actions/checkout@v3 - - - run: cp install/package.json package.json - - - name: Install Node - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node }} - - - name: NPM Install - uses: bahmutov/npm-install@v1 - with: - useLockFile: false - - - name: Setup on MongoDB - env: - SETUP: >- - { - "url": "http://127.0.0.1:4567", - "secret": "abcdef", - "admin:username": "admin", - "admin:email": "test@example.org", - "admin:password": "hAN3Eg8W", - "admin:password:confirm": "hAN3Eg8W", - - "database": "mongo", - "mongo:host": "127.0.0.1", - "mongo:port": 27017, - "mongo:username": "", - "mongo:password": "", - "mongo:database": "nodebb" - } - CI: >- - { - "host": "127.0.0.1", - "port": 27017, - "database": "ci_test" - } - run: | - node app --setup="${SETUP}" --ci="${CI}" - - - name: Get specific changed files - id: changed-files-specific - uses: tj-actions/changed-files@v24 - with: - files: | - ./**/*.js - ./**/*.ts - - - name: Check that HW1 specifications are met - run: | - IFS=' ' read -r -a addedarray <<< "${{ steps.changed-files-specific.outputs.added_files }}" - IFS=' ' read -r -a modifiedarray <<< "${{ steps.changed-files-specific.outputs.modified_files }}" - - PASS="false" - for addedfile in "${addedarray[@]}" - do - IFS='. ' read -r -a addfilesplit <<< $addedfile - ADDFILENAME="${addfilesplit[0]}" - ADDFILEEXT="${addfilesplit[1]}" - - if [ "$ADDFILEEXT" == "ts" ] - then - for modifiedfile in "${modifiedarray[@]}" - do - IFS='. ' read -r -a modfilesplit <<< $modifiedfile - MODFILENAME="${modfilesplit[0]}" - MODFILEEXT="${modfilesplit[1]}" - - if [ "$MODFILEEXT" == "js" ] && [ "$ADDFILENAME" == "$MODFILENAME" ] - then - echo "Found suitable file!" - PASS="true" - fi - done - fi - done - - if [ "$PASS" != "true" ] - then - echo "No suitable files found that match the requirements of HW1. Please check that you have translated a JS file into TypeScript and regenerated the JavaScript file using % npx tsc" - echo "Files added (should see your xx.ts file): ${{ steps.changed-files-specific.outputs.added_files }}" - echo "Files modified (should see your xx.js file): ${{ steps.changed-files-specific.outputs.modified_files }}" - exit 1 - fi +name: Homework 1 Check + +on: + pull_request: + branches: + - main + +defaults: + run: + shell: bash + +permissions: + contents: read + +jobs: + hw1: + permissions: + checks: write + contents: read + name: Homework 1 + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + node: [16] + runs-on: ${{ matrix.os }} + env: + TEST_ENV: ${{ matrix.test_env || 'production' }} + + services: + mongo: + image: 'mongo:3.7' + ports: + # Maps port 27017 on service container to the host + - 27017:27017 + + steps: + - uses: actions/checkout@v3 + + - run: cp install/package.json package.json + + - name: Install Node + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node }} + + - name: NPM Install + uses: bahmutov/npm-install@v1 + with: + useLockFile: false + + - name: Setup on MongoDB + env: + SETUP: >- + { + "url": "http://127.0.0.1:4567", + "secret": "abcdef", + "admin:username": "admin", + "admin:email": "test@example.org", + "admin:password": "hAN3Eg8W", + "admin:password:confirm": "hAN3Eg8W", + + "database": "mongo", + "mongo:host": "127.0.0.1", + "mongo:port": 27017, + "mongo:username": "", + "mongo:password": "", + "mongo:database": "nodebb" + } + CI: >- + { + "host": "127.0.0.1", + "port": 27017, + "database": "ci_test" + } + run: | + node app --setup="${SETUP}" --ci="${CI}" + + - name: Get specific changed files + id: changed-files-specific + uses: tj-actions/changed-files@v24 + with: + files: | + ./**/*.js + ./**/*.ts + + - name: Check that HW1 specifications are met + run: | + IFS=' ' read -r -a addedarray <<< "${{ steps.changed-files-specific.outputs.added_files }}" + IFS=' ' read -r -a modifiedarray <<< "${{ steps.changed-files-specific.outputs.modified_files }}" + + PASS="false" + for addedfile in "${addedarray[@]}" + do + IFS='. ' read -r -a addfilesplit <<< $addedfile + ADDFILENAME="${addfilesplit[0]}" + ADDFILEEXT="${addfilesplit[1]}" + + if [ "$ADDFILEEXT" == "ts" ] + then + for modifiedfile in "${modifiedarray[@]}" + do + IFS='. ' read -r -a modfilesplit <<< $modifiedfile + MODFILENAME="${modfilesplit[0]}" + MODFILEEXT="${modfilesplit[1]}" + + if [ "$MODFILEEXT" == "js" ] && [ "$ADDFILENAME" == "$MODFILENAME" ] + then + echo "Found suitable file!" + PASS="true" + fi + done + fi + done + + if [ "$PASS" != "true" ] + then + echo "No suitable files found that match the requirements of HW1. Please check that you have translated a JS file into TypeScript and regenerated the JavaScript file using % npx tsc" + echo "Files added (should see your xx.ts file): ${{ steps.changed-files-specific.outputs.added_files }}" + echo "Files modified (should see your xx.js file): ${{ steps.changed-files-specific.outputs.modified_files }}" + exit 1 + fi diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index 58aaa48..f96587e 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -1,83 +1,83 @@ -name: Lint - -on: - push: - branches: - - main - pull_request: - branches: - - main - -defaults: - run: - shell: bash - -permissions: - contents: read - -jobs: - lint: - permissions: - checks: write # for coverallsapp/github-action to create new checks - contents: read # for actions/checkout to fetch code - name: Lint - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest] - node: [16] - runs-on: ${{ matrix.os }} - env: - TEST_ENV: ${{ matrix.test_env || 'production' }} - - services: - mongo: - image: 'mongo:3.7' - ports: - # Maps port 27017 on service container to the host - - 27017:27017 - - steps: - - uses: actions/checkout@v3 - - - run: cp install/package.json package.json - - - name: Install Node - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node }} - - - name: NPM Install - uses: bahmutov/npm-install@v1 - with: - useLockFile: false - - - name: Setup on MongoDB - env: - SETUP: >- - { - "url": "http://127.0.0.1:4567", - "secret": "abcdef", - "admin:username": "admin", - "admin:email": "test@example.org", - "admin:password": "hAN3Eg8W", - "admin:password:confirm": "hAN3Eg8W", - - "database": "mongo", - "mongo:host": "127.0.0.1", - "mongo:port": 27017, - "mongo:username": "", - "mongo:password": "", - "mongo:database": "nodebb" - } - CI: >- - { - "host": "127.0.0.1", - "port": 27017, - "database": "ci_test" - } - run: | - node app --setup="${SETUP}" --ci="${CI}" - - - name: Run ESLint - run: npm run lint +name: Lint + +on: + push: + branches: + - main + pull_request: + branches: + - main + +defaults: + run: + shell: bash + +permissions: + contents: read + +jobs: + lint: + permissions: + checks: write # for coverallsapp/github-action to create new checks + contents: read # for actions/checkout to fetch code + name: Lint + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + node: [16] + runs-on: ${{ matrix.os }} + env: + TEST_ENV: ${{ matrix.test_env || 'production' }} + + services: + mongo: + image: 'mongo:3.7' + ports: + # Maps port 27017 on service container to the host + - 27017:27017 + + steps: + - uses: actions/checkout@v3 + + - run: cp install/package.json package.json + + - name: Install Node + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node }} + + - name: NPM Install + uses: bahmutov/npm-install@v1 + with: + useLockFile: false + + - name: Setup on MongoDB + env: + SETUP: >- + { + "url": "http://127.0.0.1:4567", + "secret": "abcdef", + "admin:username": "admin", + "admin:email": "test@example.org", + "admin:password": "hAN3Eg8W", + "admin:password:confirm": "hAN3Eg8W", + + "database": "mongo", + "mongo:host": "127.0.0.1", + "mongo:port": 27017, + "mongo:username": "", + "mongo:password": "", + "mongo:database": "nodebb" + } + CI: >- + { + "host": "127.0.0.1", + "port": 27017, + "database": "ci_test" + } + run: | + node app --setup="${SETUP}" --ci="${CI}" + + - name: Run ESLint + run: npm run lint diff --git a/.github/workflows/setup_repo.yaml b/.github/workflows/setup_repo.yaml index 138997b..a396176 100644 --- a/.github/workflows/setup_repo.yaml +++ b/.github/workflows/setup_repo.yaml @@ -1,29 +1,29 @@ -name: setup repo - -on: - create: - -jobs: - setup-repo: - runs-on: ubuntu-latest - permissions: - contents: write - steps: - - uses: actions/checkout@master - - - run: sed -i 's|{-ActivityLocation-}|https://raw.githubusercontent.com/${{ github.repository }}/activity-resources/image.svg|g' README.md - - - uses: stefanzweifel/git-auto-commit-action@v5 - with: - commit_message: Update generated README - branch: main - push_options: '--force' - commit_user_name: activity-action 🤖 - commit_user_email: actions@github.com - commit_author: activity-action 🤖 - file_pattern: 'README.md' - - uses: peterjgrainger/action-create-branch@v2.2.0 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - branch: 'activity-resources' +name: setup repo + +on: + create: + +jobs: + setup-repo: + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/checkout@master + + - run: sed -i 's|{-ActivityLocation-}|https://raw.githubusercontent.com/${{ github.repository }}/activity-resources/image.svg|g' README.md + + - uses: stefanzweifel/git-auto-commit-action@v5 + with: + commit_message: Update generated README + branch: main + push_options: '--force' + commit_user_name: activity-action 🤖 + commit_user_email: actions@github.com + commit_author: activity-action 🤖 + file_pattern: 'README.md' + - uses: peterjgrainger/action-create-branch@v2.2.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + branch: 'activity-resources' diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 6939c02..8569b04 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -1,201 +1,201 @@ -name: Test - -on: - push: - branches: - - main - pull_request: - branches: - - main - -defaults: - run: - shell: bash - -permissions: - contents: read - -jobs: - test: - permissions: - checks: write # for coverallsapp/github-action to create new checks - contents: read # for actions/checkout to fetch code - name: Test - strategy: - fail-fast: false - matrix: - os: [ubuntu-latest] - node: [16, 18] - database: [mongo-dev, mongo, redis, postgres] - include: - # only run coverage once - - os: ubuntu-latest - node: 16 - coverage: true - # test under development once - - database: mongo-dev - test_env: development - runs-on: ${{ matrix.os }} - env: - TEST_ENV: ${{ matrix.test_env || 'production' }} - - services: - postgres: - image: 'postgres:14-alpine' - env: - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - # Set health checks to wait until postgres has started - options: >- - --health-cmd pg_isready - --health-interval 10s - --health-timeout 5s - --health-retries 5 - ports: - # Maps port 5432 on service container to the host - - 5432:5432 - - redis: - image: 'redis:2.8.23' - # Set health checks to wait until redis has started - options: >- - --health-cmd "redis-cli ping" - --health-interval 10s - --health-timeout 5s - --health-retries 5 - ports: - # Maps port 6379 on service container to the host - - 6379:6379 - - mongo: - image: 'mongo:3.7' - ports: - # Maps port 27017 on service container to the host - - 27017:27017 - - steps: - - uses: actions/checkout@v3 - - - run: cp install/package.json package.json - - - name: Install Node - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node }} - - - name: NPM Install - uses: bahmutov/npm-install@v1 - with: - useLockFile: false - - - name: Setup on MongoDB - if: startsWith(matrix.database, 'mongo') - env: - SETUP: >- - { - "url": "http://127.0.0.1:4567", - "secret": "abcdef", - "admin:username": "admin", - "admin:email": "test@example.org", - "admin:password": "hAN3Eg8W", - "admin:password:confirm": "hAN3Eg8W", - - "database": "mongo", - "mongo:host": "127.0.0.1", - "mongo:port": 27017, - "mongo:username": "", - "mongo:password": "", - "mongo:database": "nodebb" - } - CI: >- - { - "host": "127.0.0.1", - "port": 27017, - "database": "ci_test" - } - run: | - node app --setup="${SETUP}" --ci="${CI}" - - - name: Setup on PostgreSQL - if: startsWith(matrix.database, 'postgres') - env: - SETUP: >- - { - "url": "http://127.0.0.1:4567", - "secret": "abcdef", - "admin:username": "admin", - "admin:email": "test@example.org", - "admin:password": "hAN3Eg8W", - "admin:password:confirm": "hAN3Eg8W", - - "database": "postgres", - "postgres:host": "127.0.0.1", - "postgres:port": 5432, - "postgres:username": "postgres", - "postgres:password": "postgres", - "postgres:database": "nodebb" - } - CI: >- - { - "host": "127.0.0.1", - "database": "ci_test", - "port": 5432, - "username": "postgres", - "password": "postgres" - } - run: | - node -e "const { Client } = require('pg'); const c = new Client({ host: '127.0.0.1', port: 5432, user: 'postgres', password: 'postgres' }); c.connect().then(() => c.query('CREATE DATABASE nodebb')).then(() => c.query('CREATE DATABASE ci_test')).then(() => c.end())" - node app --setup="${SETUP}" --ci="${CI}" - - - name: Setup on Redis - if: startsWith(matrix.database, 'redis') - env: - SETUP: >- - { - "url": "http://127.0.0.1:4567/forum", - "secret": "abcdef", - "admin:username": "admin", - "admin:email": "test@example.org", - "admin:password": "hAN3Eg8W", - "admin:password:confirm": "hAN3Eg8W", - - "database": "redis", - "redis:host": "127.0.0.1", - "redis:port": 6379, - "redis:password": "", - "redis:database": 0 - } - CI: >- - { - "host": "127.0.0.1", - "database": 1, - "port": 6379 - } - run: | - node app --setup="${SETUP}" --ci="${CI}" - - - name: Node tests - run: npm test - - - name: Extract coverage info - run: npm run coverage - - - name: Test coverage - uses: coverallsapp/github-action@1.1.3 - if: matrix.coverage - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - flag-name: ${{ matrix.os }}-node-${{ matrix.node }}-db-${{ matrix.database }} - parallel: true - - finish: - permissions: - checks: write # for coverallsapp/github-action to create new checks - needs: test - runs-on: ubuntu-latest - steps: - - name: Coveralls Finished - uses: coverallsapp/github-action@1.1.3 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - parallel-finished: true +name: Test + +on: + push: + branches: + - main + pull_request: + branches: + - main + +defaults: + run: + shell: bash + +permissions: + contents: read + +jobs: + test: + permissions: + checks: write # for coverallsapp/github-action to create new checks + contents: read # for actions/checkout to fetch code + name: Test + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + node: [16, 18] + database: [mongo-dev, mongo, redis, postgres] + include: + # only run coverage once + - os: ubuntu-latest + node: 16 + coverage: true + # test under development once + - database: mongo-dev + test_env: development + runs-on: ${{ matrix.os }} + env: + TEST_ENV: ${{ matrix.test_env || 'production' }} + + services: + postgres: + image: 'postgres:14-alpine' + env: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + # Set health checks to wait until postgres has started + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + # Maps port 5432 on service container to the host + - 5432:5432 + + redis: + image: 'redis:2.8.23' + # Set health checks to wait until redis has started + options: >- + --health-cmd "redis-cli ping" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + # Maps port 6379 on service container to the host + - 6379:6379 + + mongo: + image: 'mongo:3.7' + ports: + # Maps port 27017 on service container to the host + - 27017:27017 + + steps: + - uses: actions/checkout@v3 + + - run: cp install/package.json package.json + + - name: Install Node + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node }} + + - name: NPM Install + uses: bahmutov/npm-install@v1 + with: + useLockFile: false + + - name: Setup on MongoDB + if: startsWith(matrix.database, 'mongo') + env: + SETUP: >- + { + "url": "http://127.0.0.1:4567", + "secret": "abcdef", + "admin:username": "admin", + "admin:email": "test@example.org", + "admin:password": "hAN3Eg8W", + "admin:password:confirm": "hAN3Eg8W", + + "database": "mongo", + "mongo:host": "127.0.0.1", + "mongo:port": 27017, + "mongo:username": "", + "mongo:password": "", + "mongo:database": "nodebb" + } + CI: >- + { + "host": "127.0.0.1", + "port": 27017, + "database": "ci_test" + } + run: | + node app --setup="${SETUP}" --ci="${CI}" + + - name: Setup on PostgreSQL + if: startsWith(matrix.database, 'postgres') + env: + SETUP: >- + { + "url": "http://127.0.0.1:4567", + "secret": "abcdef", + "admin:username": "admin", + "admin:email": "test@example.org", + "admin:password": "hAN3Eg8W", + "admin:password:confirm": "hAN3Eg8W", + + "database": "postgres", + "postgres:host": "127.0.0.1", + "postgres:port": 5432, + "postgres:username": "postgres", + "postgres:password": "postgres", + "postgres:database": "nodebb" + } + CI: >- + { + "host": "127.0.0.1", + "database": "ci_test", + "port": 5432, + "username": "postgres", + "password": "postgres" + } + run: | + node -e "const { Client } = require('pg'); const c = new Client({ host: '127.0.0.1', port: 5432, user: 'postgres', password: 'postgres' }); c.connect().then(() => c.query('CREATE DATABASE nodebb')).then(() => c.query('CREATE DATABASE ci_test')).then(() => c.end())" + node app --setup="${SETUP}" --ci="${CI}" + + - name: Setup on Redis + if: startsWith(matrix.database, 'redis') + env: + SETUP: >- + { + "url": "http://127.0.0.1:4567/forum", + "secret": "abcdef", + "admin:username": "admin", + "admin:email": "test@example.org", + "admin:password": "hAN3Eg8W", + "admin:password:confirm": "hAN3Eg8W", + + "database": "redis", + "redis:host": "127.0.0.1", + "redis:port": 6379, + "redis:password": "", + "redis:database": 0 + } + CI: >- + { + "host": "127.0.0.1", + "database": 1, + "port": 6379 + } + run: | + node app --setup="${SETUP}" --ci="${CI}" + + - name: Node tests + run: npm test + + - name: Extract coverage info + run: npm run coverage + + - name: Test coverage + uses: coverallsapp/github-action@1.1.3 + if: matrix.coverage + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + flag-name: ${{ matrix.os }}-node-${{ matrix.node }}-db-${{ matrix.database }} + parallel: true + + finish: + permissions: + checks: write # for coverallsapp/github-action to create new checks + needs: test + runs-on: ubuntu-latest + steps: + - name: Coveralls Finished + uses: coverallsapp/github-action@1.1.3 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + parallel-finished: true diff --git a/.github/workflows/volunteers.yaml b/.github/workflows/volunteers.yaml index 9b350dd..17f87a8 100644 --- a/.github/workflows/volunteers.yaml +++ b/.github/workflows/volunteers.yaml @@ -1,11 +1,11 @@ -name: "Issue volunteer assignment" - -on: [issue_comment] - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: bhermann/issue-volunteer@v0.1.12 - with: - GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" +name: "Issue volunteer assignment" + +on: [issue_comment] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: bhermann/issue-volunteer@v0.1.12 + with: + GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.gitignore b/.gitignore index 5a176ec..9ff1eed 100644 --- a/.gitignore +++ b/.gitignore @@ -1,84 +1,84 @@ -dist/ -yarn.lock -npm-debug.log -node_modules/ -sftp-config.json -config.json -jsconfig.json -public/src/nodebb.min.js -!src/views/config.json -public/css/*.css -*.sublime-project -*.sublime-workspace -.project -*.swp -Vagrantfile -.vagrant -provision.sh -*.komodoproject -.DS_Store -feeds/recent.rss -.eslintcache -.svn -dump.rdb - -logs/ - -pidfile - -# templates -/public/templates - -/public/uploads -/test/uploads - -# compiled files -/public/stylesheet.css -/public/admin.css -/public/nodebb.min.js -/public/nodebb.min.js.map -/public/acp.min.js -/public/acp.min.js.map -/public/installer.css -/public/installer.min.js -/public/bootstrap.min.css -/public/logo.png - -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio -*.iml - -## Directory-based project format: -.idea/ -.vscode/ - -## File-based project format: -*.ipr -*.iws - -## Transifex -tx.exe -.transifexrc - -##Coverage output -coverage -.nyc_output - -*.log -test/files/normalise.jpg.png -test/files/normalise-resized.jpg -package-lock.json -/package.json -*.mongodb -link-plugins.sh -test.sh - -# Theme ignore -theme/*.css -!theme/less/bootstrap-flipped.css -theme/npm-debug.log -theme/sftp-config.json -theme/*.sublime-project -theme/*.sublime-workspace -theme/.idea -theme/.vscode -theme/node_modules/ +dist/ +yarn.lock +npm-debug.log +node_modules/ +sftp-config.json +config.json +jsconfig.json +public/src/nodebb.min.js +!src/views/config.json +public/css/*.css +*.sublime-project +*.sublime-workspace +.project +*.swp +Vagrantfile +.vagrant +provision.sh +*.komodoproject +.DS_Store +feeds/recent.rss +.eslintcache +.svn +dump.rdb + +logs/ + +pidfile + +# templates +/public/templates + +/public/uploads +/test/uploads + +# compiled files +/public/stylesheet.css +/public/admin.css +/public/nodebb.min.js +/public/nodebb.min.js.map +/public/acp.min.js +/public/acp.min.js.map +/public/installer.css +/public/installer.min.js +/public/bootstrap.min.css +/public/logo.png + +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio +*.iml + +## Directory-based project format: +.idea/ +.vscode/ + +## File-based project format: +*.ipr +*.iws + +## Transifex +tx.exe +.transifexrc + +##Coverage output +coverage +.nyc_output + +*.log +test/files/normalise.jpg.png +test/files/normalise-resized.jpg +package-lock.json +/package.json +*.mongodb +link-plugins.sh +test.sh + +# Theme ignore +theme/*.css +!theme/less/bootstrap-flipped.css +theme/npm-debug.log +theme/sftp-config.json +theme/*.sublime-project +theme/*.sublime-workspace +theme/.idea +theme/.vscode +theme/node_modules/ diff --git a/.husky/.gitignore b/.husky/.gitignore index 31354ec..7517305 100644 --- a/.husky/.gitignore +++ b/.husky/.gitignore @@ -1 +1 @@ -_ +_ diff --git a/.husky/commit-msg b/.husky/commit-msg index e8511ea..5560eac 100755 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1,4 +1,4 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -npx --no-install commitlint --edit $1 +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +npx --no-install commitlint --edit $1 diff --git a/.husky/pre-commit b/.husky/pre-commit index d37daa0..21252a3 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,4 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -npx --no-install lint-staged +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +npx --no-install lint-staged diff --git a/.mocharc.yml b/.mocharc.yml index 39a95db..3824dd5 100644 --- a/.mocharc.yml +++ b/.mocharc.yml @@ -1,4 +1,4 @@ -reporter: dot # For a more verbose display - spec -timeout: 25000 -exit: true -bail: true +reporter: dot # For a more verbose display - spec +timeout: 25000 +exit: true +bail: true diff --git a/.tx/config b/.tx/config index c988eff..fc5f4e6 100644 --- a/.tx/config +++ b/.tx/config @@ -1,3746 +1,3746 @@ -[main] -host = https://www.transifex.com - -[o:nodebb:p:nodebb:r:admin-admin] -file_filter = public/language//admin/admin.json -source_file = public/language/en-GB/admin/admin.json -source_lang = en_GB -type = KEYVALUEJSON -trans.pt_BR = public/language/pt-BR/admin/admin.json -trans.en@pirate = public/language/en-x-pirate/admin/admin.json -trans.hy = public/language/hy/admin/admin.json -trans.pl = public/language/pl/admin/admin.json -trans.th = public/language/th/admin/admin.json -trans.de = public/language/de/admin/admin.json -trans.el = public/language/el/admin/admin.json -trans.ar = public/language/ar/admin/admin.json -trans.bg = public/language/bg/admin/admin.json -trans.bn = public/language/bn/admin/admin.json -trans.it = public/language/it/admin/admin.json -trans.lv = public/language/lv/admin/admin.json -trans.nl = public/language/nl/admin/admin.json -trans.ru = public/language/ru/admin/admin.json -trans.sr = public/language/sr/admin/admin.json -trans.sv = public/language/sv/admin/admin.json -trans.uk = public/language/uk/admin/admin.json -trans.zh_CN = public/language/zh-CN/admin/admin.json -trans.fa_IR = public/language/fa-IR/admin/admin.json -trans.id = public/language/id/admin/admin.json -trans.ms = public/language/ms/admin/admin.json -trans.nb = public/language/nb/admin/admin.json -trans.sk = public/language/sk/admin/admin.json -trans.cs = public/language/cs/admin/admin.json -trans.fi = public/language/fi/admin/admin.json -trans.fr = public/language/fr/admin/admin.json -trans.rw = public/language/rw/admin/admin.json -trans.sq_AL = public/language/sq-AL/admin/admin.json -trans.en_US = public/language/en-US/admin/admin.json -trans.es = public/language/es/admin/admin.json -trans.et = public/language/et/admin/admin.json -trans.gl = public/language/gl/admin/admin.json -trans.he = public/language/he/admin/admin.json -trans.ja = public/language/ja/admin/admin.json -trans.lt = public/language/lt/admin/admin.json -trans.pt_PT = public/language/pt-PT/admin/admin.json -trans.sc = public/language/sc/admin/admin.json -trans.sl = public/language/sl/admin/admin.json -trans.vi = public/language/vi/admin/admin.json -trans.da = public/language/da/admin/admin.json -trans.hr = public/language/hr/admin/admin.json -trans.hu = public/language/hu/admin/admin.json -trans.ko = public/language/ko/admin/admin.json -trans.ro = public/language/ro/admin/admin.json -trans.tr = public/language/tr/admin/admin.json -trans.zh_TW = public/language/zh-TW/admin/admin.json - -[o:nodebb:p:nodebb:r:admin-advanced-cache] -file_filter = public/language//admin/advanced/cache.json -source_file = public/language/en-GB/admin/advanced/cache.json -source_lang = en_GB -type = KEYVALUEJSON -trans.fa_IR = public/language/fa-IR/admin/advanced/cache.json -trans.he = public/language/he/admin/advanced/cache.json -trans.ko = public/language/ko/admin/advanced/cache.json -trans.pt_PT = public/language/pt-PT/admin/advanced/cache.json -trans.rw = public/language/rw/admin/advanced/cache.json -trans.tr = public/language/tr/admin/advanced/cache.json -trans.en_US = public/language/en-US/admin/advanced/cache.json -trans.hu = public/language/hu/admin/advanced/cache.json -trans.id = public/language/id/admin/advanced/cache.json -trans.ms = public/language/ms/admin/advanced/cache.json -trans.sc = public/language/sc/admin/advanced/cache.json -trans.sv = public/language/sv/admin/advanced/cache.json -trans.es = public/language/es/admin/advanced/cache.json -trans.gl = public/language/gl/admin/advanced/cache.json -trans.lv = public/language/lv/admin/advanced/cache.json -trans.nl = public/language/nl/admin/advanced/cache.json -trans.ru = public/language/ru/admin/advanced/cache.json -trans.zh_TW = public/language/zh-TW/admin/advanced/cache.json -trans.bn = public/language/bn/admin/advanced/cache.json -trans.en@pirate = public/language/en-x-pirate/admin/advanced/cache.json -trans.fr = public/language/fr/admin/advanced/cache.json -trans.hr = public/language/hr/admin/advanced/cache.json -trans.pt_BR = public/language/pt-BR/admin/advanced/cache.json -trans.ar = public/language/ar/admin/advanced/cache.json -trans.bg = public/language/bg/admin/advanced/cache.json -trans.cs = public/language/cs/admin/advanced/cache.json -trans.lt = public/language/lt/admin/advanced/cache.json -trans.nb = public/language/nb/admin/advanced/cache.json -trans.uk = public/language/uk/admin/advanced/cache.json -trans.el = public/language/el/admin/advanced/cache.json -trans.pl = public/language/pl/admin/advanced/cache.json -trans.sr = public/language/sr/admin/advanced/cache.json -trans.da = public/language/da/admin/advanced/cache.json -trans.et = public/language/et/admin/advanced/cache.json -trans.fi = public/language/fi/admin/advanced/cache.json -trans.hy = public/language/hy/admin/advanced/cache.json -trans.ja = public/language/ja/admin/advanced/cache.json -trans.sl = public/language/sl/admin/advanced/cache.json -trans.sq_AL = public/language/sq-AL/admin/advanced/cache.json -trans.th = public/language/th/admin/advanced/cache.json -trans.de = public/language/de/admin/advanced/cache.json -trans.it = public/language/it/admin/advanced/cache.json -trans.ro = public/language/ro/admin/advanced/cache.json -trans.sk = public/language/sk/admin/advanced/cache.json -trans.vi = public/language/vi/admin/advanced/cache.json -trans.zh_CN = public/language/zh-CN/admin/advanced/cache.json - -[o:nodebb:p:nodebb:r:admin-advanced-database] -file_filter = public/language//admin/advanced/database.json -source_file = public/language/en-GB/admin/advanced/database.json -source_lang = en_GB -type = KEYVALUEJSON -trans.fr = public/language/fr/admin/advanced/database.json -trans.he = public/language/he/admin/advanced/database.json -trans.ja = public/language/ja/admin/advanced/database.json -trans.lv = public/language/lv/admin/advanced/database.json -trans.pt_PT = public/language/pt-PT/admin/advanced/database.json -trans.en_US = public/language/en-US/admin/advanced/database.json -trans.el = public/language/el/admin/advanced/database.json -trans.tr = public/language/tr/admin/advanced/database.json -trans.zh_CN = public/language/zh-CN/admin/advanced/database.json -trans.ar = public/language/ar/admin/advanced/database.json -trans.hr = public/language/hr/admin/advanced/database.json -trans.lt = public/language/lt/admin/advanced/database.json -trans.ro = public/language/ro/admin/advanced/database.json -trans.zh_TW = public/language/zh-TW/admin/advanced/database.json -trans.gl = public/language/gl/admin/advanced/database.json -trans.it = public/language/it/admin/advanced/database.json -trans.nb = public/language/nb/admin/advanced/database.json -trans.bn = public/language/bn/admin/advanced/database.json -trans.da = public/language/da/admin/advanced/database.json -trans.de = public/language/de/admin/advanced/database.json -trans.en@pirate = public/language/en-x-pirate/admin/advanced/database.json -trans.hu = public/language/hu/admin/advanced/database.json -trans.hy = public/language/hy/admin/advanced/database.json -trans.id = public/language/id/admin/advanced/database.json -trans.nl = public/language/nl/admin/advanced/database.json -trans.cs = public/language/cs/admin/advanced/database.json -trans.sv = public/language/sv/admin/advanced/database.json -trans.sr = public/language/sr/admin/advanced/database.json -trans.pl = public/language/pl/admin/advanced/database.json -trans.ru = public/language/ru/admin/advanced/database.json -trans.sc = public/language/sc/admin/advanced/database.json -trans.sl = public/language/sl/admin/advanced/database.json -trans.sq_AL = public/language/sq-AL/admin/advanced/database.json -trans.th = public/language/th/admin/advanced/database.json -trans.et = public/language/et/admin/advanced/database.json -trans.fa_IR = public/language/fa-IR/admin/advanced/database.json -trans.ko = public/language/ko/admin/advanced/database.json -trans.sk = public/language/sk/admin/advanced/database.json -trans.vi = public/language/vi/admin/advanced/database.json -trans.es = public/language/es/admin/advanced/database.json -trans.fi = public/language/fi/admin/advanced/database.json -trans.ms = public/language/ms/admin/advanced/database.json -trans.pt_BR = public/language/pt-BR/admin/advanced/database.json -trans.rw = public/language/rw/admin/advanced/database.json -trans.uk = public/language/uk/admin/advanced/database.json -trans.bg = public/language/bg/admin/advanced/database.json - -[o:nodebb:p:nodebb:r:admin-advanced-errors] -file_filter = public/language//admin/advanced/errors.json -source_file = public/language/en-GB/admin/advanced/errors.json -source_lang = en_GB -type = KEYVALUEJSON -trans.cs = public/language/cs/admin/advanced/errors.json -trans.en_US = public/language/en-US/admin/advanced/errors.json -trans.es = public/language/es/admin/advanced/errors.json -trans.pl = public/language/pl/admin/advanced/errors.json -trans.sk = public/language/sk/admin/advanced/errors.json -trans.uk = public/language/uk/admin/advanced/errors.json -trans.da = public/language/da/admin/advanced/errors.json -trans.gl = public/language/gl/admin/advanced/errors.json -trans.hu = public/language/hu/admin/advanced/errors.json -trans.pt_PT = public/language/pt-PT/admin/advanced/errors.json -trans.vi = public/language/vi/admin/advanced/errors.json -trans.de = public/language/de/admin/advanced/errors.json -trans.ko = public/language/ko/admin/advanced/errors.json -trans.nb = public/language/nb/admin/advanced/errors.json -trans.sc = public/language/sc/admin/advanced/errors.json -trans.sl = public/language/sl/admin/advanced/errors.json -trans.tr = public/language/tr/admin/advanced/errors.json -trans.zh_CN = public/language/zh-CN/admin/advanced/errors.json -trans.fr = public/language/fr/admin/advanced/errors.json -trans.hy = public/language/hy/admin/advanced/errors.json -trans.pt_BR = public/language/pt-BR/admin/advanced/errors.json -trans.ro = public/language/ro/admin/advanced/errors.json -trans.sr = public/language/sr/admin/advanced/errors.json -trans.sv = public/language/sv/admin/advanced/errors.json -trans.fa_IR = public/language/fa-IR/admin/advanced/errors.json -trans.it = public/language/it/admin/advanced/errors.json -trans.lt = public/language/lt/admin/advanced/errors.json -trans.ms = public/language/ms/admin/advanced/errors.json -trans.ru = public/language/ru/admin/advanced/errors.json -trans.sq_AL = public/language/sq-AL/admin/advanced/errors.json -trans.ar = public/language/ar/admin/advanced/errors.json -trans.fi = public/language/fi/admin/advanced/errors.json -trans.he = public/language/he/admin/advanced/errors.json -trans.ja = public/language/ja/admin/advanced/errors.json -trans.th = public/language/th/admin/advanced/errors.json -trans.zh_TW = public/language/zh-TW/admin/advanced/errors.json -trans.bn = public/language/bn/admin/advanced/errors.json -trans.en@pirate = public/language/en-x-pirate/admin/advanced/errors.json -trans.hr = public/language/hr/admin/advanced/errors.json -trans.rw = public/language/rw/admin/advanced/errors.json -trans.bg = public/language/bg/admin/advanced/errors.json -trans.el = public/language/el/admin/advanced/errors.json -trans.et = public/language/et/admin/advanced/errors.json -trans.id = public/language/id/admin/advanced/errors.json -trans.lv = public/language/lv/admin/advanced/errors.json -trans.nl = public/language/nl/admin/advanced/errors.json - -[o:nodebb:p:nodebb:r:admin-advanced-events] -file_filter = public/language//admin/advanced/events.json -source_file = public/language/en-GB/admin/advanced/events.json -source_lang = en_GB -type = KEYVALUEJSON -trans.bg = public/language/bg/admin/advanced/events.json -trans.el = public/language/el/admin/advanced/events.json -trans.lt = public/language/lt/admin/advanced/events.json -trans.pt_BR = public/language/pt-BR/admin/advanced/events.json -trans.zh_TW = public/language/zh-TW/admin/advanced/events.json -trans.th = public/language/th/admin/advanced/events.json -trans.gl = public/language/gl/admin/advanced/events.json -trans.ko = public/language/ko/admin/advanced/events.json -trans.nl = public/language/nl/admin/advanced/events.json -trans.ro = public/language/ro/admin/advanced/events.json -trans.sl = public/language/sl/admin/advanced/events.json -trans.ar = public/language/ar/admin/advanced/events.json -trans.hr = public/language/hr/admin/advanced/events.json -trans.vi = public/language/vi/admin/advanced/events.json -trans.fa_IR = public/language/fa-IR/admin/advanced/events.json -trans.ms = public/language/ms/admin/advanced/events.json -trans.tr = public/language/tr/admin/advanced/events.json -trans.nb = public/language/nb/admin/advanced/events.json -trans.pt_PT = public/language/pt-PT/admin/advanced/events.json -trans.sk = public/language/sk/admin/advanced/events.json -trans.en@pirate = public/language/en-x-pirate/admin/advanced/events.json -trans.es = public/language/es/admin/advanced/events.json -trans.et = public/language/et/admin/advanced/events.json -trans.he = public/language/he/admin/advanced/events.json -trans.lv = public/language/lv/admin/advanced/events.json -trans.sv = public/language/sv/admin/advanced/events.json -trans.zh_CN = public/language/zh-CN/admin/advanced/events.json -trans.pl = public/language/pl/admin/advanced/events.json -trans.rw = public/language/rw/admin/advanced/events.json -trans.cs = public/language/cs/admin/advanced/events.json -trans.de = public/language/de/admin/advanced/events.json -trans.fr = public/language/fr/admin/advanced/events.json -trans.hy = public/language/hy/admin/advanced/events.json -trans.id = public/language/id/admin/advanced/events.json -trans.ru = public/language/ru/admin/advanced/events.json -trans.sq_AL = public/language/sq-AL/admin/advanced/events.json -trans.uk = public/language/uk/admin/advanced/events.json -trans.da = public/language/da/admin/advanced/events.json -trans.en_US = public/language/en-US/admin/advanced/events.json -trans.hu = public/language/hu/admin/advanced/events.json -trans.it = public/language/it/admin/advanced/events.json -trans.ja = public/language/ja/admin/advanced/events.json -trans.bn = public/language/bn/admin/advanced/events.json -trans.fi = public/language/fi/admin/advanced/events.json -trans.sc = public/language/sc/admin/advanced/events.json -trans.sr = public/language/sr/admin/advanced/events.json - -[o:nodebb:p:nodebb:r:admin-advanced-logs] -file_filter = public/language//admin/advanced/logs.json -source_file = public/language/en-GB/admin/advanced/logs.json -source_lang = en_GB -type = KEYVALUEJSON -trans.nl = public/language/nl/admin/advanced/logs.json -trans.ru = public/language/ru/admin/advanced/logs.json -trans.vi = public/language/vi/admin/advanced/logs.json -trans.id = public/language/id/admin/advanced/logs.json -trans.fi = public/language/fi/admin/advanced/logs.json -trans.he = public/language/he/admin/advanced/logs.json -trans.hr = public/language/hr/admin/advanced/logs.json -trans.ja = public/language/ja/admin/advanced/logs.json -trans.lt = public/language/lt/admin/advanced/logs.json -trans.nb = public/language/nb/admin/advanced/logs.json -trans.rw = public/language/rw/admin/advanced/logs.json -trans.es = public/language/es/admin/advanced/logs.json -trans.sv = public/language/sv/admin/advanced/logs.json -trans.fa_IR = public/language/fa-IR/admin/advanced/logs.json -trans.fr = public/language/fr/admin/advanced/logs.json -trans.gl = public/language/gl/admin/advanced/logs.json -trans.zh_TW = public/language/zh-TW/admin/advanced/logs.json -trans.en@pirate = public/language/en-x-pirate/admin/advanced/logs.json -trans.sc = public/language/sc/admin/advanced/logs.json -trans.sq_AL = public/language/sq-AL/admin/advanced/logs.json -trans.uk = public/language/uk/admin/advanced/logs.json -trans.hu = public/language/hu/admin/advanced/logs.json -trans.bn = public/language/bn/admin/advanced/logs.json -trans.de = public/language/de/admin/advanced/logs.json -trans.it = public/language/it/admin/advanced/logs.json -trans.lv = public/language/lv/admin/advanced/logs.json -trans.ms = public/language/ms/admin/advanced/logs.json -trans.pl = public/language/pl/admin/advanced/logs.json -trans.zh_CN = public/language/zh-CN/admin/advanced/logs.json -trans.ar = public/language/ar/admin/advanced/logs.json -trans.et = public/language/et/admin/advanced/logs.json -trans.hy = public/language/hy/admin/advanced/logs.json -trans.ko = public/language/ko/admin/advanced/logs.json -trans.th = public/language/th/admin/advanced/logs.json -trans.tr = public/language/tr/admin/advanced/logs.json -trans.cs = public/language/cs/admin/advanced/logs.json -trans.ro = public/language/ro/admin/advanced/logs.json -trans.pt_BR = public/language/pt-BR/admin/advanced/logs.json -trans.da = public/language/da/admin/advanced/logs.json -trans.el = public/language/el/admin/advanced/logs.json -trans.en_US = public/language/en-US/admin/advanced/logs.json -trans.pt_PT = public/language/pt-PT/admin/advanced/logs.json -trans.sk = public/language/sk/admin/advanced/logs.json -trans.sl = public/language/sl/admin/advanced/logs.json -trans.sr = public/language/sr/admin/advanced/logs.json -trans.bg = public/language/bg/admin/advanced/logs.json - -[o:nodebb:p:nodebb:r:admin-appearance-customise] -file_filter = public/language//admin/appearance/customise.json -source_file = public/language/en-GB/admin/appearance/customise.json -source_lang = en_GB -type = KEYVALUEJSON -trans.cs = public/language/cs/admin/appearance/customise.json -trans.da = public/language/da/admin/appearance/customise.json -trans.es = public/language/es/admin/appearance/customise.json -trans.hy = public/language/hy/admin/appearance/customise.json -trans.th = public/language/th/admin/appearance/customise.json -trans.ar = public/language/ar/admin/appearance/customise.json -trans.bg = public/language/bg/admin/appearance/customise.json -trans.he = public/language/he/admin/appearance/customise.json -trans.lt = public/language/lt/admin/appearance/customise.json -trans.nb = public/language/nb/admin/appearance/customise.json -trans.pl = public/language/pl/admin/appearance/customise.json -trans.sl = public/language/sl/admin/appearance/customise.json -trans.zh_TW = public/language/zh-TW/admin/appearance/customise.json -trans.bn = public/language/bn/admin/appearance/customise.json -trans.el = public/language/el/admin/appearance/customise.json -trans.hu = public/language/hu/admin/appearance/customise.json -trans.sk = public/language/sk/admin/appearance/customise.json -trans.tr = public/language/tr/admin/appearance/customise.json -trans.et = public/language/et/admin/appearance/customise.json -trans.id = public/language/id/admin/appearance/customise.json -trans.lv = public/language/lv/admin/appearance/customise.json -trans.pt_BR = public/language/pt-BR/admin/appearance/customise.json -trans.sr = public/language/sr/admin/appearance/customise.json -trans.zh_CN = public/language/zh-CN/admin/appearance/customise.json -trans.fr = public/language/fr/admin/appearance/customise.json -trans.hr = public/language/hr/admin/appearance/customise.json -trans.it = public/language/it/admin/appearance/customise.json -trans.nl = public/language/nl/admin/appearance/customise.json -trans.sv = public/language/sv/admin/appearance/customise.json -trans.fi = public/language/fi/admin/appearance/customise.json -trans.gl = public/language/gl/admin/appearance/customise.json -trans.ko = public/language/ko/admin/appearance/customise.json -trans.sc = public/language/sc/admin/appearance/customise.json -trans.de = public/language/de/admin/appearance/customise.json -trans.en_US = public/language/en-US/admin/appearance/customise.json -trans.ja = public/language/ja/admin/appearance/customise.json -trans.ru = public/language/ru/admin/appearance/customise.json -trans.rw = public/language/rw/admin/appearance/customise.json -trans.vi = public/language/vi/admin/appearance/customise.json -trans.en@pirate = public/language/en-x-pirate/admin/appearance/customise.json -trans.fa_IR = public/language/fa-IR/admin/appearance/customise.json -trans.ms = public/language/ms/admin/appearance/customise.json -trans.pt_PT = public/language/pt-PT/admin/appearance/customise.json -trans.ro = public/language/ro/admin/appearance/customise.json -trans.sq_AL = public/language/sq-AL/admin/appearance/customise.json -trans.uk = public/language/uk/admin/appearance/customise.json - -[o:nodebb:p:nodebb:r:admin-appearance-skins] -file_filter = public/language//admin/appearance/skins.json -source_file = public/language/en-GB/admin/appearance/skins.json -source_lang = en_GB -type = KEYVALUEJSON -trans.et = public/language/et/admin/appearance/skins.json -trans.he = public/language/he/admin/appearance/skins.json -trans.hr = public/language/hr/admin/appearance/skins.json -trans.sc = public/language/sc/admin/appearance/skins.json -trans.sk = public/language/sk/admin/appearance/skins.json -trans.uk = public/language/uk/admin/appearance/skins.json -trans.vi = public/language/vi/admin/appearance/skins.json -trans.bn = public/language/bn/admin/appearance/skins.json -trans.ms = public/language/ms/admin/appearance/skins.json -trans.pl = public/language/pl/admin/appearance/skins.json -trans.sv = public/language/sv/admin/appearance/skins.json -trans.fi = public/language/fi/admin/appearance/skins.json -trans.da = public/language/da/admin/appearance/skins.json -trans.hu = public/language/hu/admin/appearance/skins.json -trans.hy = public/language/hy/admin/appearance/skins.json -trans.id = public/language/id/admin/appearance/skins.json -trans.lv = public/language/lv/admin/appearance/skins.json -trans.sq_AL = public/language/sq-AL/admin/appearance/skins.json -trans.cs = public/language/cs/admin/appearance/skins.json -trans.de = public/language/de/admin/appearance/skins.json -trans.ko = public/language/ko/admin/appearance/skins.json -trans.sl = public/language/sl/admin/appearance/skins.json -trans.zh_TW = public/language/zh-TW/admin/appearance/skins.json -trans.bg = public/language/bg/admin/appearance/skins.json -trans.en_US = public/language/en-US/admin/appearance/skins.json -trans.es = public/language/es/admin/appearance/skins.json -trans.sr = public/language/sr/admin/appearance/skins.json -trans.zh_CN = public/language/zh-CN/admin/appearance/skins.json -trans.en@pirate = public/language/en-x-pirate/admin/appearance/skins.json -trans.it = public/language/it/admin/appearance/skins.json -trans.ja = public/language/ja/admin/appearance/skins.json -trans.nb = public/language/nb/admin/appearance/skins.json -trans.fr = public/language/fr/admin/appearance/skins.json -trans.fa_IR = public/language/fa-IR/admin/appearance/skins.json -trans.gl = public/language/gl/admin/appearance/skins.json -trans.ro = public/language/ro/admin/appearance/skins.json -trans.ru = public/language/ru/admin/appearance/skins.json -trans.rw = public/language/rw/admin/appearance/skins.json -trans.el = public/language/el/admin/appearance/skins.json -trans.lt = public/language/lt/admin/appearance/skins.json -trans.nl = public/language/nl/admin/appearance/skins.json -trans.pt_BR = public/language/pt-BR/admin/appearance/skins.json -trans.pt_PT = public/language/pt-PT/admin/appearance/skins.json -trans.th = public/language/th/admin/appearance/skins.json -trans.tr = public/language/tr/admin/appearance/skins.json -trans.ar = public/language/ar/admin/appearance/skins.json - -[o:nodebb:p:nodebb:r:admin-appearance-themes] -file_filter = public/language//admin/appearance/themes.json -source_file = public/language/en-GB/admin/appearance/themes.json -source_lang = en_GB -type = KEYVALUEJSON -trans.sq_AL = public/language/sq-AL/admin/appearance/themes.json -trans.ar = public/language/ar/admin/appearance/themes.json -trans.bg = public/language/bg/admin/appearance/themes.json -trans.bn = public/language/bn/admin/appearance/themes.json -trans.en_US = public/language/en-US/admin/appearance/themes.json -trans.fa_IR = public/language/fa-IR/admin/appearance/themes.json -trans.pt_BR = public/language/pt-BR/admin/appearance/themes.json -trans.ru = public/language/ru/admin/appearance/themes.json -trans.sv = public/language/sv/admin/appearance/themes.json -trans.cs = public/language/cs/admin/appearance/themes.json -trans.da = public/language/da/admin/appearance/themes.json -trans.sk = public/language/sk/admin/appearance/themes.json -trans.zh_CN = public/language/zh-CN/admin/appearance/themes.json -trans.et = public/language/et/admin/appearance/themes.json -trans.ja = public/language/ja/admin/appearance/themes.json -trans.sl = public/language/sl/admin/appearance/themes.json -trans.sr = public/language/sr/admin/appearance/themes.json -trans.hr = public/language/hr/admin/appearance/themes.json -trans.hu = public/language/hu/admin/appearance/themes.json -trans.ms = public/language/ms/admin/appearance/themes.json -trans.sc = public/language/sc/admin/appearance/themes.json -trans.th = public/language/th/admin/appearance/themes.json -trans.lt = public/language/lt/admin/appearance/themes.json -trans.el = public/language/el/admin/appearance/themes.json -trans.en@pirate = public/language/en-x-pirate/admin/appearance/themes.json -trans.fi = public/language/fi/admin/appearance/themes.json -trans.he = public/language/he/admin/appearance/themes.json -trans.hy = public/language/hy/admin/appearance/themes.json -trans.id = public/language/id/admin/appearance/themes.json -trans.ko = public/language/ko/admin/appearance/themes.json -trans.nb = public/language/nb/admin/appearance/themes.json -trans.pl = public/language/pl/admin/appearance/themes.json -trans.pt_PT = public/language/pt-PT/admin/appearance/themes.json -trans.tr = public/language/tr/admin/appearance/themes.json -trans.fr = public/language/fr/admin/appearance/themes.json -trans.nl = public/language/nl/admin/appearance/themes.json -trans.ro = public/language/ro/admin/appearance/themes.json -trans.uk = public/language/uk/admin/appearance/themes.json -trans.de = public/language/de/admin/appearance/themes.json -trans.es = public/language/es/admin/appearance/themes.json -trans.gl = public/language/gl/admin/appearance/themes.json -trans.it = public/language/it/admin/appearance/themes.json -trans.lv = public/language/lv/admin/appearance/themes.json -trans.vi = public/language/vi/admin/appearance/themes.json -trans.rw = public/language/rw/admin/appearance/themes.json -trans.zh_TW = public/language/zh-TW/admin/appearance/themes.json - -[o:nodebb:p:nodebb:r:admin-dashboard] -file_filter = public/language//admin/dashboard.json -source_file = public/language/en-GB/admin/dashboard.json -source_lang = en_GB -type = KEYVALUEJSON -trans.bn = public/language/bn/admin/dashboard.json -trans.en_US = public/language/en-US/admin/dashboard.json -trans.fa_IR = public/language/fa-IR/admin/dashboard.json -trans.fr = public/language/fr/admin/dashboard.json -trans.hu = public/language/hu/admin/dashboard.json -trans.nl = public/language/nl/admin/dashboard.json -trans.pl = public/language/pl/admin/dashboard.json -trans.bg = public/language/bg/admin/dashboard.json -trans.el = public/language/el/admin/dashboard.json -trans.gl = public/language/gl/admin/dashboard.json -trans.hy = public/language/hy/admin/dashboard.json -trans.id = public/language/id/admin/dashboard.json -trans.ja = public/language/ja/admin/dashboard.json -trans.pt_BR = public/language/pt-BR/admin/dashboard.json -trans.zh_CN = public/language/zh-CN/admin/dashboard.json -trans.zh_TW = public/language/zh-TW/admin/dashboard.json -trans.uk = public/language/uk/admin/dashboard.json -trans.ar = public/language/ar/admin/dashboard.json -trans.de = public/language/de/admin/dashboard.json -trans.en@pirate = public/language/en-x-pirate/admin/dashboard.json -trans.es = public/language/es/admin/dashboard.json -trans.ko = public/language/ko/admin/dashboard.json -trans.sv = public/language/sv/admin/dashboard.json -trans.lv = public/language/lv/admin/dashboard.json -trans.ms = public/language/ms/admin/dashboard.json -trans.ru = public/language/ru/admin/dashboard.json -trans.sl = public/language/sl/admin/dashboard.json -trans.sq_AL = public/language/sq-AL/admin/dashboard.json -trans.da = public/language/da/admin/dashboard.json -trans.lt = public/language/lt/admin/dashboard.json -trans.he = public/language/he/admin/dashboard.json -trans.sr = public/language/sr/admin/dashboard.json -trans.vi = public/language/vi/admin/dashboard.json -trans.pt_PT = public/language/pt-PT/admin/dashboard.json -trans.ro = public/language/ro/admin/dashboard.json -trans.rw = public/language/rw/admin/dashboard.json -trans.sc = public/language/sc/admin/dashboard.json -trans.th = public/language/th/admin/dashboard.json -trans.sk = public/language/sk/admin/dashboard.json -trans.tr = public/language/tr/admin/dashboard.json -trans.cs = public/language/cs/admin/dashboard.json -trans.et = public/language/et/admin/dashboard.json -trans.fi = public/language/fi/admin/dashboard.json -trans.hr = public/language/hr/admin/dashboard.json -trans.it = public/language/it/admin/dashboard.json -trans.nb = public/language/nb/admin/dashboard.json - -[o:nodebb:p:nodebb:r:admin-development-info] -file_filter = public/language//admin/development/info.json -source_file = public/language/en-GB/admin/development/info.json -source_lang = en_GB -type = KEYVALUEJSON -trans.de = public/language/de/admin/development/info.json -trans.et = public/language/et/admin/development/info.json -trans.hr = public/language/hr/admin/development/info.json -trans.ms = public/language/ms/admin/development/info.json -trans.pl = public/language/pl/admin/development/info.json -trans.pt_BR = public/language/pt-BR/admin/development/info.json -trans.ro = public/language/ro/admin/development/info.json -trans.rw = public/language/rw/admin/development/info.json -trans.sl = public/language/sl/admin/development/info.json -trans.sr = public/language/sr/admin/development/info.json -trans.uk = public/language/uk/admin/development/info.json -trans.da = public/language/da/admin/development/info.json -trans.en@pirate = public/language/en-x-pirate/admin/development/info.json -trans.es = public/language/es/admin/development/info.json -trans.fi = public/language/fi/admin/development/info.json -trans.it = public/language/it/admin/development/info.json -trans.lt = public/language/lt/admin/development/info.json -trans.th = public/language/th/admin/development/info.json -trans.ar = public/language/ar/admin/development/info.json -trans.bn = public/language/bn/admin/development/info.json -trans.fa_IR = public/language/fa-IR/admin/development/info.json -trans.hu = public/language/hu/admin/development/info.json -trans.id = public/language/id/admin/development/info.json -trans.lv = public/language/lv/admin/development/info.json -trans.gl = public/language/gl/admin/development/info.json -trans.hy = public/language/hy/admin/development/info.json -trans.zh_CN = public/language/zh-CN/admin/development/info.json -trans.cs = public/language/cs/admin/development/info.json -trans.ja = public/language/ja/admin/development/info.json -trans.nb = public/language/nb/admin/development/info.json -trans.sq_AL = public/language/sq-AL/admin/development/info.json -trans.sv = public/language/sv/admin/development/info.json -trans.bg = public/language/bg/admin/development/info.json -trans.he = public/language/he/admin/development/info.json -trans.sk = public/language/sk/admin/development/info.json -trans.el = public/language/el/admin/development/info.json -trans.fr = public/language/fr/admin/development/info.json -trans.ru = public/language/ru/admin/development/info.json -trans.sc = public/language/sc/admin/development/info.json -trans.tr = public/language/tr/admin/development/info.json -trans.en_US = public/language/en-US/admin/development/info.json -trans.ko = public/language/ko/admin/development/info.json -trans.nl = public/language/nl/admin/development/info.json -trans.pt_PT = public/language/pt-PT/admin/development/info.json -trans.vi = public/language/vi/admin/development/info.json -trans.zh_TW = public/language/zh-TW/admin/development/info.json - -[o:nodebb:p:nodebb:r:admin-development-logger] -file_filter = public/language//admin/development/logger.json -source_file = public/language/en-GB/admin/development/logger.json -source_lang = en_GB -type = KEYVALUEJSON -trans.de = public/language/de/admin/development/logger.json -trans.fr = public/language/fr/admin/development/logger.json -trans.gl = public/language/gl/admin/development/logger.json -trans.hr = public/language/hr/admin/development/logger.json -trans.sl = public/language/sl/admin/development/logger.json -trans.vi = public/language/vi/admin/development/logger.json -trans.zh_TW = public/language/zh-TW/admin/development/logger.json -trans.ar = public/language/ar/admin/development/logger.json -trans.he = public/language/he/admin/development/logger.json -trans.id = public/language/id/admin/development/logger.json -trans.ko = public/language/ko/admin/development/logger.json -trans.lt = public/language/lt/admin/development/logger.json -trans.nb = public/language/nb/admin/development/logger.json -trans.pt_BR = public/language/pt-BR/admin/development/logger.json -trans.ro = public/language/ro/admin/development/logger.json -trans.fi = public/language/fi/admin/development/logger.json -trans.sc = public/language/sc/admin/development/logger.json -trans.ru = public/language/ru/admin/development/logger.json -trans.sq_AL = public/language/sq-AL/admin/development/logger.json -trans.th = public/language/th/admin/development/logger.json -trans.hy = public/language/hy/admin/development/logger.json -trans.fa_IR = public/language/fa-IR/admin/development/logger.json -trans.it = public/language/it/admin/development/logger.json -trans.lv = public/language/lv/admin/development/logger.json -trans.nl = public/language/nl/admin/development/logger.json -trans.pt_PT = public/language/pt-PT/admin/development/logger.json -trans.sk = public/language/sk/admin/development/logger.json -trans.sv = public/language/sv/admin/development/logger.json -trans.el = public/language/el/admin/development/logger.json -trans.uk = public/language/uk/admin/development/logger.json -trans.ms = public/language/ms/admin/development/logger.json -trans.zh_CN = public/language/zh-CN/admin/development/logger.json -trans.bn = public/language/bn/admin/development/logger.json -trans.et = public/language/et/admin/development/logger.json -trans.ja = public/language/ja/admin/development/logger.json -trans.da = public/language/da/admin/development/logger.json -trans.en@pirate = public/language/en-x-pirate/admin/development/logger.json -trans.es = public/language/es/admin/development/logger.json -trans.cs = public/language/cs/admin/development/logger.json -trans.en_US = public/language/en-US/admin/development/logger.json -trans.hu = public/language/hu/admin/development/logger.json -trans.pl = public/language/pl/admin/development/logger.json -trans.rw = public/language/rw/admin/development/logger.json -trans.sr = public/language/sr/admin/development/logger.json -trans.tr = public/language/tr/admin/development/logger.json -trans.bg = public/language/bg/admin/development/logger.json - -[o:nodebb:p:nodebb:r:admin-extend-plugins] -file_filter = public/language//admin/extend/plugins.json -source_file = public/language/en-GB/admin/extend/plugins.json -source_lang = en_GB -type = KEYVALUEJSON -trans.en@pirate = public/language/en-x-pirate/admin/extend/plugins.json -trans.et = public/language/et/admin/extend/plugins.json -trans.hr = public/language/hr/admin/extend/plugins.json -trans.hy = public/language/hy/admin/extend/plugins.json -trans.tr = public/language/tr/admin/extend/plugins.json -trans.it = public/language/it/admin/extend/plugins.json -trans.lv = public/language/lv/admin/extend/plugins.json -trans.sl = public/language/sl/admin/extend/plugins.json -trans.th = public/language/th/admin/extend/plugins.json -trans.en_US = public/language/en-US/admin/extend/plugins.json -trans.he = public/language/he/admin/extend/plugins.json -trans.nb = public/language/nb/admin/extend/plugins.json -trans.sk = public/language/sk/admin/extend/plugins.json -trans.uk = public/language/uk/admin/extend/plugins.json -trans.es = public/language/es/admin/extend/plugins.json -trans.lt = public/language/lt/admin/extend/plugins.json -trans.sv = public/language/sv/admin/extend/plugins.json -trans.nl = public/language/nl/admin/extend/plugins.json -trans.pt_PT = public/language/pt-PT/admin/extend/plugins.json -trans.ar = public/language/ar/admin/extend/plugins.json -trans.cs = public/language/cs/admin/extend/plugins.json -trans.fi = public/language/fi/admin/extend/plugins.json -trans.id = public/language/id/admin/extend/plugins.json -trans.ja = public/language/ja/admin/extend/plugins.json -trans.ko = public/language/ko/admin/extend/plugins.json -trans.ru = public/language/ru/admin/extend/plugins.json -trans.sr = public/language/sr/admin/extend/plugins.json -trans.bn = public/language/bn/admin/extend/plugins.json -trans.de = public/language/de/admin/extend/plugins.json -trans.el = public/language/el/admin/extend/plugins.json -trans.ms = public/language/ms/admin/extend/plugins.json -trans.pt_BR = public/language/pt-BR/admin/extend/plugins.json -trans.sq_AL = public/language/sq-AL/admin/extend/plugins.json -trans.zh_TW = public/language/zh-TW/admin/extend/plugins.json -trans.da = public/language/da/admin/extend/plugins.json -trans.fa_IR = public/language/fa-IR/admin/extend/plugins.json -trans.gl = public/language/gl/admin/extend/plugins.json -trans.hu = public/language/hu/admin/extend/plugins.json -trans.sc = public/language/sc/admin/extend/plugins.json -trans.vi = public/language/vi/admin/extend/plugins.json -trans.bg = public/language/bg/admin/extend/plugins.json -trans.fr = public/language/fr/admin/extend/plugins.json -trans.pl = public/language/pl/admin/extend/plugins.json -trans.ro = public/language/ro/admin/extend/plugins.json -trans.rw = public/language/rw/admin/extend/plugins.json -trans.zh_CN = public/language/zh-CN/admin/extend/plugins.json - -[o:nodebb:p:nodebb:r:admin-extend-rewards] -file_filter = public/language//admin/extend/rewards.json -source_file = public/language/en-GB/admin/extend/rewards.json -source_lang = en_GB -type = KEYVALUEJSON -trans.ms = public/language/ms/admin/extend/rewards.json -trans.ar = public/language/ar/admin/extend/rewards.json -trans.fi = public/language/fi/admin/extend/rewards.json -trans.fr = public/language/fr/admin/extend/rewards.json -trans.sr = public/language/sr/admin/extend/rewards.json -trans.id = public/language/id/admin/extend/rewards.json -trans.pt_BR = public/language/pt-BR/admin/extend/rewards.json -trans.sq_AL = public/language/sq-AL/admin/extend/rewards.json -trans.pt_PT = public/language/pt-PT/admin/extend/rewards.json -trans.ro = public/language/ro/admin/extend/rewards.json -trans.ru = public/language/ru/admin/extend/rewards.json -trans.sk = public/language/sk/admin/extend/rewards.json -trans.es = public/language/es/admin/extend/rewards.json -trans.lt = public/language/lt/admin/extend/rewards.json -trans.nl = public/language/nl/admin/extend/rewards.json -trans.en@pirate = public/language/en-x-pirate/admin/extend/rewards.json -trans.hr = public/language/hr/admin/extend/rewards.json -trans.ja = public/language/ja/admin/extend/rewards.json -trans.ko = public/language/ko/admin/extend/rewards.json -trans.nb = public/language/nb/admin/extend/rewards.json -trans.bg = public/language/bg/admin/extend/rewards.json -trans.bn = public/language/bn/admin/extend/rewards.json -trans.da = public/language/da/admin/extend/rewards.json -trans.hy = public/language/hy/admin/extend/rewards.json -trans.pl = public/language/pl/admin/extend/rewards.json -trans.sc = public/language/sc/admin/extend/rewards.json -trans.it = public/language/it/admin/extend/rewards.json -trans.tr = public/language/tr/admin/extend/rewards.json -trans.uk = public/language/uk/admin/extend/rewards.json -trans.vi = public/language/vi/admin/extend/rewards.json -trans.zh_CN = public/language/zh-CN/admin/extend/rewards.json -trans.en_US = public/language/en-US/admin/extend/rewards.json -trans.fa_IR = public/language/fa-IR/admin/extend/rewards.json -trans.he = public/language/he/admin/extend/rewards.json -trans.zh_TW = public/language/zh-TW/admin/extend/rewards.json -trans.lv = public/language/lv/admin/extend/rewards.json -trans.sl = public/language/sl/admin/extend/rewards.json -trans.cs = public/language/cs/admin/extend/rewards.json -trans.el = public/language/el/admin/extend/rewards.json -trans.et = public/language/et/admin/extend/rewards.json -trans.rw = public/language/rw/admin/extend/rewards.json -trans.sv = public/language/sv/admin/extend/rewards.json -trans.th = public/language/th/admin/extend/rewards.json -trans.de = public/language/de/admin/extend/rewards.json -trans.gl = public/language/gl/admin/extend/rewards.json -trans.hu = public/language/hu/admin/extend/rewards.json - -[o:nodebb:p:nodebb:r:admin-extend-widgets] -file_filter = public/language//admin/extend/widgets.json -source_file = public/language/en-GB/admin/extend/widgets.json -source_lang = en_GB -type = KEYVALUEJSON -trans.bn = public/language/bn/admin/extend/widgets.json -trans.el = public/language/el/admin/extend/widgets.json -trans.id = public/language/id/admin/extend/widgets.json -trans.nb = public/language/nb/admin/extend/widgets.json -trans.ro = public/language/ro/admin/extend/widgets.json -trans.rw = public/language/rw/admin/extend/widgets.json -trans.ar = public/language/ar/admin/extend/widgets.json -trans.hy = public/language/hy/admin/extend/widgets.json -trans.lv = public/language/lv/admin/extend/widgets.json -trans.ru = public/language/ru/admin/extend/widgets.json -trans.sc = public/language/sc/admin/extend/widgets.json -trans.sr = public/language/sr/admin/extend/widgets.json -trans.tr = public/language/tr/admin/extend/widgets.json -trans.vi = public/language/vi/admin/extend/widgets.json -trans.fr = public/language/fr/admin/extend/widgets.json -trans.fa_IR = public/language/fa-IR/admin/extend/widgets.json -trans.ko = public/language/ko/admin/extend/widgets.json -trans.lt = public/language/lt/admin/extend/widgets.json -trans.sq_AL = public/language/sq-AL/admin/extend/widgets.json -trans.uk = public/language/uk/admin/extend/widgets.json -trans.bg = public/language/bg/admin/extend/widgets.json -trans.de = public/language/de/admin/extend/widgets.json -trans.ms = public/language/ms/admin/extend/widgets.json -trans.nl = public/language/nl/admin/extend/widgets.json -trans.pt_BR = public/language/pt-BR/admin/extend/widgets.json -trans.sk = public/language/sk/admin/extend/widgets.json -trans.zh_CN = public/language/zh-CN/admin/extend/widgets.json -trans.da = public/language/da/admin/extend/widgets.json -trans.hu = public/language/hu/admin/extend/widgets.json -trans.ja = public/language/ja/admin/extend/widgets.json -trans.th = public/language/th/admin/extend/widgets.json -trans.et = public/language/et/admin/extend/widgets.json -trans.gl = public/language/gl/admin/extend/widgets.json -trans.he = public/language/he/admin/extend/widgets.json -trans.it = public/language/it/admin/extend/widgets.json -trans.pl = public/language/pl/admin/extend/widgets.json -trans.zh_TW = public/language/zh-TW/admin/extend/widgets.json -trans.en@pirate = public/language/en-x-pirate/admin/extend/widgets.json -trans.fi = public/language/fi/admin/extend/widgets.json -trans.hr = public/language/hr/admin/extend/widgets.json -trans.sl = public/language/sl/admin/extend/widgets.json -trans.sv = public/language/sv/admin/extend/widgets.json -trans.cs = public/language/cs/admin/extend/widgets.json -trans.es = public/language/es/admin/extend/widgets.json -trans.pt_PT = public/language/pt-PT/admin/extend/widgets.json -trans.en_US = public/language/en-US/admin/extend/widgets.json - -[o:nodebb:p:nodebb:r:admin-manage-admins-mods] -file_filter = public/language//admin/manage/admins-mods.json -source_file = public/language/en-GB/admin/manage/admins-mods.json -source_lang = en_GB -type = KEYVALUEJSON -trans.hu = public/language/hu/admin/manage/admins-mods.json -trans.nb = public/language/nb/admin/manage/admins-mods.json -trans.ru = public/language/ru/admin/manage/admins-mods.json -trans.fr = public/language/fr/admin/manage/admins-mods.json -trans.he = public/language/he/admin/manage/admins-mods.json -trans.lv = public/language/lv/admin/manage/admins-mods.json -trans.sc = public/language/sc/admin/manage/admins-mods.json -trans.vi = public/language/vi/admin/manage/admins-mods.json -trans.es = public/language/es/admin/manage/admins-mods.json -trans.lt = public/language/lt/admin/manage/admins-mods.json -trans.de = public/language/de/admin/manage/admins-mods.json -trans.ja = public/language/ja/admin/manage/admins-mods.json -trans.pl = public/language/pl/admin/manage/admins-mods.json -trans.sq_AL = public/language/sq-AL/admin/manage/admins-mods.json -trans.sr = public/language/sr/admin/manage/admins-mods.json -trans.zh_TW = public/language/zh-TW/admin/manage/admins-mods.json -trans.id = public/language/id/admin/manage/admins-mods.json -trans.ko = public/language/ko/admin/manage/admins-mods.json -trans.gl = public/language/gl/admin/manage/admins-mods.json -trans.hr = public/language/hr/admin/manage/admins-mods.json -trans.hy = public/language/hy/admin/manage/admins-mods.json -trans.rw = public/language/rw/admin/manage/admins-mods.json -trans.bn = public/language/bn/admin/manage/admins-mods.json -trans.fi = public/language/fi/admin/manage/admins-mods.json -trans.ms = public/language/ms/admin/manage/admins-mods.json -trans.pt_BR = public/language/pt-BR/admin/manage/admins-mods.json -trans.pt_PT = public/language/pt-PT/admin/manage/admins-mods.json -trans.sv = public/language/sv/admin/manage/admins-mods.json -trans.th = public/language/th/admin/manage/admins-mods.json -trans.uk = public/language/uk/admin/manage/admins-mods.json -trans.ar = public/language/ar/admin/manage/admins-mods.json -trans.bg = public/language/bg/admin/manage/admins-mods.json -trans.el = public/language/el/admin/manage/admins-mods.json -trans.en@pirate = public/language/en-x-pirate/admin/manage/admins-mods.json -trans.en_US = public/language/en-US/admin/manage/admins-mods.json -trans.it = public/language/it/admin/manage/admins-mods.json -trans.nl = public/language/nl/admin/manage/admins-mods.json -trans.ro = public/language/ro/admin/manage/admins-mods.json -trans.cs = public/language/cs/admin/manage/admins-mods.json -trans.da = public/language/da/admin/manage/admins-mods.json -trans.zh_CN = public/language/zh-CN/admin/manage/admins-mods.json -trans.sk = public/language/sk/admin/manage/admins-mods.json -trans.sl = public/language/sl/admin/manage/admins-mods.json -trans.tr = public/language/tr/admin/manage/admins-mods.json -trans.et = public/language/et/admin/manage/admins-mods.json -trans.fa_IR = public/language/fa-IR/admin/manage/admins-mods.json - -[o:nodebb:p:nodebb:r:admin-manage-categories] -file_filter = public/language//admin/manage/categories.json -source_file = public/language/en-GB/admin/manage/categories.json -source_lang = en_GB -type = KEYVALUEJSON -trans.es = public/language/es/admin/manage/categories.json -trans.gl = public/language/gl/admin/manage/categories.json -trans.pt_PT = public/language/pt-PT/admin/manage/categories.json -trans.sc = public/language/sc/admin/manage/categories.json -trans.zh_TW = public/language/zh-TW/admin/manage/categories.json -trans.bg = public/language/bg/admin/manage/categories.json -trans.hu = public/language/hu/admin/manage/categories.json -trans.hy = public/language/hy/admin/manage/categories.json -trans.sk = public/language/sk/admin/manage/categories.json -trans.uk = public/language/uk/admin/manage/categories.json -trans.vi = public/language/vi/admin/manage/categories.json -trans.bn = public/language/bn/admin/manage/categories.json -trans.en_US = public/language/en-US/admin/manage/categories.json -trans.fr = public/language/fr/admin/manage/categories.json -trans.it = public/language/it/admin/manage/categories.json -trans.nb = public/language/nb/admin/manage/categories.json -trans.ru = public/language/ru/admin/manage/categories.json -trans.sr = public/language/sr/admin/manage/categories.json -trans.fa_IR = public/language/fa-IR/admin/manage/categories.json -trans.id = public/language/id/admin/manage/categories.json -trans.ms = public/language/ms/admin/manage/categories.json -trans.pl = public/language/pl/admin/manage/categories.json -trans.tr = public/language/tr/admin/manage/categories.json -trans.zh_CN = public/language/zh-CN/admin/manage/categories.json -trans.lt = public/language/lt/admin/manage/categories.json -trans.sl = public/language/sl/admin/manage/categories.json -trans.sv = public/language/sv/admin/manage/categories.json -trans.rw = public/language/rw/admin/manage/categories.json -trans.el = public/language/el/admin/manage/categories.json -trans.et = public/language/et/admin/manage/categories.json -trans.fi = public/language/fi/admin/manage/categories.json -trans.he = public/language/he/admin/manage/categories.json -trans.ja = public/language/ja/admin/manage/categories.json -trans.ko = public/language/ko/admin/manage/categories.json -trans.ro = public/language/ro/admin/manage/categories.json -trans.cs = public/language/cs/admin/manage/categories.json -trans.sq_AL = public/language/sq-AL/admin/manage/categories.json -trans.th = public/language/th/admin/manage/categories.json -trans.pt_BR = public/language/pt-BR/admin/manage/categories.json -trans.ar = public/language/ar/admin/manage/categories.json -trans.da = public/language/da/admin/manage/categories.json -trans.de = public/language/de/admin/manage/categories.json -trans.en@pirate = public/language/en-x-pirate/admin/manage/categories.json -trans.hr = public/language/hr/admin/manage/categories.json -trans.lv = public/language/lv/admin/manage/categories.json -trans.nl = public/language/nl/admin/manage/categories.json - -[o:nodebb:p:nodebb:r:admin-manage-digest] -file_filter = public/language//admin/manage/digest.json -source_file = public/language/en-GB/admin/manage/digest.json -source_lang = en_GB -type = KEYVALUEJSON -trans.sr = public/language/sr/admin/manage/digest.json -trans.fi = public/language/fi/admin/manage/digest.json -trans.gl = public/language/gl/admin/manage/digest.json -trans.fr = public/language/fr/admin/manage/digest.json -trans.hu = public/language/hu/admin/manage/digest.json -trans.id = public/language/id/admin/manage/digest.json -trans.lv = public/language/lv/admin/manage/digest.json -trans.pl = public/language/pl/admin/manage/digest.json -trans.sl = public/language/sl/admin/manage/digest.json -trans.da = public/language/da/admin/manage/digest.json -trans.fa_IR = public/language/fa-IR/admin/manage/digest.json -trans.sq_AL = public/language/sq-AL/admin/manage/digest.json -trans.en@pirate = public/language/en-x-pirate/admin/manage/digest.json -trans.en_US = public/language/en-US/admin/manage/digest.json -trans.he = public/language/he/admin/manage/digest.json -trans.hr = public/language/hr/admin/manage/digest.json -trans.hy = public/language/hy/admin/manage/digest.json -trans.it = public/language/it/admin/manage/digest.json -trans.bg = public/language/bg/admin/manage/digest.json -trans.bn = public/language/bn/admin/manage/digest.json -trans.ro = public/language/ro/admin/manage/digest.json -trans.th = public/language/th/admin/manage/digest.json -trans.uk = public/language/uk/admin/manage/digest.json -trans.vi = public/language/vi/admin/manage/digest.json -trans.ms = public/language/ms/admin/manage/digest.json -trans.pt_BR = public/language/pt-BR/admin/manage/digest.json -trans.rw = public/language/rw/admin/manage/digest.json -trans.de = public/language/de/admin/manage/digest.json -trans.el = public/language/el/admin/manage/digest.json -trans.nl = public/language/nl/admin/manage/digest.json -trans.ru = public/language/ru/admin/manage/digest.json -trans.sv = public/language/sv/admin/manage/digest.json -trans.zh_TW = public/language/zh-TW/admin/manage/digest.json -trans.es = public/language/es/admin/manage/digest.json -trans.lt = public/language/lt/admin/manage/digest.json -trans.ko = public/language/ko/admin/manage/digest.json -trans.zh_CN = public/language/zh-CN/admin/manage/digest.json -trans.ar = public/language/ar/admin/manage/digest.json -trans.ja = public/language/ja/admin/manage/digest.json -trans.nb = public/language/nb/admin/manage/digest.json -trans.sk = public/language/sk/admin/manage/digest.json -trans.pt_PT = public/language/pt-PT/admin/manage/digest.json -trans.sc = public/language/sc/admin/manage/digest.json -trans.tr = public/language/tr/admin/manage/digest.json -trans.cs = public/language/cs/admin/manage/digest.json -trans.et = public/language/et/admin/manage/digest.json - -[o:nodebb:p:nodebb:r:admin-manage-groups] -file_filter = public/language//admin/manage/groups.json -source_file = public/language/en-GB/admin/manage/groups.json -source_lang = en_GB -type = KEYVALUEJSON -trans.pt_PT = public/language/pt-PT/admin/manage/groups.json -trans.tr = public/language/tr/admin/manage/groups.json -trans.uk = public/language/uk/admin/manage/groups.json -trans.zh_TW = public/language/zh-TW/admin/manage/groups.json -trans.nb = public/language/nb/admin/manage/groups.json -trans.id = public/language/id/admin/manage/groups.json -trans.lt = public/language/lt/admin/manage/groups.json -trans.pl = public/language/pl/admin/manage/groups.json -trans.sc = public/language/sc/admin/manage/groups.json -trans.hy = public/language/hy/admin/manage/groups.json -trans.he = public/language/he/admin/manage/groups.json -trans.ko = public/language/ko/admin/manage/groups.json -trans.sv = public/language/sv/admin/manage/groups.json -trans.bn = public/language/bn/admin/manage/groups.json -trans.es = public/language/es/admin/manage/groups.json -trans.ja = public/language/ja/admin/manage/groups.json -trans.th = public/language/th/admin/manage/groups.json -trans.cs = public/language/cs/admin/manage/groups.json -trans.fi = public/language/fi/admin/manage/groups.json -trans.hr = public/language/hr/admin/manage/groups.json -trans.it = public/language/it/admin/manage/groups.json -trans.en@pirate = public/language/en-x-pirate/admin/manage/groups.json -trans.bg = public/language/bg/admin/manage/groups.json -trans.hu = public/language/hu/admin/manage/groups.json -trans.pt_BR = public/language/pt-BR/admin/manage/groups.json -trans.ro = public/language/ro/admin/manage/groups.json -trans.ru = public/language/ru/admin/manage/groups.json -trans.sq_AL = public/language/sq-AL/admin/manage/groups.json -trans.vi = public/language/vi/admin/manage/groups.json -trans.ar = public/language/ar/admin/manage/groups.json -trans.et = public/language/et/admin/manage/groups.json -trans.fa_IR = public/language/fa-IR/admin/manage/groups.json -trans.fr = public/language/fr/admin/manage/groups.json -trans.nl = public/language/nl/admin/manage/groups.json -trans.rw = public/language/rw/admin/manage/groups.json -trans.sl = public/language/sl/admin/manage/groups.json -trans.zh_CN = public/language/zh-CN/admin/manage/groups.json -trans.da = public/language/da/admin/manage/groups.json -trans.el = public/language/el/admin/manage/groups.json -trans.en_US = public/language/en-US/admin/manage/groups.json -trans.gl = public/language/gl/admin/manage/groups.json -trans.lv = public/language/lv/admin/manage/groups.json -trans.ms = public/language/ms/admin/manage/groups.json -trans.sk = public/language/sk/admin/manage/groups.json -trans.sr = public/language/sr/admin/manage/groups.json -trans.de = public/language/de/admin/manage/groups.json - -[o:nodebb:p:nodebb:r:admin-manage-privileges] -file_filter = public/language//admin/manage/privileges.json -source_file = public/language/en-GB/admin/manage/privileges.json -source_lang = en_GB -type = KEYVALUEJSON -trans.bg = public/language/bg/admin/manage/privileges.json -trans.es = public/language/es/admin/manage/privileges.json -trans.fa_IR = public/language/fa-IR/admin/manage/privileges.json -trans.ms = public/language/ms/admin/manage/privileges.json -trans.ro = public/language/ro/admin/manage/privileges.json -trans.sl = public/language/sl/admin/manage/privileges.json -trans.el = public/language/el/admin/manage/privileges.json -trans.lt = public/language/lt/admin/manage/privileges.json -trans.pt_BR = public/language/pt-BR/admin/manage/privileges.json -trans.pt_PT = public/language/pt-PT/admin/manage/privileges.json -trans.hu = public/language/hu/admin/manage/privileges.json -trans.pl = public/language/pl/admin/manage/privileges.json -trans.sc = public/language/sc/admin/manage/privileges.json -trans.uk = public/language/uk/admin/manage/privileges.json -trans.bn = public/language/bn/admin/manage/privileges.json -trans.cs = public/language/cs/admin/manage/privileges.json -trans.da = public/language/da/admin/manage/privileges.json -trans.en@pirate = public/language/en-x-pirate/admin/manage/privileges.json -trans.vi = public/language/vi/admin/manage/privileges.json -trans.en_US = public/language/en-US/admin/manage/privileges.json -trans.hy = public/language/hy/admin/manage/privileges.json -trans.sr = public/language/sr/admin/manage/privileges.json -trans.ja = public/language/ja/admin/manage/privileges.json -trans.nb = public/language/nb/admin/manage/privileges.json -trans.nl = public/language/nl/admin/manage/privileges.json -trans.sv = public/language/sv/admin/manage/privileges.json -trans.et = public/language/et/admin/manage/privileges.json -trans.fr = public/language/fr/admin/manage/privileges.json -trans.he = public/language/he/admin/manage/privileges.json -trans.hr = public/language/hr/admin/manage/privileges.json -trans.th = public/language/th/admin/manage/privileges.json -trans.sq_AL = public/language/sq-AL/admin/manage/privileges.json -trans.gl = public/language/gl/admin/manage/privileges.json -trans.ko = public/language/ko/admin/manage/privileges.json -trans.lv = public/language/lv/admin/manage/privileges.json -trans.sk = public/language/sk/admin/manage/privileges.json -trans.tr = public/language/tr/admin/manage/privileges.json -trans.fi = public/language/fi/admin/manage/privileges.json -trans.id = public/language/id/admin/manage/privileges.json -trans.it = public/language/it/admin/manage/privileges.json -trans.rw = public/language/rw/admin/manage/privileges.json -trans.zh_TW = public/language/zh-TW/admin/manage/privileges.json -trans.ar = public/language/ar/admin/manage/privileges.json -trans.de = public/language/de/admin/manage/privileges.json -trans.ru = public/language/ru/admin/manage/privileges.json -trans.zh_CN = public/language/zh-CN/admin/manage/privileges.json - -[o:nodebb:p:nodebb:r:admin-manage-registration] -file_filter = public/language//admin/manage/registration.json -source_file = public/language/en-GB/admin/manage/registration.json -source_lang = en_GB -type = KEYVALUEJSON -trans.pl = public/language/pl/admin/manage/registration.json -trans.ro = public/language/ro/admin/manage/registration.json -trans.sk = public/language/sk/admin/manage/registration.json -trans.fi = public/language/fi/admin/manage/registration.json -trans.hu = public/language/hu/admin/manage/registration.json -trans.ms = public/language/ms/admin/manage/registration.json -trans.ru = public/language/ru/admin/manage/registration.json -trans.sc = public/language/sc/admin/manage/registration.json -trans.sr = public/language/sr/admin/manage/registration.json -trans.th = public/language/th/admin/manage/registration.json -trans.zh_TW = public/language/zh-TW/admin/manage/registration.json -trans.da = public/language/da/admin/manage/registration.json -trans.et = public/language/et/admin/manage/registration.json -trans.it = public/language/it/admin/manage/registration.json -trans.nb = public/language/nb/admin/manage/registration.json -trans.pt_BR = public/language/pt-BR/admin/manage/registration.json -trans.hy = public/language/hy/admin/manage/registration.json -trans.uk = public/language/uk/admin/manage/registration.json -trans.sq_AL = public/language/sq-AL/admin/manage/registration.json -trans.ar = public/language/ar/admin/manage/registration.json -trans.es = public/language/es/admin/manage/registration.json -trans.he = public/language/he/admin/manage/registration.json -trans.id = public/language/id/admin/manage/registration.json -trans.nl = public/language/nl/admin/manage/registration.json -trans.en@pirate = public/language/en-x-pirate/admin/manage/registration.json -trans.en_US = public/language/en-US/admin/manage/registration.json -trans.rw = public/language/rw/admin/manage/registration.json -trans.sv = public/language/sv/admin/manage/registration.json -trans.tr = public/language/tr/admin/manage/registration.json -trans.vi = public/language/vi/admin/manage/registration.json -trans.bg = public/language/bg/admin/manage/registration.json -trans.cs = public/language/cs/admin/manage/registration.json -trans.fa_IR = public/language/fa-IR/admin/manage/registration.json -trans.fr = public/language/fr/admin/manage/registration.json -trans.lt = public/language/lt/admin/manage/registration.json -trans.ja = public/language/ja/admin/manage/registration.json -trans.ko = public/language/ko/admin/manage/registration.json -trans.lv = public/language/lv/admin/manage/registration.json -trans.bn = public/language/bn/admin/manage/registration.json -trans.de = public/language/de/admin/manage/registration.json -trans.el = public/language/el/admin/manage/registration.json -trans.gl = public/language/gl/admin/manage/registration.json -trans.hr = public/language/hr/admin/manage/registration.json -trans.pt_PT = public/language/pt-PT/admin/manage/registration.json -trans.sl = public/language/sl/admin/manage/registration.json -trans.zh_CN = public/language/zh-CN/admin/manage/registration.json - -[o:nodebb:p:nodebb:r:admin-manage-tags] -file_filter = public/language//admin/manage/tags.json -source_file = public/language/en-GB/admin/manage/tags.json -source_lang = en_GB -type = KEYVALUEJSON -trans.zh_TW = public/language/zh-TW/admin/manage/tags.json -trans.bg = public/language/bg/admin/manage/tags.json -trans.da = public/language/da/admin/manage/tags.json -trans.en_US = public/language/en-US/admin/manage/tags.json -trans.hu = public/language/hu/admin/manage/tags.json -trans.nb = public/language/nb/admin/manage/tags.json -trans.ru = public/language/ru/admin/manage/tags.json -trans.sq_AL = public/language/sq-AL/admin/manage/tags.json -trans.de = public/language/de/admin/manage/tags.json -trans.fi = public/language/fi/admin/manage/tags.json -trans.hr = public/language/hr/admin/manage/tags.json -trans.ko = public/language/ko/admin/manage/tags.json -trans.ms = public/language/ms/admin/manage/tags.json -trans.th = public/language/th/admin/manage/tags.json -trans.ar = public/language/ar/admin/manage/tags.json -trans.el = public/language/el/admin/manage/tags.json -trans.es = public/language/es/admin/manage/tags.json -trans.hy = public/language/hy/admin/manage/tags.json -trans.ja = public/language/ja/admin/manage/tags.json -trans.cs = public/language/cs/admin/manage/tags.json -trans.pl = public/language/pl/admin/manage/tags.json -trans.ro = public/language/ro/admin/manage/tags.json -trans.rw = public/language/rw/admin/manage/tags.json -trans.bn = public/language/bn/admin/manage/tags.json -trans.fa_IR = public/language/fa-IR/admin/manage/tags.json -trans.zh_CN = public/language/zh-CN/admin/manage/tags.json -trans.et = public/language/et/admin/manage/tags.json -trans.fr = public/language/fr/admin/manage/tags.json -trans.gl = public/language/gl/admin/manage/tags.json -trans.id = public/language/id/admin/manage/tags.json -trans.lt = public/language/lt/admin/manage/tags.json -trans.sv = public/language/sv/admin/manage/tags.json -trans.tr = public/language/tr/admin/manage/tags.json -trans.uk = public/language/uk/admin/manage/tags.json -trans.lv = public/language/lv/admin/manage/tags.json -trans.nl = public/language/nl/admin/manage/tags.json -trans.pt_BR = public/language/pt-BR/admin/manage/tags.json -trans.pt_PT = public/language/pt-PT/admin/manage/tags.json -trans.sc = public/language/sc/admin/manage/tags.json -trans.sk = public/language/sk/admin/manage/tags.json -trans.sl = public/language/sl/admin/manage/tags.json -trans.en@pirate = public/language/en-x-pirate/admin/manage/tags.json -trans.he = public/language/he/admin/manage/tags.json -trans.it = public/language/it/admin/manage/tags.json -trans.sr = public/language/sr/admin/manage/tags.json -trans.vi = public/language/vi/admin/manage/tags.json - -[o:nodebb:p:nodebb:r:admin-manage-uploads] -file_filter = public/language//admin/manage/uploads.json -source_file = public/language/en-GB/admin/manage/uploads.json -source_lang = en_GB -type = KEYVALUEJSON -trans.ms = public/language/ms/admin/manage/uploads.json -trans.nb = public/language/nb/admin/manage/uploads.json -trans.tr = public/language/tr/admin/manage/uploads.json -trans.bg = public/language/bg/admin/manage/uploads.json -trans.bn = public/language/bn/admin/manage/uploads.json -trans.en@pirate = public/language/en-x-pirate/admin/manage/uploads.json -trans.lt = public/language/lt/admin/manage/uploads.json -trans.sq_AL = public/language/sq-AL/admin/manage/uploads.json -trans.el = public/language/el/admin/manage/uploads.json -trans.en_US = public/language/en-US/admin/manage/uploads.json -trans.fi = public/language/fi/admin/manage/uploads.json -trans.hr = public/language/hr/admin/manage/uploads.json -trans.sv = public/language/sv/admin/manage/uploads.json -trans.ar = public/language/ar/admin/manage/uploads.json -trans.de = public/language/de/admin/manage/uploads.json -trans.fr = public/language/fr/admin/manage/uploads.json -trans.he = public/language/he/admin/manage/uploads.json -trans.ro = public/language/ro/admin/manage/uploads.json -trans.rw = public/language/rw/admin/manage/uploads.json -trans.gl = public/language/gl/admin/manage/uploads.json -trans.nl = public/language/nl/admin/manage/uploads.json -trans.pl = public/language/pl/admin/manage/uploads.json -trans.pt_BR = public/language/pt-BR/admin/manage/uploads.json -trans.sc = public/language/sc/admin/manage/uploads.json -trans.th = public/language/th/admin/manage/uploads.json -trans.es = public/language/es/admin/manage/uploads.json -trans.et = public/language/et/admin/manage/uploads.json -trans.lv = public/language/lv/admin/manage/uploads.json -trans.pt_PT = public/language/pt-PT/admin/manage/uploads.json -trans.sr = public/language/sr/admin/manage/uploads.json -trans.uk = public/language/uk/admin/manage/uploads.json -trans.vi = public/language/vi/admin/manage/uploads.json -trans.cs = public/language/cs/admin/manage/uploads.json -trans.ru = public/language/ru/admin/manage/uploads.json -trans.sk = public/language/sk/admin/manage/uploads.json -trans.sl = public/language/sl/admin/manage/uploads.json -trans.fa_IR = public/language/fa-IR/admin/manage/uploads.json -trans.hu = public/language/hu/admin/manage/uploads.json -trans.hy = public/language/hy/admin/manage/uploads.json -trans.zh_CN = public/language/zh-CN/admin/manage/uploads.json -trans.ko = public/language/ko/admin/manage/uploads.json -trans.zh_TW = public/language/zh-TW/admin/manage/uploads.json -trans.da = public/language/da/admin/manage/uploads.json -trans.id = public/language/id/admin/manage/uploads.json -trans.it = public/language/it/admin/manage/uploads.json -trans.ja = public/language/ja/admin/manage/uploads.json - -[o:nodebb:p:nodebb:r:admin-manage-users] -file_filter = public/language//admin/manage/users.json -source_file = public/language/en-GB/admin/manage/users.json -source_lang = en_GB -type = KEYVALUEJSON -trans.uk = public/language/uk/admin/manage/users.json -trans.en@pirate = public/language/en-x-pirate/admin/manage/users.json -trans.en_US = public/language/en-US/admin/manage/users.json -trans.fr = public/language/fr/admin/manage/users.json -trans.ko = public/language/ko/admin/manage/users.json -trans.ms = public/language/ms/admin/manage/users.json -trans.nb = public/language/nb/admin/manage/users.json -trans.pt_BR = public/language/pt-BR/admin/manage/users.json -trans.zh_CN = public/language/zh-CN/admin/manage/users.json -trans.zh_TW = public/language/zh-TW/admin/manage/users.json -trans.cs = public/language/cs/admin/manage/users.json -trans.gl = public/language/gl/admin/manage/users.json -trans.rw = public/language/rw/admin/manage/users.json -trans.bg = public/language/bg/admin/manage/users.json -trans.de = public/language/de/admin/manage/users.json -trans.et = public/language/et/admin/manage/users.json -trans.id = public/language/id/admin/manage/users.json -trans.pt_PT = public/language/pt-PT/admin/manage/users.json -trans.ru = public/language/ru/admin/manage/users.json -trans.da = public/language/da/admin/manage/users.json -trans.he = public/language/he/admin/manage/users.json -trans.hu = public/language/hu/admin/manage/users.json -trans.ro = public/language/ro/admin/manage/users.json -trans.bn = public/language/bn/admin/manage/users.json -trans.es = public/language/es/admin/manage/users.json -trans.it = public/language/it/admin/manage/users.json -trans.nl = public/language/nl/admin/manage/users.json -trans.sq_AL = public/language/sq-AL/admin/manage/users.json -trans.tr = public/language/tr/admin/manage/users.json -trans.vi = public/language/vi/admin/manage/users.json -trans.fi = public/language/fi/admin/manage/users.json -trans.sc = public/language/sc/admin/manage/users.json -trans.hy = public/language/hy/admin/manage/users.json -trans.ja = public/language/ja/admin/manage/users.json -trans.lt = public/language/lt/admin/manage/users.json -trans.th = public/language/th/admin/manage/users.json -trans.sl = public/language/sl/admin/manage/users.json -trans.ar = public/language/ar/admin/manage/users.json -trans.el = public/language/el/admin/manage/users.json -trans.fa_IR = public/language/fa-IR/admin/manage/users.json -trans.hr = public/language/hr/admin/manage/users.json -trans.lv = public/language/lv/admin/manage/users.json -trans.pl = public/language/pl/admin/manage/users.json -trans.sk = public/language/sk/admin/manage/users.json -trans.sr = public/language/sr/admin/manage/users.json -trans.sv = public/language/sv/admin/manage/users.json - -[o:nodebb:p:nodebb:r:admin-menu] -file_filter = public/language//admin/menu.json -source_file = public/language/en-GB/admin/menu.json -source_lang = en_GB -type = KEYVALUEJSON -trans.ru = public/language/ru/admin/menu.json -trans.th = public/language/th/admin/menu.json -trans.vi = public/language/vi/admin/menu.json -trans.zh_CN = public/language/zh-CN/admin/menu.json -trans.hr = public/language/hr/admin/menu.json -trans.ko = public/language/ko/admin/menu.json -trans.it = public/language/it/admin/menu.json -trans.lt = public/language/lt/admin/menu.json -trans.pl = public/language/pl/admin/menu.json -trans.sc = public/language/sc/admin/menu.json -trans.sv = public/language/sv/admin/menu.json -trans.en@pirate = public/language/en-x-pirate/admin/menu.json -trans.fr = public/language/fr/admin/menu.json -trans.de = public/language/de/admin/menu.json -trans.ms = public/language/ms/admin/menu.json -trans.sq_AL = public/language/sq-AL/admin/menu.json -trans.bg = public/language/bg/admin/menu.json -trans.da = public/language/da/admin/menu.json -trans.es = public/language/es/admin/menu.json -trans.hy = public/language/hy/admin/menu.json -trans.id = public/language/id/admin/menu.json -trans.ja = public/language/ja/admin/menu.json -trans.ro = public/language/ro/admin/menu.json -trans.rw = public/language/rw/admin/menu.json -trans.ar = public/language/ar/admin/menu.json -trans.en_US = public/language/en-US/admin/menu.json -trans.sl = public/language/sl/admin/menu.json -trans.uk = public/language/uk/admin/menu.json -trans.he = public/language/he/admin/menu.json -trans.hu = public/language/hu/admin/menu.json -trans.sr = public/language/sr/admin/menu.json -trans.cs = public/language/cs/admin/menu.json -trans.fa_IR = public/language/fa-IR/admin/menu.json -trans.sk = public/language/sk/admin/menu.json -trans.tr = public/language/tr/admin/menu.json -trans.fi = public/language/fi/admin/menu.json -trans.nl = public/language/nl/admin/menu.json -trans.pt_BR = public/language/pt-BR/admin/menu.json -trans.zh_TW = public/language/zh-TW/admin/menu.json -trans.el = public/language/el/admin/menu.json -trans.gl = public/language/gl/admin/menu.json -trans.lv = public/language/lv/admin/menu.json -trans.nb = public/language/nb/admin/menu.json -trans.pt_PT = public/language/pt-PT/admin/menu.json -trans.bn = public/language/bn/admin/menu.json -trans.et = public/language/et/admin/menu.json - -[o:nodebb:p:nodebb:r:admin-settings-advanced] -file_filter = public/language//admin/settings/advanced.json -source_file = public/language/en-GB/admin/settings/advanced.json -source_lang = en_GB -type = KEYVALUEJSON -trans.ko = public/language/ko/admin/settings/advanced.json -trans.sc = public/language/sc/admin/settings/advanced.json -trans.ar = public/language/ar/admin/settings/advanced.json -trans.bn = public/language/bn/admin/settings/advanced.json -trans.el = public/language/el/admin/settings/advanced.json -trans.fa_IR = public/language/fa-IR/admin/settings/advanced.json -trans.fr = public/language/fr/admin/settings/advanced.json -trans.hy = public/language/hy/admin/settings/advanced.json -trans.bg = public/language/bg/admin/settings/advanced.json -trans.lv = public/language/lv/admin/settings/advanced.json -trans.pt_BR = public/language/pt-BR/admin/settings/advanced.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/advanced.json -trans.es = public/language/es/admin/settings/advanced.json -trans.id = public/language/id/admin/settings/advanced.json -trans.rw = public/language/rw/admin/settings/advanced.json -trans.sl = public/language/sl/admin/settings/advanced.json -trans.it = public/language/it/admin/settings/advanced.json -trans.nb = public/language/nb/admin/settings/advanced.json -trans.pt_PT = public/language/pt-PT/admin/settings/advanced.json -trans.sq_AL = public/language/sq-AL/admin/settings/advanced.json -trans.sr = public/language/sr/admin/settings/advanced.json -trans.zh_CN = public/language/zh-CN/admin/settings/advanced.json -trans.zh_TW = public/language/zh-TW/admin/settings/advanced.json -trans.cs = public/language/cs/admin/settings/advanced.json -trans.en_US = public/language/en-US/admin/settings/advanced.json -trans.hr = public/language/hr/admin/settings/advanced.json -trans.pl = public/language/pl/admin/settings/advanced.json -trans.ru = public/language/ru/admin/settings/advanced.json -trans.sv = public/language/sv/admin/settings/advanced.json -trans.vi = public/language/vi/admin/settings/advanced.json -trans.de = public/language/de/admin/settings/advanced.json -trans.et = public/language/et/admin/settings/advanced.json -trans.fi = public/language/fi/admin/settings/advanced.json -trans.ro = public/language/ro/admin/settings/advanced.json -trans.sk = public/language/sk/admin/settings/advanced.json -trans.uk = public/language/uk/admin/settings/advanced.json -trans.da = public/language/da/admin/settings/advanced.json -trans.gl = public/language/gl/admin/settings/advanced.json -trans.he = public/language/he/admin/settings/advanced.json -trans.hu = public/language/hu/admin/settings/advanced.json -trans.ja = public/language/ja/admin/settings/advanced.json -trans.tr = public/language/tr/admin/settings/advanced.json -trans.lt = public/language/lt/admin/settings/advanced.json -trans.ms = public/language/ms/admin/settings/advanced.json -trans.nl = public/language/nl/admin/settings/advanced.json -trans.th = public/language/th/admin/settings/advanced.json - -[o:nodebb:p:nodebb:r:admin-settings-api] -file_filter = public/language//admin/settings/api.json -source_file = public/language/en-GB/admin/settings/api.json -source_lang = en_GB -type = KEYVALUEJSON -trans.et = public/language/et/admin/settings/api.json -trans.lv = public/language/lv/admin/settings/api.json -trans.nl = public/language/nl/admin/settings/api.json -trans.rw = public/language/rw/admin/settings/api.json -trans.sl = public/language/sl/admin/settings/api.json -trans.bn = public/language/bn/admin/settings/api.json -trans.de = public/language/de/admin/settings/api.json -trans.el = public/language/el/admin/settings/api.json -trans.en_US = public/language/en-US/admin/settings/api.json -trans.fi = public/language/fi/admin/settings/api.json -trans.he = public/language/he/admin/settings/api.json -trans.hr = public/language/hr/admin/settings/api.json -trans.hy = public/language/hy/admin/settings/api.json -trans.ja = public/language/ja/admin/settings/api.json -trans.ko = public/language/ko/admin/settings/api.json -trans.ms = public/language/ms/admin/settings/api.json -trans.pt_BR = public/language/pt-BR/admin/settings/api.json -trans.zh_CN = public/language/zh-CN/admin/settings/api.json -trans.zh_TW = public/language/zh-TW/admin/settings/api.json -trans.cs = public/language/cs/admin/settings/api.json -trans.it = public/language/it/admin/settings/api.json -trans.nb = public/language/nb/admin/settings/api.json -trans.pt_PT = public/language/pt-PT/admin/settings/api.json -trans.ru = public/language/ru/admin/settings/api.json -trans.uk = public/language/uk/admin/settings/api.json -trans.vi = public/language/vi/admin/settings/api.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/api.json -trans.fr = public/language/fr/admin/settings/api.json -trans.lt = public/language/lt/admin/settings/api.json -trans.sr = public/language/sr/admin/settings/api.json -trans.fa_IR = public/language/fa-IR/admin/settings/api.json -trans.sq_AL = public/language/sq-AL/admin/settings/api.json -trans.th = public/language/th/admin/settings/api.json -trans.da = public/language/da/admin/settings/api.json -trans.gl = public/language/gl/admin/settings/api.json -trans.pl = public/language/pl/admin/settings/api.json -trans.ar = public/language/ar/admin/settings/api.json -trans.es = public/language/es/admin/settings/api.json -trans.hu = public/language/hu/admin/settings/api.json -trans.sc = public/language/sc/admin/settings/api.json -trans.bg = public/language/bg/admin/settings/api.json -trans.id = public/language/id/admin/settings/api.json -trans.ro = public/language/ro/admin/settings/api.json -trans.sk = public/language/sk/admin/settings/api.json -trans.sv = public/language/sv/admin/settings/api.json -trans.tr = public/language/tr/admin/settings/api.json - -[o:nodebb:p:nodebb:r:admin-settings-chat] -file_filter = public/language//admin/settings/chat.json -source_file = public/language/en-GB/admin/settings/chat.json -source_lang = en_GB -type = KEYVALUEJSON -trans.ar = public/language/ar/admin/settings/chat.json -trans.es = public/language/es/admin/settings/chat.json -trans.et = public/language/et/admin/settings/chat.json -trans.ms = public/language/ms/admin/settings/chat.json -trans.sk = public/language/sk/admin/settings/chat.json -trans.sq_AL = public/language/sq-AL/admin/settings/chat.json -trans.da = public/language/da/admin/settings/chat.json -trans.de = public/language/de/admin/settings/chat.json -trans.en_US = public/language/en-US/admin/settings/chat.json -trans.fa_IR = public/language/fa-IR/admin/settings/chat.json -trans.fr = public/language/fr/admin/settings/chat.json -trans.id = public/language/id/admin/settings/chat.json -trans.ro = public/language/ro/admin/settings/chat.json -trans.el = public/language/el/admin/settings/chat.json -trans.hr = public/language/hr/admin/settings/chat.json -trans.ja = public/language/ja/admin/settings/chat.json -trans.ko = public/language/ko/admin/settings/chat.json -trans.nb = public/language/nb/admin/settings/chat.json -trans.nl = public/language/nl/admin/settings/chat.json -trans.uk = public/language/uk/admin/settings/chat.json -trans.he = public/language/he/admin/settings/chat.json -trans.sl = public/language/sl/admin/settings/chat.json -trans.sr = public/language/sr/admin/settings/chat.json -trans.cs = public/language/cs/admin/settings/chat.json -trans.pl = public/language/pl/admin/settings/chat.json -trans.pt_BR = public/language/pt-BR/admin/settings/chat.json -trans.sv = public/language/sv/admin/settings/chat.json -trans.zh_CN = public/language/zh-CN/admin/settings/chat.json -trans.bg = public/language/bg/admin/settings/chat.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/chat.json -trans.hu = public/language/hu/admin/settings/chat.json -trans.ru = public/language/ru/admin/settings/chat.json -trans.rw = public/language/rw/admin/settings/chat.json -trans.tr = public/language/tr/admin/settings/chat.json -trans.bn = public/language/bn/admin/settings/chat.json -trans.hy = public/language/hy/admin/settings/chat.json -trans.lt = public/language/lt/admin/settings/chat.json -trans.lv = public/language/lv/admin/settings/chat.json -trans.th = public/language/th/admin/settings/chat.json -trans.fi = public/language/fi/admin/settings/chat.json -trans.gl = public/language/gl/admin/settings/chat.json -trans.it = public/language/it/admin/settings/chat.json -trans.pt_PT = public/language/pt-PT/admin/settings/chat.json -trans.sc = public/language/sc/admin/settings/chat.json -trans.vi = public/language/vi/admin/settings/chat.json -trans.zh_TW = public/language/zh-TW/admin/settings/chat.json - -[o:nodebb:p:nodebb:r:admin-settings-cookies] -file_filter = public/language//admin/settings/cookies.json -source_file = public/language/en-GB/admin/settings/cookies.json -source_lang = en_GB -type = KEYVALUEJSON -trans.sr = public/language/sr/admin/settings/cookies.json -trans.th = public/language/th/admin/settings/cookies.json -trans.zh_CN = public/language/zh-CN/admin/settings/cookies.json -trans.en_US = public/language/en-US/admin/settings/cookies.json -trans.lt = public/language/lt/admin/settings/cookies.json -trans.pl = public/language/pl/admin/settings/cookies.json -trans.ro = public/language/ro/admin/settings/cookies.json -trans.rw = public/language/rw/admin/settings/cookies.json -trans.sk = public/language/sk/admin/settings/cookies.json -trans.tr = public/language/tr/admin/settings/cookies.json -trans.ar = public/language/ar/admin/settings/cookies.json -trans.da = public/language/da/admin/settings/cookies.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/cookies.json -trans.gl = public/language/gl/admin/settings/cookies.json -trans.hu = public/language/hu/admin/settings/cookies.json -trans.vi = public/language/vi/admin/settings/cookies.json -trans.el = public/language/el/admin/settings/cookies.json -trans.et = public/language/et/admin/settings/cookies.json -trans.lv = public/language/lv/admin/settings/cookies.json -trans.ru = public/language/ru/admin/settings/cookies.json -trans.uk = public/language/uk/admin/settings/cookies.json -trans.ko = public/language/ko/admin/settings/cookies.json -trans.sv = public/language/sv/admin/settings/cookies.json -trans.bn = public/language/bn/admin/settings/cookies.json -trans.de = public/language/de/admin/settings/cookies.json -trans.he = public/language/he/admin/settings/cookies.json -trans.hy = public/language/hy/admin/settings/cookies.json -trans.it = public/language/it/admin/settings/cookies.json -trans.cs = public/language/cs/admin/settings/cookies.json -trans.hr = public/language/hr/admin/settings/cookies.json -trans.ja = public/language/ja/admin/settings/cookies.json -trans.pt_PT = public/language/pt-PT/admin/settings/cookies.json -trans.nb = public/language/nb/admin/settings/cookies.json -trans.sc = public/language/sc/admin/settings/cookies.json -trans.bg = public/language/bg/admin/settings/cookies.json -trans.fi = public/language/fi/admin/settings/cookies.json -trans.fr = public/language/fr/admin/settings/cookies.json -trans.id = public/language/id/admin/settings/cookies.json -trans.ms = public/language/ms/admin/settings/cookies.json -trans.zh_TW = public/language/zh-TW/admin/settings/cookies.json -trans.es = public/language/es/admin/settings/cookies.json -trans.fa_IR = public/language/fa-IR/admin/settings/cookies.json -trans.nl = public/language/nl/admin/settings/cookies.json -trans.sl = public/language/sl/admin/settings/cookies.json -trans.sq_AL = public/language/sq-AL/admin/settings/cookies.json -trans.pt_BR = public/language/pt-BR/admin/settings/cookies.json - -[o:nodebb:p:nodebb:r:admin-settings-email] -file_filter = public/language//admin/settings/email.json -source_file = public/language/en-GB/admin/settings/email.json -source_lang = en_GB -type = KEYVALUEJSON -trans.sv = public/language/sv/admin/settings/email.json -trans.tr = public/language/tr/admin/settings/email.json -trans.uk = public/language/uk/admin/settings/email.json -trans.ar = public/language/ar/admin/settings/email.json -trans.ja = public/language/ja/admin/settings/email.json -trans.pt_PT = public/language/pt-PT/admin/settings/email.json -trans.sr = public/language/sr/admin/settings/email.json -trans.ms = public/language/ms/admin/settings/email.json -trans.nb = public/language/nb/admin/settings/email.json -trans.ru = public/language/ru/admin/settings/email.json -trans.sk = public/language/sk/admin/settings/email.json -trans.fr = public/language/fr/admin/settings/email.json -trans.he = public/language/he/admin/settings/email.json -trans.id = public/language/id/admin/settings/email.json -trans.it = public/language/it/admin/settings/email.json -trans.sl = public/language/sl/admin/settings/email.json -trans.sq_AL = public/language/sq-AL/admin/settings/email.json -trans.hr = public/language/hr/admin/settings/email.json -trans.hu = public/language/hu/admin/settings/email.json -trans.ko = public/language/ko/admin/settings/email.json -trans.zh_TW = public/language/zh-TW/admin/settings/email.json -trans.bn = public/language/bn/admin/settings/email.json -trans.fi = public/language/fi/admin/settings/email.json -trans.pt_BR = public/language/pt-BR/admin/settings/email.json -trans.es = public/language/es/admin/settings/email.json -trans.pl = public/language/pl/admin/settings/email.json -trans.ro = public/language/ro/admin/settings/email.json -trans.rw = public/language/rw/admin/settings/email.json -trans.bg = public/language/bg/admin/settings/email.json -trans.cs = public/language/cs/admin/settings/email.json -trans.el = public/language/el/admin/settings/email.json -trans.en_US = public/language/en-US/admin/settings/email.json -trans.zh_CN = public/language/zh-CN/admin/settings/email.json -trans.fa_IR = public/language/fa-IR/admin/settings/email.json -trans.gl = public/language/gl/admin/settings/email.json -trans.hy = public/language/hy/admin/settings/email.json -trans.lv = public/language/lv/admin/settings/email.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/email.json -trans.et = public/language/et/admin/settings/email.json -trans.lt = public/language/lt/admin/settings/email.json -trans.th = public/language/th/admin/settings/email.json -trans.vi = public/language/vi/admin/settings/email.json -trans.da = public/language/da/admin/settings/email.json -trans.de = public/language/de/admin/settings/email.json -trans.nl = public/language/nl/admin/settings/email.json -trans.sc = public/language/sc/admin/settings/email.json - -[o:nodebb:p:nodebb:r:admin-settings-general] -file_filter = public/language//admin/settings/general.json -source_file = public/language/en-GB/admin/settings/general.json -source_lang = en_GB -type = KEYVALUEJSON -trans.ko = public/language/ko/admin/settings/general.json -trans.ro = public/language/ro/admin/settings/general.json -trans.sc = public/language/sc/admin/settings/general.json -trans.sk = public/language/sk/admin/settings/general.json -trans.sv = public/language/sv/admin/settings/general.json -trans.uk = public/language/uk/admin/settings/general.json -trans.fr = public/language/fr/admin/settings/general.json -trans.gl = public/language/gl/admin/settings/general.json -trans.zh_CN = public/language/zh-CN/admin/settings/general.json -trans.lt = public/language/lt/admin/settings/general.json -trans.rw = public/language/rw/admin/settings/general.json -trans.th = public/language/th/admin/settings/general.json -trans.tr = public/language/tr/admin/settings/general.json -trans.zh_TW = public/language/zh-TW/admin/settings/general.json -trans.de = public/language/de/admin/settings/general.json -trans.ja = public/language/ja/admin/settings/general.json -trans.en_US = public/language/en-US/admin/settings/general.json -trans.et = public/language/et/admin/settings/general.json -trans.fi = public/language/fi/admin/settings/general.json -trans.hy = public/language/hy/admin/settings/general.json -trans.id = public/language/id/admin/settings/general.json -trans.ru = public/language/ru/admin/settings/general.json -trans.cs = public/language/cs/admin/settings/general.json -trans.el = public/language/el/admin/settings/general.json -trans.sl = public/language/sl/admin/settings/general.json -trans.hu = public/language/hu/admin/settings/general.json -trans.it = public/language/it/admin/settings/general.json -trans.nl = public/language/nl/admin/settings/general.json -trans.pl = public/language/pl/admin/settings/general.json -trans.es = public/language/es/admin/settings/general.json -trans.fa_IR = public/language/fa-IR/admin/settings/general.json -trans.ms = public/language/ms/admin/settings/general.json -trans.nb = public/language/nb/admin/settings/general.json -trans.sr = public/language/sr/admin/settings/general.json -trans.da = public/language/da/admin/settings/general.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/general.json -trans.pt_PT = public/language/pt-PT/admin/settings/general.json -trans.he = public/language/he/admin/settings/general.json -trans.lv = public/language/lv/admin/settings/general.json -trans.pt_BR = public/language/pt-BR/admin/settings/general.json -trans.bn = public/language/bn/admin/settings/general.json -trans.hr = public/language/hr/admin/settings/general.json -trans.sq_AL = public/language/sq-AL/admin/settings/general.json -trans.vi = public/language/vi/admin/settings/general.json -trans.ar = public/language/ar/admin/settings/general.json -trans.bg = public/language/bg/admin/settings/general.json - -[o:nodebb:p:nodebb:r:admin-settings-group] -file_filter = public/language//admin/settings/group.json -source_file = public/language/en-GB/admin/settings/group.json -source_lang = en_GB -type = KEYVALUEJSON -trans.sc = public/language/sc/admin/settings/group.json -trans.en_US = public/language/en-US/admin/settings/group.json -trans.et = public/language/et/admin/settings/group.json -trans.fr = public/language/fr/admin/settings/group.json -trans.it = public/language/it/admin/settings/group.json -trans.nb = public/language/nb/admin/settings/group.json -trans.es = public/language/es/admin/settings/group.json -trans.fa_IR = public/language/fa-IR/admin/settings/group.json -trans.gl = public/language/gl/admin/settings/group.json -trans.rw = public/language/rw/admin/settings/group.json -trans.sr = public/language/sr/admin/settings/group.json -trans.sq_AL = public/language/sq-AL/admin/settings/group.json -trans.th = public/language/th/admin/settings/group.json -trans.vi = public/language/vi/admin/settings/group.json -trans.bn = public/language/bn/admin/settings/group.json -trans.fi = public/language/fi/admin/settings/group.json -trans.hy = public/language/hy/admin/settings/group.json -trans.id = public/language/id/admin/settings/group.json -trans.ms = public/language/ms/admin/settings/group.json -trans.de = public/language/de/admin/settings/group.json -trans.he = public/language/he/admin/settings/group.json -trans.lv = public/language/lv/admin/settings/group.json -trans.pt_PT = public/language/pt-PT/admin/settings/group.json -trans.sk = public/language/sk/admin/settings/group.json -trans.tr = public/language/tr/admin/settings/group.json -trans.uk = public/language/uk/admin/settings/group.json -trans.cs = public/language/cs/admin/settings/group.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/group.json -trans.hu = public/language/hu/admin/settings/group.json -trans.nl = public/language/nl/admin/settings/group.json -trans.ru = public/language/ru/admin/settings/group.json -trans.lt = public/language/lt/admin/settings/group.json -trans.ro = public/language/ro/admin/settings/group.json -trans.sl = public/language/sl/admin/settings/group.json -trans.ar = public/language/ar/admin/settings/group.json -trans.bg = public/language/bg/admin/settings/group.json -trans.da = public/language/da/admin/settings/group.json -trans.hr = public/language/hr/admin/settings/group.json -trans.ko = public/language/ko/admin/settings/group.json -trans.el = public/language/el/admin/settings/group.json -trans.sv = public/language/sv/admin/settings/group.json -trans.ja = public/language/ja/admin/settings/group.json -trans.pl = public/language/pl/admin/settings/group.json -trans.pt_BR = public/language/pt-BR/admin/settings/group.json -trans.zh_CN = public/language/zh-CN/admin/settings/group.json -trans.zh_TW = public/language/zh-TW/admin/settings/group.json - -[o:nodebb:p:nodebb:r:admin-settings-guest] -file_filter = public/language//admin/settings/guest.json -source_file = public/language/en-GB/admin/settings/guest.json -source_lang = en_GB -type = KEYVALUEJSON -trans.cs = public/language/cs/admin/settings/guest.json -trans.da = public/language/da/admin/settings/guest.json -trans.en_US = public/language/en-US/admin/settings/guest.json -trans.lt = public/language/lt/admin/settings/guest.json -trans.ms = public/language/ms/admin/settings/guest.json -trans.nl = public/language/nl/admin/settings/guest.json -trans.ru = public/language/ru/admin/settings/guest.json -trans.sc = public/language/sc/admin/settings/guest.json -trans.sr = public/language/sr/admin/settings/guest.json -trans.th = public/language/th/admin/settings/guest.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/guest.json -trans.it = public/language/it/admin/settings/guest.json -trans.lv = public/language/lv/admin/settings/guest.json -trans.pt_BR = public/language/pt-BR/admin/settings/guest.json -trans.sk = public/language/sk/admin/settings/guest.json -trans.de = public/language/de/admin/settings/guest.json -trans.es = public/language/es/admin/settings/guest.json -trans.hr = public/language/hr/admin/settings/guest.json -trans.pt_PT = public/language/pt-PT/admin/settings/guest.json -trans.rw = public/language/rw/admin/settings/guest.json -trans.sq_AL = public/language/sq-AL/admin/settings/guest.json -trans.el = public/language/el/admin/settings/guest.json -trans.tr = public/language/tr/admin/settings/guest.json -trans.zh_CN = public/language/zh-CN/admin/settings/guest.json -trans.bg = public/language/bg/admin/settings/guest.json -trans.fi = public/language/fi/admin/settings/guest.json -trans.hu = public/language/hu/admin/settings/guest.json -trans.ja = public/language/ja/admin/settings/guest.json -trans.nb = public/language/nb/admin/settings/guest.json -trans.pl = public/language/pl/admin/settings/guest.json -trans.sl = public/language/sl/admin/settings/guest.json -trans.vi = public/language/vi/admin/settings/guest.json -trans.bn = public/language/bn/admin/settings/guest.json -trans.fa_IR = public/language/fa-IR/admin/settings/guest.json -trans.fr = public/language/fr/admin/settings/guest.json -trans.hy = public/language/hy/admin/settings/guest.json -trans.ro = public/language/ro/admin/settings/guest.json -trans.et = public/language/et/admin/settings/guest.json -trans.gl = public/language/gl/admin/settings/guest.json -trans.sv = public/language/sv/admin/settings/guest.json -trans.uk = public/language/uk/admin/settings/guest.json -trans.zh_TW = public/language/zh-TW/admin/settings/guest.json -trans.ar = public/language/ar/admin/settings/guest.json -trans.he = public/language/he/admin/settings/guest.json -trans.id = public/language/id/admin/settings/guest.json -trans.ko = public/language/ko/admin/settings/guest.json - -[o:nodebb:p:nodebb:r:admin-settings-homepage] -file_filter = public/language//admin/settings/homepage.json -source_file = public/language/en-GB/admin/settings/homepage.json -source_lang = en_GB -type = KEYVALUEJSON -trans.nb = public/language/nb/admin/settings/homepage.json -trans.tr = public/language/tr/admin/settings/homepage.json -trans.vi = public/language/vi/admin/settings/homepage.json -trans.et = public/language/et/admin/settings/homepage.json -trans.fi = public/language/fi/admin/settings/homepage.json -trans.hy = public/language/hy/admin/settings/homepage.json -trans.ru = public/language/ru/admin/settings/homepage.json -trans.sr = public/language/sr/admin/settings/homepage.json -trans.es = public/language/es/admin/settings/homepage.json -trans.id = public/language/id/admin/settings/homepage.json -trans.lt = public/language/lt/admin/settings/homepage.json -trans.sk = public/language/sk/admin/settings/homepage.json -trans.sq_AL = public/language/sq-AL/admin/settings/homepage.json -trans.th = public/language/th/admin/settings/homepage.json -trans.en_US = public/language/en-US/admin/settings/homepage.json -trans.lv = public/language/lv/admin/settings/homepage.json -trans.pt_PT = public/language/pt-PT/admin/settings/homepage.json -trans.sc = public/language/sc/admin/settings/homepage.json -trans.fa_IR = public/language/fa-IR/admin/settings/homepage.json -trans.he = public/language/he/admin/settings/homepage.json -trans.ms = public/language/ms/admin/settings/homepage.json -trans.cs = public/language/cs/admin/settings/homepage.json -trans.el = public/language/el/admin/settings/homepage.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/homepage.json -trans.gl = public/language/gl/admin/settings/homepage.json -trans.ko = public/language/ko/admin/settings/homepage.json -trans.ar = public/language/ar/admin/settings/homepage.json -trans.bg = public/language/bg/admin/settings/homepage.json -trans.bn = public/language/bn/admin/settings/homepage.json -trans.rw = public/language/rw/admin/settings/homepage.json -trans.zh_CN = public/language/zh-CN/admin/settings/homepage.json -trans.hr = public/language/hr/admin/settings/homepage.json -trans.it = public/language/it/admin/settings/homepage.json -trans.ja = public/language/ja/admin/settings/homepage.json -trans.nl = public/language/nl/admin/settings/homepage.json -trans.ro = public/language/ro/admin/settings/homepage.json -trans.da = public/language/da/admin/settings/homepage.json -trans.de = public/language/de/admin/settings/homepage.json -trans.fr = public/language/fr/admin/settings/homepage.json -trans.sv = public/language/sv/admin/settings/homepage.json -trans.hu = public/language/hu/admin/settings/homepage.json -trans.pt_BR = public/language/pt-BR/admin/settings/homepage.json -trans.sl = public/language/sl/admin/settings/homepage.json -trans.pl = public/language/pl/admin/settings/homepage.json -trans.uk = public/language/uk/admin/settings/homepage.json -trans.zh_TW = public/language/zh-TW/admin/settings/homepage.json - -[o:nodebb:p:nodebb:r:admin-settings-languages] -file_filter = public/language//admin/settings/languages.json -source_file = public/language/en-GB/admin/settings/languages.json -source_lang = en_GB -type = KEYVALUEJSON -trans.en@pirate = public/language/en-x-pirate/admin/settings/languages.json -trans.fa_IR = public/language/fa-IR/admin/settings/languages.json -trans.gl = public/language/gl/admin/settings/languages.json -trans.ro = public/language/ro/admin/settings/languages.json -trans.th = public/language/th/admin/settings/languages.json -trans.hr = public/language/hr/admin/settings/languages.json -trans.hy = public/language/hy/admin/settings/languages.json -trans.sc = public/language/sc/admin/settings/languages.json -trans.vi = public/language/vi/admin/settings/languages.json -trans.tr = public/language/tr/admin/settings/languages.json -trans.cs = public/language/cs/admin/settings/languages.json -trans.et = public/language/et/admin/settings/languages.json -trans.lv = public/language/lv/admin/settings/languages.json -trans.pl = public/language/pl/admin/settings/languages.json -trans.sr = public/language/sr/admin/settings/languages.json -trans.sv = public/language/sv/admin/settings/languages.json -trans.hu = public/language/hu/admin/settings/languages.json -trans.it = public/language/it/admin/settings/languages.json -trans.ja = public/language/ja/admin/settings/languages.json -trans.sl = public/language/sl/admin/settings/languages.json -trans.zh_TW = public/language/zh-TW/admin/settings/languages.json -trans.da = public/language/da/admin/settings/languages.json -trans.fr = public/language/fr/admin/settings/languages.json -trans.he = public/language/he/admin/settings/languages.json -trans.id = public/language/id/admin/settings/languages.json -trans.sq_AL = public/language/sq-AL/admin/settings/languages.json -trans.uk = public/language/uk/admin/settings/languages.json -trans.bn = public/language/bn/admin/settings/languages.json -trans.fi = public/language/fi/admin/settings/languages.json -trans.ko = public/language/ko/admin/settings/languages.json -trans.pt_BR = public/language/pt-BR/admin/settings/languages.json -trans.sk = public/language/sk/admin/settings/languages.json -trans.pt_PT = public/language/pt-PT/admin/settings/languages.json -trans.ru = public/language/ru/admin/settings/languages.json -trans.ar = public/language/ar/admin/settings/languages.json -trans.bg = public/language/bg/admin/settings/languages.json -trans.de = public/language/de/admin/settings/languages.json -trans.el = public/language/el/admin/settings/languages.json -trans.lt = public/language/lt/admin/settings/languages.json -trans.nl = public/language/nl/admin/settings/languages.json -trans.zh_CN = public/language/zh-CN/admin/settings/languages.json -trans.en_US = public/language/en-US/admin/settings/languages.json -trans.es = public/language/es/admin/settings/languages.json -trans.ms = public/language/ms/admin/settings/languages.json -trans.nb = public/language/nb/admin/settings/languages.json -trans.rw = public/language/rw/admin/settings/languages.json - -[o:nodebb:p:nodebb:r:admin-settings-navigation] -file_filter = public/language//admin/settings/navigation.json -source_file = public/language/en-GB/admin/settings/navigation.json -source_lang = en_GB -type = KEYVALUEJSON -trans.uk = public/language/uk/admin/settings/navigation.json -trans.bn = public/language/bn/admin/settings/navigation.json -trans.es = public/language/es/admin/settings/navigation.json -trans.fa_IR = public/language/fa-IR/admin/settings/navigation.json -trans.nl = public/language/nl/admin/settings/navigation.json -trans.pt_BR = public/language/pt-BR/admin/settings/navigation.json -trans.rw = public/language/rw/admin/settings/navigation.json -trans.zh_CN = public/language/zh-CN/admin/settings/navigation.json -trans.da = public/language/da/admin/settings/navigation.json -trans.it = public/language/it/admin/settings/navigation.json -trans.ms = public/language/ms/admin/settings/navigation.json -trans.pt_PT = public/language/pt-PT/admin/settings/navigation.json -trans.vi = public/language/vi/admin/settings/navigation.json -trans.en_US = public/language/en-US/admin/settings/navigation.json -trans.fr = public/language/fr/admin/settings/navigation.json -trans.hu = public/language/hu/admin/settings/navigation.json -trans.hy = public/language/hy/admin/settings/navigation.json -trans.ja = public/language/ja/admin/settings/navigation.json -trans.lt = public/language/lt/admin/settings/navigation.json -trans.ru = public/language/ru/admin/settings/navigation.json -trans.sk = public/language/sk/admin/settings/navigation.json -trans.sr = public/language/sr/admin/settings/navigation.json -trans.de = public/language/de/admin/settings/navigation.json -trans.et = public/language/et/admin/settings/navigation.json -trans.fi = public/language/fi/admin/settings/navigation.json -trans.gl = public/language/gl/admin/settings/navigation.json -trans.sc = public/language/sc/admin/settings/navigation.json -trans.sl = public/language/sl/admin/settings/navigation.json -trans.th = public/language/th/admin/settings/navigation.json -trans.bg = public/language/bg/admin/settings/navigation.json -trans.cs = public/language/cs/admin/settings/navigation.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/navigation.json -trans.ro = public/language/ro/admin/settings/navigation.json -trans.sq_AL = public/language/sq-AL/admin/settings/navigation.json -trans.tr = public/language/tr/admin/settings/navigation.json -trans.zh_TW = public/language/zh-TW/admin/settings/navigation.json -trans.ar = public/language/ar/admin/settings/navigation.json -trans.hr = public/language/hr/admin/settings/navigation.json -trans.id = public/language/id/admin/settings/navigation.json -trans.ko = public/language/ko/admin/settings/navigation.json -trans.nb = public/language/nb/admin/settings/navigation.json -trans.pl = public/language/pl/admin/settings/navigation.json -trans.sv = public/language/sv/admin/settings/navigation.json -trans.el = public/language/el/admin/settings/navigation.json -trans.he = public/language/he/admin/settings/navigation.json -trans.lv = public/language/lv/admin/settings/navigation.json - -[o:nodebb:p:nodebb:r:admin-settings-notifications] -file_filter = public/language//admin/settings/notifications.json -source_file = public/language/en-GB/admin/settings/notifications.json -source_lang = en_GB -type = KEYVALUEJSON -trans.zh_TW = public/language/zh-TW/admin/settings/notifications.json -trans.fi = public/language/fi/admin/settings/notifications.json -trans.id = public/language/id/admin/settings/notifications.json -trans.pt_PT = public/language/pt-PT/admin/settings/notifications.json -trans.rw = public/language/rw/admin/settings/notifications.json -trans.ar = public/language/ar/admin/settings/notifications.json -trans.bn = public/language/bn/admin/settings/notifications.json -trans.el = public/language/el/admin/settings/notifications.json -trans.en_US = public/language/en-US/admin/settings/notifications.json -trans.sk = public/language/sk/admin/settings/notifications.json -trans.sr = public/language/sr/admin/settings/notifications.json -trans.sv = public/language/sv/admin/settings/notifications.json -trans.th = public/language/th/admin/settings/notifications.json -trans.cs = public/language/cs/admin/settings/notifications.json -trans.it = public/language/it/admin/settings/notifications.json -trans.ru = public/language/ru/admin/settings/notifications.json -trans.sq_AL = public/language/sq-AL/admin/settings/notifications.json -trans.vi = public/language/vi/admin/settings/notifications.json -trans.fr = public/language/fr/admin/settings/notifications.json -trans.hy = public/language/hy/admin/settings/notifications.json -trans.sl = public/language/sl/admin/settings/notifications.json -trans.uk = public/language/uk/admin/settings/notifications.json -trans.ms = public/language/ms/admin/settings/notifications.json -trans.nl = public/language/nl/admin/settings/notifications.json -trans.ro = public/language/ro/admin/settings/notifications.json -trans.sc = public/language/sc/admin/settings/notifications.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/notifications.json -trans.gl = public/language/gl/admin/settings/notifications.json -trans.he = public/language/he/admin/settings/notifications.json -trans.hu = public/language/hu/admin/settings/notifications.json -trans.tr = public/language/tr/admin/settings/notifications.json -trans.zh_CN = public/language/zh-CN/admin/settings/notifications.json -trans.ko = public/language/ko/admin/settings/notifications.json -trans.lv = public/language/lv/admin/settings/notifications.json -trans.nb = public/language/nb/admin/settings/notifications.json -trans.pl = public/language/pl/admin/settings/notifications.json -trans.bg = public/language/bg/admin/settings/notifications.json -trans.da = public/language/da/admin/settings/notifications.json -trans.de = public/language/de/admin/settings/notifications.json -trans.hr = public/language/hr/admin/settings/notifications.json -trans.pt_BR = public/language/pt-BR/admin/settings/notifications.json -trans.et = public/language/et/admin/settings/notifications.json -trans.lt = public/language/lt/admin/settings/notifications.json -trans.es = public/language/es/admin/settings/notifications.json -trans.fa_IR = public/language/fa-IR/admin/settings/notifications.json -trans.ja = public/language/ja/admin/settings/notifications.json - -[o:nodebb:p:nodebb:r:admin-settings-pagination] -file_filter = public/language//admin/settings/pagination.json -source_file = public/language/en-GB/admin/settings/pagination.json -source_lang = en_GB -type = KEYVALUEJSON -trans.sq_AL = public/language/sq-AL/admin/settings/pagination.json -trans.th = public/language/th/admin/settings/pagination.json -trans.de = public/language/de/admin/settings/pagination.json -trans.ru = public/language/ru/admin/settings/pagination.json -trans.rw = public/language/rw/admin/settings/pagination.json -trans.sc = public/language/sc/admin/settings/pagination.json -trans.sk = public/language/sk/admin/settings/pagination.json -trans.lv = public/language/lv/admin/settings/pagination.json -trans.ar = public/language/ar/admin/settings/pagination.json -trans.el = public/language/el/admin/settings/pagination.json -trans.en_US = public/language/en-US/admin/settings/pagination.json -trans.et = public/language/et/admin/settings/pagination.json -trans.fr = public/language/fr/admin/settings/pagination.json -trans.bg = public/language/bg/admin/settings/pagination.json -trans.fi = public/language/fi/admin/settings/pagination.json -trans.ja = public/language/ja/admin/settings/pagination.json -trans.ms = public/language/ms/admin/settings/pagination.json -trans.uk = public/language/uk/admin/settings/pagination.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/pagination.json -trans.hu = public/language/hu/admin/settings/pagination.json -trans.ko = public/language/ko/admin/settings/pagination.json -trans.lt = public/language/lt/admin/settings/pagination.json -trans.nl = public/language/nl/admin/settings/pagination.json -trans.hr = public/language/hr/admin/settings/pagination.json -trans.pl = public/language/pl/admin/settings/pagination.json -trans.pt_BR = public/language/pt-BR/admin/settings/pagination.json -trans.cs = public/language/cs/admin/settings/pagination.json -trans.da = public/language/da/admin/settings/pagination.json -trans.es = public/language/es/admin/settings/pagination.json -trans.gl = public/language/gl/admin/settings/pagination.json -trans.he = public/language/he/admin/settings/pagination.json -trans.pt_PT = public/language/pt-PT/admin/settings/pagination.json -trans.ro = public/language/ro/admin/settings/pagination.json -trans.id = public/language/id/admin/settings/pagination.json -trans.tr = public/language/tr/admin/settings/pagination.json -trans.vi = public/language/vi/admin/settings/pagination.json -trans.fa_IR = public/language/fa-IR/admin/settings/pagination.json -trans.it = public/language/it/admin/settings/pagination.json -trans.sl = public/language/sl/admin/settings/pagination.json -trans.zh_CN = public/language/zh-CN/admin/settings/pagination.json -trans.zh_TW = public/language/zh-TW/admin/settings/pagination.json -trans.bn = public/language/bn/admin/settings/pagination.json -trans.hy = public/language/hy/admin/settings/pagination.json -trans.nb = public/language/nb/admin/settings/pagination.json -trans.sr = public/language/sr/admin/settings/pagination.json -trans.sv = public/language/sv/admin/settings/pagination.json - -[o:nodebb:p:nodebb:r:admin-settings-post] -file_filter = public/language//admin/settings/post.json -source_file = public/language/en-GB/admin/settings/post.json -source_lang = en_GB -type = KEYVALUEJSON -trans.id = public/language/id/admin/settings/post.json -trans.bn = public/language/bn/admin/settings/post.json -trans.da = public/language/da/admin/settings/post.json -trans.de = public/language/de/admin/settings/post.json -trans.en_US = public/language/en-US/admin/settings/post.json -trans.ms = public/language/ms/admin/settings/post.json -trans.ro = public/language/ro/admin/settings/post.json -trans.zh_TW = public/language/zh-TW/admin/settings/post.json -trans.cs = public/language/cs/admin/settings/post.json -trans.he = public/language/he/admin/settings/post.json -trans.ja = public/language/ja/admin/settings/post.json -trans.ko = public/language/ko/admin/settings/post.json -trans.hr = public/language/hr/admin/settings/post.json -trans.sq_AL = public/language/sq-AL/admin/settings/post.json -trans.lv = public/language/lv/admin/settings/post.json -trans.nl = public/language/nl/admin/settings/post.json -trans.pt_PT = public/language/pt-PT/admin/settings/post.json -trans.sr = public/language/sr/admin/settings/post.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/post.json -trans.et = public/language/et/admin/settings/post.json -trans.hu = public/language/hu/admin/settings/post.json -trans.it = public/language/it/admin/settings/post.json -trans.th = public/language/th/admin/settings/post.json -trans.gl = public/language/gl/admin/settings/post.json -trans.nb = public/language/nb/admin/settings/post.json -trans.sc = public/language/sc/admin/settings/post.json -trans.zh_CN = public/language/zh-CN/admin/settings/post.json -trans.rw = public/language/rw/admin/settings/post.json -trans.sv = public/language/sv/admin/settings/post.json -trans.vi = public/language/vi/admin/settings/post.json -trans.ar = public/language/ar/admin/settings/post.json -trans.el = public/language/el/admin/settings/post.json -trans.fa_IR = public/language/fa-IR/admin/settings/post.json -trans.fi = public/language/fi/admin/settings/post.json -trans.ru = public/language/ru/admin/settings/post.json -trans.bg = public/language/bg/admin/settings/post.json -trans.es = public/language/es/admin/settings/post.json -trans.hy = public/language/hy/admin/settings/post.json -trans.pt_BR = public/language/pt-BR/admin/settings/post.json -trans.sl = public/language/sl/admin/settings/post.json -trans.tr = public/language/tr/admin/settings/post.json -trans.uk = public/language/uk/admin/settings/post.json -trans.fr = public/language/fr/admin/settings/post.json -trans.lt = public/language/lt/admin/settings/post.json -trans.pl = public/language/pl/admin/settings/post.json -trans.sk = public/language/sk/admin/settings/post.json - -[o:nodebb:p:nodebb:r:admin-settings-reputation] -file_filter = public/language//admin/settings/reputation.json -source_file = public/language/en-GB/admin/settings/reputation.json -source_lang = en_GB -type = KEYVALUEJSON -trans.fi = public/language/fi/admin/settings/reputation.json -trans.ja = public/language/ja/admin/settings/reputation.json -trans.lt = public/language/lt/admin/settings/reputation.json -trans.pl = public/language/pl/admin/settings/reputation.json -trans.ro = public/language/ro/admin/settings/reputation.json -trans.bg = public/language/bg/admin/settings/reputation.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/reputation.json -trans.fa_IR = public/language/fa-IR/admin/settings/reputation.json -trans.sl = public/language/sl/admin/settings/reputation.json -trans.sv = public/language/sv/admin/settings/reputation.json -trans.uk = public/language/uk/admin/settings/reputation.json -trans.sr = public/language/sr/admin/settings/reputation.json -trans.zh_CN = public/language/zh-CN/admin/settings/reputation.json -trans.ar = public/language/ar/admin/settings/reputation.json -trans.el = public/language/el/admin/settings/reputation.json -trans.es = public/language/es/admin/settings/reputation.json -trans.sc = public/language/sc/admin/settings/reputation.json -trans.hr = public/language/hr/admin/settings/reputation.json -trans.ko = public/language/ko/admin/settings/reputation.json -trans.nb = public/language/nb/admin/settings/reputation.json -trans.bn = public/language/bn/admin/settings/reputation.json -trans.de = public/language/de/admin/settings/reputation.json -trans.et = public/language/et/admin/settings/reputation.json -trans.rw = public/language/rw/admin/settings/reputation.json -trans.th = public/language/th/admin/settings/reputation.json -trans.zh_TW = public/language/zh-TW/admin/settings/reputation.json -trans.fr = public/language/fr/admin/settings/reputation.json -trans.it = public/language/it/admin/settings/reputation.json -trans.ru = public/language/ru/admin/settings/reputation.json -trans.pt_PT = public/language/pt-PT/admin/settings/reputation.json -trans.sk = public/language/sk/admin/settings/reputation.json -trans.id = public/language/id/admin/settings/reputation.json -trans.ms = public/language/ms/admin/settings/reputation.json -trans.nl = public/language/nl/admin/settings/reputation.json -trans.he = public/language/he/admin/settings/reputation.json -trans.sq_AL = public/language/sq-AL/admin/settings/reputation.json -trans.tr = public/language/tr/admin/settings/reputation.json -trans.cs = public/language/cs/admin/settings/reputation.json -trans.da = public/language/da/admin/settings/reputation.json -trans.en_US = public/language/en-US/admin/settings/reputation.json -trans.lv = public/language/lv/admin/settings/reputation.json -trans.pt_BR = public/language/pt-BR/admin/settings/reputation.json -trans.vi = public/language/vi/admin/settings/reputation.json -trans.gl = public/language/gl/admin/settings/reputation.json -trans.hu = public/language/hu/admin/settings/reputation.json -trans.hy = public/language/hy/admin/settings/reputation.json - -[o:nodebb:p:nodebb:r:admin-settings-social] -file_filter = public/language//admin/settings/social.json -source_file = public/language/en-GB/admin/settings/social.json -source_lang = en_GB -type = KEYVALUEJSON -trans.nl = public/language/nl/admin/settings/social.json -trans.sc = public/language/sc/admin/settings/social.json -trans.sv = public/language/sv/admin/settings/social.json -trans.rw = public/language/rw/admin/settings/social.json -trans.bn = public/language/bn/admin/settings/social.json -trans.hr = public/language/hr/admin/settings/social.json -trans.id = public/language/id/admin/settings/social.json -trans.pt_PT = public/language/pt-PT/admin/settings/social.json -trans.de = public/language/de/admin/settings/social.json -trans.hu = public/language/hu/admin/settings/social.json -trans.pt_BR = public/language/pt-BR/admin/settings/social.json -trans.ja = public/language/ja/admin/settings/social.json -trans.sq_AL = public/language/sq-AL/admin/settings/social.json -trans.zh_TW = public/language/zh-TW/admin/settings/social.json -trans.cs = public/language/cs/admin/settings/social.json -trans.en_US = public/language/en-US/admin/settings/social.json -trans.fi = public/language/fi/admin/settings/social.json -trans.nb = public/language/nb/admin/settings/social.json -trans.pl = public/language/pl/admin/settings/social.json -trans.th = public/language/th/admin/settings/social.json -trans.bg = public/language/bg/admin/settings/social.json -trans.lt = public/language/lt/admin/settings/social.json -trans.lv = public/language/lv/admin/settings/social.json -trans.ko = public/language/ko/admin/settings/social.json -trans.es = public/language/es/admin/settings/social.json -trans.fr = public/language/fr/admin/settings/social.json -trans.he = public/language/he/admin/settings/social.json -trans.fa_IR = public/language/fa-IR/admin/settings/social.json -trans.hy = public/language/hy/admin/settings/social.json -trans.ms = public/language/ms/admin/settings/social.json -trans.ru = public/language/ru/admin/settings/social.json -trans.sk = public/language/sk/admin/settings/social.json -trans.ar = public/language/ar/admin/settings/social.json -trans.el = public/language/el/admin/settings/social.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/social.json -trans.uk = public/language/uk/admin/settings/social.json -trans.sl = public/language/sl/admin/settings/social.json -trans.sr = public/language/sr/admin/settings/social.json -trans.tr = public/language/tr/admin/settings/social.json -trans.it = public/language/it/admin/settings/social.json -trans.ro = public/language/ro/admin/settings/social.json -trans.vi = public/language/vi/admin/settings/social.json -trans.zh_CN = public/language/zh-CN/admin/settings/social.json -trans.da = public/language/da/admin/settings/social.json -trans.et = public/language/et/admin/settings/social.json -trans.gl = public/language/gl/admin/settings/social.json - -[o:nodebb:p:nodebb:r:admin-settings-sockets] -file_filter = public/language//admin/settings/sockets.json -source_file = public/language/en-GB/admin/settings/sockets.json -source_lang = en_GB -type = KEYVALUEJSON -trans.uk = public/language/uk/admin/settings/sockets.json -trans.en_US = public/language/en-US/admin/settings/sockets.json -trans.gl = public/language/gl/admin/settings/sockets.json -trans.ja = public/language/ja/admin/settings/sockets.json -trans.pt_BR = public/language/pt-BR/admin/settings/sockets.json -trans.sc = public/language/sc/admin/settings/sockets.json -trans.tr = public/language/tr/admin/settings/sockets.json -trans.da = public/language/da/admin/settings/sockets.json -trans.lv = public/language/lv/admin/settings/sockets.json -trans.sk = public/language/sk/admin/settings/sockets.json -trans.sr = public/language/sr/admin/settings/sockets.json -trans.vi = public/language/vi/admin/settings/sockets.json -trans.ar = public/language/ar/admin/settings/sockets.json -trans.cs = public/language/cs/admin/settings/sockets.json -trans.de = public/language/de/admin/settings/sockets.json -trans.hy = public/language/hy/admin/settings/sockets.json -trans.id = public/language/id/admin/settings/sockets.json -trans.rw = public/language/rw/admin/settings/sockets.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/sockets.json -trans.fi = public/language/fi/admin/settings/sockets.json -trans.it = public/language/it/admin/settings/sockets.json -trans.ro = public/language/ro/admin/settings/sockets.json -trans.nb = public/language/nb/admin/settings/sockets.json -trans.sq_AL = public/language/sq-AL/admin/settings/sockets.json -trans.bg = public/language/bg/admin/settings/sockets.json -trans.bn = public/language/bn/admin/settings/sockets.json -trans.es = public/language/es/admin/settings/sockets.json -trans.fr = public/language/fr/admin/settings/sockets.json -trans.hr = public/language/hr/admin/settings/sockets.json -trans.ko = public/language/ko/admin/settings/sockets.json -trans.zh_TW = public/language/zh-TW/admin/settings/sockets.json -trans.el = public/language/el/admin/settings/sockets.json -trans.he = public/language/he/admin/settings/sockets.json -trans.ms = public/language/ms/admin/settings/sockets.json -trans.sv = public/language/sv/admin/settings/sockets.json -trans.et = public/language/et/admin/settings/sockets.json -trans.pl = public/language/pl/admin/settings/sockets.json -trans.ru = public/language/ru/admin/settings/sockets.json -trans.zh_CN = public/language/zh-CN/admin/settings/sockets.json -trans.th = public/language/th/admin/settings/sockets.json -trans.fa_IR = public/language/fa-IR/admin/settings/sockets.json -trans.hu = public/language/hu/admin/settings/sockets.json -trans.lt = public/language/lt/admin/settings/sockets.json -trans.nl = public/language/nl/admin/settings/sockets.json -trans.pt_PT = public/language/pt-PT/admin/settings/sockets.json -trans.sl = public/language/sl/admin/settings/sockets.json - -[o:nodebb:p:nodebb:r:admin-settings-sounds] -file_filter = public/language//admin/settings/sounds.json -source_file = public/language/en-GB/admin/settings/sounds.json -source_lang = en_GB -type = KEYVALUEJSON -trans.sv = public/language/sv/admin/settings/sounds.json -trans.de = public/language/de/admin/settings/sounds.json -trans.el = public/language/el/admin/settings/sounds.json -trans.es = public/language/es/admin/settings/sounds.json -trans.he = public/language/he/admin/settings/sounds.json -trans.it = public/language/it/admin/settings/sounds.json -trans.pt_BR = public/language/pt-BR/admin/settings/sounds.json -trans.sq_AL = public/language/sq-AL/admin/settings/sounds.json -trans.vi = public/language/vi/admin/settings/sounds.json -trans.hr = public/language/hr/admin/settings/sounds.json -trans.hu = public/language/hu/admin/settings/sounds.json -trans.bg = public/language/bg/admin/settings/sounds.json -trans.ja = public/language/ja/admin/settings/sounds.json -trans.lt = public/language/lt/admin/settings/sounds.json -trans.nl = public/language/nl/admin/settings/sounds.json -trans.ru = public/language/ru/admin/settings/sounds.json -trans.cs = public/language/cs/admin/settings/sounds.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/sounds.json -trans.fa_IR = public/language/fa-IR/admin/settings/sounds.json -trans.fi = public/language/fi/admin/settings/sounds.json -trans.nb = public/language/nb/admin/settings/sounds.json -trans.th = public/language/th/admin/settings/sounds.json -trans.ar = public/language/ar/admin/settings/sounds.json -trans.da = public/language/da/admin/settings/sounds.json -trans.gl = public/language/gl/admin/settings/sounds.json -trans.lv = public/language/lv/admin/settings/sounds.json -trans.ms = public/language/ms/admin/settings/sounds.json -trans.sc = public/language/sc/admin/settings/sounds.json -trans.sr = public/language/sr/admin/settings/sounds.json -trans.bn = public/language/bn/admin/settings/sounds.json -trans.en_US = public/language/en-US/admin/settings/sounds.json -trans.hy = public/language/hy/admin/settings/sounds.json -trans.sk = public/language/sk/admin/settings/sounds.json -trans.sl = public/language/sl/admin/settings/sounds.json -trans.uk = public/language/uk/admin/settings/sounds.json -trans.zh_CN = public/language/zh-CN/admin/settings/sounds.json -trans.et = public/language/et/admin/settings/sounds.json -trans.fr = public/language/fr/admin/settings/sounds.json -trans.ko = public/language/ko/admin/settings/sounds.json -trans.ro = public/language/ro/admin/settings/sounds.json -trans.zh_TW = public/language/zh-TW/admin/settings/sounds.json -trans.id = public/language/id/admin/settings/sounds.json -trans.pl = public/language/pl/admin/settings/sounds.json -trans.pt_PT = public/language/pt-PT/admin/settings/sounds.json -trans.rw = public/language/rw/admin/settings/sounds.json -trans.tr = public/language/tr/admin/settings/sounds.json - -[o:nodebb:p:nodebb:r:admin-settings-tags] -file_filter = public/language//admin/settings/tags.json -source_file = public/language/en-GB/admin/settings/tags.json -source_lang = en_GB -type = KEYVALUEJSON -trans.bg = public/language/bg/admin/settings/tags.json -trans.cs = public/language/cs/admin/settings/tags.json -trans.de = public/language/de/admin/settings/tags.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/tags.json -trans.lv = public/language/lv/admin/settings/tags.json -trans.th = public/language/th/admin/settings/tags.json -trans.zh_TW = public/language/zh-TW/admin/settings/tags.json -trans.hu = public/language/hu/admin/settings/tags.json -trans.it = public/language/it/admin/settings/tags.json -trans.pt_BR = public/language/pt-BR/admin/settings/tags.json -trans.rw = public/language/rw/admin/settings/tags.json -trans.sk = public/language/sk/admin/settings/tags.json -trans.sv = public/language/sv/admin/settings/tags.json -trans.ar = public/language/ar/admin/settings/tags.json -trans.gl = public/language/gl/admin/settings/tags.json -trans.ja = public/language/ja/admin/settings/tags.json -trans.lt = public/language/lt/admin/settings/tags.json -trans.sc = public/language/sc/admin/settings/tags.json -trans.zh_CN = public/language/zh-CN/admin/settings/tags.json -trans.ro = public/language/ro/admin/settings/tags.json -trans.bn = public/language/bn/admin/settings/tags.json -trans.hr = public/language/hr/admin/settings/tags.json -trans.ko = public/language/ko/admin/settings/tags.json -trans.nb = public/language/nb/admin/settings/tags.json -trans.el = public/language/el/admin/settings/tags.json -trans.et = public/language/et/admin/settings/tags.json -trans.he = public/language/he/admin/settings/tags.json -trans.ms = public/language/ms/admin/settings/tags.json -trans.nl = public/language/nl/admin/settings/tags.json -trans.sl = public/language/sl/admin/settings/tags.json -trans.tr = public/language/tr/admin/settings/tags.json -trans.es = public/language/es/admin/settings/tags.json -trans.fr = public/language/fr/admin/settings/tags.json -trans.hy = public/language/hy/admin/settings/tags.json -trans.pl = public/language/pl/admin/settings/tags.json -trans.ru = public/language/ru/admin/settings/tags.json -trans.sq_AL = public/language/sq-AL/admin/settings/tags.json -trans.sr = public/language/sr/admin/settings/tags.json -trans.uk = public/language/uk/admin/settings/tags.json -trans.da = public/language/da/admin/settings/tags.json -trans.en_US = public/language/en-US/admin/settings/tags.json -trans.fa_IR = public/language/fa-IR/admin/settings/tags.json -trans.fi = public/language/fi/admin/settings/tags.json -trans.id = public/language/id/admin/settings/tags.json -trans.pt_PT = public/language/pt-PT/admin/settings/tags.json -trans.vi = public/language/vi/admin/settings/tags.json - -[o:nodebb:p:nodebb:r:admin-settings-uploads] -file_filter = public/language//admin/settings/uploads.json -source_file = public/language/en-GB/admin/settings/uploads.json -source_lang = en_GB -type = KEYVALUEJSON -trans.ar = public/language/ar/admin/settings/uploads.json -trans.it = public/language/it/admin/settings/uploads.json -trans.ko = public/language/ko/admin/settings/uploads.json -trans.sk = public/language/sk/admin/settings/uploads.json -trans.sq_AL = public/language/sq-AL/admin/settings/uploads.json -trans.fa_IR = public/language/fa-IR/admin/settings/uploads.json -trans.he = public/language/he/admin/settings/uploads.json -trans.ja = public/language/ja/admin/settings/uploads.json -trans.nb = public/language/nb/admin/settings/uploads.json -trans.nl = public/language/nl/admin/settings/uploads.json -trans.zh_TW = public/language/zh-TW/admin/settings/uploads.json -trans.ro = public/language/ro/admin/settings/uploads.json -trans.sl = public/language/sl/admin/settings/uploads.json -trans.da = public/language/da/admin/settings/uploads.json -trans.es = public/language/es/admin/settings/uploads.json -trans.et = public/language/et/admin/settings/uploads.json -trans.hr = public/language/hr/admin/settings/uploads.json -trans.id = public/language/id/admin/settings/uploads.json -trans.pt_BR = public/language/pt-BR/admin/settings/uploads.json -trans.uk = public/language/uk/admin/settings/uploads.json -trans.vi = public/language/vi/admin/settings/uploads.json -trans.th = public/language/th/admin/settings/uploads.json -trans.bg = public/language/bg/admin/settings/uploads.json -trans.el = public/language/el/admin/settings/uploads.json -trans.hu = public/language/hu/admin/settings/uploads.json -trans.lv = public/language/lv/admin/settings/uploads.json -trans.ms = public/language/ms/admin/settings/uploads.json -trans.pt_PT = public/language/pt-PT/admin/settings/uploads.json -trans.lt = public/language/lt/admin/settings/uploads.json -trans.bn = public/language/bn/admin/settings/uploads.json -trans.cs = public/language/cs/admin/settings/uploads.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/uploads.json -trans.fi = public/language/fi/admin/settings/uploads.json -trans.fr = public/language/fr/admin/settings/uploads.json -trans.hy = public/language/hy/admin/settings/uploads.json -trans.gl = public/language/gl/admin/settings/uploads.json -trans.ru = public/language/ru/admin/settings/uploads.json -trans.sr = public/language/sr/admin/settings/uploads.json -trans.sv = public/language/sv/admin/settings/uploads.json -trans.zh_CN = public/language/zh-CN/admin/settings/uploads.json -trans.de = public/language/de/admin/settings/uploads.json -trans.en_US = public/language/en-US/admin/settings/uploads.json -trans.pl = public/language/pl/admin/settings/uploads.json -trans.rw = public/language/rw/admin/settings/uploads.json -trans.sc = public/language/sc/admin/settings/uploads.json -trans.tr = public/language/tr/admin/settings/uploads.json - -[o:nodebb:p:nodebb:r:admin-settings-user] -file_filter = public/language//admin/settings/user.json -source_file = public/language/en-GB/admin/settings/user.json -source_lang = en_GB -type = KEYVALUEJSON -trans.da = public/language/da/admin/settings/user.json -trans.el = public/language/el/admin/settings/user.json -trans.he = public/language/he/admin/settings/user.json -trans.ro = public/language/ro/admin/settings/user.json -trans.sq_AL = public/language/sq-AL/admin/settings/user.json -trans.gl = public/language/gl/admin/settings/user.json -trans.hu = public/language/hu/admin/settings/user.json -trans.nb = public/language/nb/admin/settings/user.json -trans.sv = public/language/sv/admin/settings/user.json -trans.uk = public/language/uk/admin/settings/user.json -trans.cs = public/language/cs/admin/settings/user.json -trans.en_US = public/language/en-US/admin/settings/user.json -trans.fa_IR = public/language/fa-IR/admin/settings/user.json -trans.fi = public/language/fi/admin/settings/user.json -trans.lv = public/language/lv/admin/settings/user.json -trans.ms = public/language/ms/admin/settings/user.json -trans.pl = public/language/pl/admin/settings/user.json -trans.ru = public/language/ru/admin/settings/user.json -trans.zh_CN = public/language/zh-CN/admin/settings/user.json -trans.hr = public/language/hr/admin/settings/user.json -trans.id = public/language/id/admin/settings/user.json -trans.it = public/language/it/admin/settings/user.json -trans.sk = public/language/sk/admin/settings/user.json -trans.sl = public/language/sl/admin/settings/user.json -trans.sr = public/language/sr/admin/settings/user.json -trans.tr = public/language/tr/admin/settings/user.json -trans.vi = public/language/vi/admin/settings/user.json -trans.de = public/language/de/admin/settings/user.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/user.json -trans.hy = public/language/hy/admin/settings/user.json -trans.pt_PT = public/language/pt-PT/admin/settings/user.json -trans.th = public/language/th/admin/settings/user.json -trans.zh_TW = public/language/zh-TW/admin/settings/user.json -trans.bn = public/language/bn/admin/settings/user.json -trans.nl = public/language/nl/admin/settings/user.json -trans.pt_BR = public/language/pt-BR/admin/settings/user.json -trans.rw = public/language/rw/admin/settings/user.json -trans.bg = public/language/bg/admin/settings/user.json -trans.fr = public/language/fr/admin/settings/user.json -trans.ko = public/language/ko/admin/settings/user.json -trans.ar = public/language/ar/admin/settings/user.json -trans.es = public/language/es/admin/settings/user.json -trans.et = public/language/et/admin/settings/user.json -trans.ja = public/language/ja/admin/settings/user.json -trans.lt = public/language/lt/admin/settings/user.json -trans.sc = public/language/sc/admin/settings/user.json - -[o:nodebb:p:nodebb:r:admin-settings-web-crawler] -file_filter = public/language//admin/settings/web-crawler.json -source_file = public/language/en-GB/admin/settings/web-crawler.json -source_lang = en_GB -type = KEYVALUEJSON -trans.cs = public/language/cs/admin/settings/web-crawler.json -trans.es = public/language/es/admin/settings/web-crawler.json -trans.fr = public/language/fr/admin/settings/web-crawler.json -trans.ko = public/language/ko/admin/settings/web-crawler.json -trans.pl = public/language/pl/admin/settings/web-crawler.json -trans.tr = public/language/tr/admin/settings/web-crawler.json -trans.uk = public/language/uk/admin/settings/web-crawler.json -trans.bg = public/language/bg/admin/settings/web-crawler.json -trans.el = public/language/el/admin/settings/web-crawler.json -trans.en@pirate = public/language/en-x-pirate/admin/settings/web-crawler.json -trans.fa_IR = public/language/fa-IR/admin/settings/web-crawler.json -trans.ms = public/language/ms/admin/settings/web-crawler.json -trans.th = public/language/th/admin/settings/web-crawler.json -trans.gl = public/language/gl/admin/settings/web-crawler.json -trans.id = public/language/id/admin/settings/web-crawler.json -trans.sk = public/language/sk/admin/settings/web-crawler.json -trans.rw = public/language/rw/admin/settings/web-crawler.json -trans.da = public/language/da/admin/settings/web-crawler.json -trans.hr = public/language/hr/admin/settings/web-crawler.json -trans.hu = public/language/hu/admin/settings/web-crawler.json -trans.ja = public/language/ja/admin/settings/web-crawler.json -trans.lv = public/language/lv/admin/settings/web-crawler.json -trans.nl = public/language/nl/admin/settings/web-crawler.json -trans.pt_BR = public/language/pt-BR/admin/settings/web-crawler.json -trans.vi = public/language/vi/admin/settings/web-crawler.json -trans.en_US = public/language/en-US/admin/settings/web-crawler.json -trans.et = public/language/et/admin/settings/web-crawler.json -trans.fi = public/language/fi/admin/settings/web-crawler.json -trans.sq_AL = public/language/sq-AL/admin/settings/web-crawler.json -trans.sv = public/language/sv/admin/settings/web-crawler.json -trans.ar = public/language/ar/admin/settings/web-crawler.json -trans.de = public/language/de/admin/settings/web-crawler.json -trans.hy = public/language/hy/admin/settings/web-crawler.json -trans.nb = public/language/nb/admin/settings/web-crawler.json -trans.ro = public/language/ro/admin/settings/web-crawler.json -trans.sr = public/language/sr/admin/settings/web-crawler.json -trans.zh_TW = public/language/zh-TW/admin/settings/web-crawler.json -trans.he = public/language/he/admin/settings/web-crawler.json -trans.it = public/language/it/admin/settings/web-crawler.json -trans.lt = public/language/lt/admin/settings/web-crawler.json -trans.ru = public/language/ru/admin/settings/web-crawler.json -trans.sl = public/language/sl/admin/settings/web-crawler.json -trans.zh_CN = public/language/zh-CN/admin/settings/web-crawler.json -trans.bn = public/language/bn/admin/settings/web-crawler.json -trans.pt_PT = public/language/pt-PT/admin/settings/web-crawler.json -trans.sc = public/language/sc/admin/settings/web-crawler.json - -[o:nodebb:p:nodebb:r:category] -file_filter = public/language//category.json -source_file = public/language/en-GB/category.json -source_lang = en_GB -type = KEYVALUEJSON -trans.th = public/language/th/category.json -trans.bg = public/language/bg/category.json -trans.hr = public/language/hr/category.json -trans.hy = public/language/hy/category.json -trans.sk = public/language/sk/category.json -trans.sl = public/language/sl/category.json -trans.sq_AL = public/language/sq-AL/category.json -trans.sv = public/language/sv/category.json -trans.vi = public/language/vi/category.json -trans.da = public/language/da/category.json -trans.en_US = public/language/en-US/category.json -trans.gl = public/language/gl/category.json -trans.ko = public/language/ko/category.json -trans.lt = public/language/lt/category.json -trans.pt_BR = public/language/pt-BR/category.json -trans.hu = public/language/hu/category.json -trans.lv = public/language/lv/category.json -trans.ro = public/language/ro/category.json -trans.ru = public/language/ru/category.json -trans.sr = public/language/sr/category.json -trans.bn = public/language/bn/category.json -trans.he = public/language/he/category.json -trans.nl = public/language/nl/category.json -trans.sc = public/language/sc/category.json -trans.zh_CN = public/language/zh-CN/category.json -trans.fi = public/language/fi/category.json -trans.ja = public/language/ja/category.json -trans.nb = public/language/nb/category.json -trans.pl = public/language/pl/category.json -trans.zh_TW = public/language/zh-TW/category.json -trans.ar = public/language/ar/category.json -trans.cs = public/language/cs/category.json -trans.fa_IR = public/language/fa-IR/category.json -trans.ms = public/language/ms/category.json -trans.pt_PT = public/language/pt-PT/category.json -trans.tr = public/language/tr/category.json -trans.en@pirate = public/language/en-x-pirate/category.json -trans.fr = public/language/fr/category.json -trans.id = public/language/id/category.json -trans.uk = public/language/uk/category.json -trans.de = public/language/de/category.json -trans.el = public/language/el/category.json -trans.es = public/language/es/category.json -trans.et = public/language/et/category.json -trans.it = public/language/it/category.json -trans.rw = public/language/rw/category.json - -[o:nodebb:p:nodebb:r:email] -file_filter = public/language//email.json -source_file = public/language/en-GB/email.json -source_lang = en_GB -type = KEYVALUEJSON -trans.sk = public/language/sk/email.json -trans.zh_TW = public/language/zh-TW/email.json -trans.el = public/language/el/email.json -trans.fa_IR = public/language/fa-IR/email.json -trans.fi = public/language/fi/email.json -trans.id = public/language/id/email.json -trans.ko = public/language/ko/email.json -trans.en@pirate = public/language/en-x-pirate/email.json -trans.it = public/language/it/email.json -trans.lv = public/language/lv/email.json -trans.uk = public/language/uk/email.json -trans.zh_CN = public/language/zh-CN/email.json -trans.sv = public/language/sv/email.json -trans.bn = public/language/bn/email.json -trans.cs = public/language/cs/email.json -trans.ms = public/language/ms/email.json -trans.ro = public/language/ro/email.json -trans.ru = public/language/ru/email.json -trans.de = public/language/de/email.json -trans.hu = public/language/hu/email.json -trans.hy = public/language/hy/email.json -trans.sl = public/language/sl/email.json -trans.th = public/language/th/email.json -trans.ar = public/language/ar/email.json -trans.es = public/language/es/email.json -trans.gl = public/language/gl/email.json -trans.he = public/language/he/email.json -trans.ja = public/language/ja/email.json -trans.bg = public/language/bg/email.json -trans.et = public/language/et/email.json -trans.hr = public/language/hr/email.json -trans.pl = public/language/pl/email.json -trans.da = public/language/da/email.json -trans.fr = public/language/fr/email.json -trans.lt = public/language/lt/email.json -trans.pt_PT = public/language/pt-PT/email.json -trans.sc = public/language/sc/email.json -trans.sq_AL = public/language/sq-AL/email.json -trans.sr = public/language/sr/email.json -trans.tr = public/language/tr/email.json -trans.en_US = public/language/en-US/email.json -trans.nb = public/language/nb/email.json -trans.nl = public/language/nl/email.json -trans.pt_BR = public/language/pt-BR/email.json -trans.rw = public/language/rw/email.json -trans.vi = public/language/vi/email.json - -[o:nodebb:p:nodebb:r:error] -file_filter = public/language//error.json -source_file = public/language/en-GB/error.json -source_lang = en_GB -type = KEYVALUEJSON -trans.de = public/language/de/error.json -trans.ko = public/language/ko/error.json -trans.lv = public/language/lv/error.json -trans.sk = public/language/sk/error.json -trans.cs = public/language/cs/error.json -trans.it = public/language/it/error.json -trans.nl = public/language/nl/error.json -trans.sc = public/language/sc/error.json -trans.sl = public/language/sl/error.json -trans.sq_AL = public/language/sq-AL/error.json -trans.tr = public/language/tr/error.json -trans.hu = public/language/hu/error.json -trans.fr = public/language/fr/error.json -trans.hy = public/language/hy/error.json -trans.zh_CN = public/language/zh-CN/error.json -trans.ar = public/language/ar/error.json -trans.et = public/language/et/error.json -trans.fi = public/language/fi/error.json -trans.he = public/language/he/error.json -trans.hr = public/language/hr/error.json -trans.lt = public/language/lt/error.json -trans.ru = public/language/ru/error.json -trans.rw = public/language/rw/error.json -trans.bn = public/language/bn/error.json -trans.vi = public/language/vi/error.json -trans.fa_IR = public/language/fa-IR/error.json -trans.gl = public/language/gl/error.json -trans.nb = public/language/nb/error.json -trans.pl = public/language/pl/error.json -trans.ro = public/language/ro/error.json -trans.uk = public/language/uk/error.json -trans.es = public/language/es/error.json -trans.el = public/language/el/error.json -trans.en@pirate = public/language/en-x-pirate/error.json -trans.en_US = public/language/en-US/error.json -trans.ms = public/language/ms/error.json -trans.pt_PT = public/language/pt-PT/error.json -trans.bg = public/language/bg/error.json -trans.pt_BR = public/language/pt-BR/error.json -trans.sv = public/language/sv/error.json -trans.zh_TW = public/language/zh-TW/error.json -trans.da = public/language/da/error.json -trans.ja = public/language/ja/error.json -trans.sr = public/language/sr/error.json -trans.th = public/language/th/error.json -trans.id = public/language/id/error.json - -[o:nodebb:p:nodebb:r:flags] -file_filter = public/language//flags.json -source_file = public/language/en-GB/flags.json -source_lang = en_GB -type = KEYVALUEJSON -trans.nb = public/language/nb/flags.json -trans.ru = public/language/ru/flags.json -trans.sc = public/language/sc/flags.json -trans.fi = public/language/fi/flags.json -trans.hr = public/language/hr/flags.json -trans.lv = public/language/lv/flags.json -trans.ms = public/language/ms/flags.json -trans.ja = public/language/ja/flags.json -trans.nl = public/language/nl/flags.json -trans.pt_PT = public/language/pt-PT/flags.json -trans.th = public/language/th/flags.json -trans.el = public/language/el/flags.json -trans.en_US = public/language/en-US/flags.json -trans.gl = public/language/gl/flags.json -trans.hy = public/language/hy/flags.json -trans.vi = public/language/vi/flags.json -trans.rw = public/language/rw/flags.json -trans.sr = public/language/sr/flags.json -trans.zh_TW = public/language/zh-TW/flags.json -trans.sq_AL = public/language/sq-AL/flags.json -trans.sv = public/language/sv/flags.json -trans.fa_IR = public/language/fa-IR/flags.json -trans.id = public/language/id/flags.json -trans.ko = public/language/ko/flags.json -trans.pl = public/language/pl/flags.json -trans.de = public/language/de/flags.json -trans.en@pirate = public/language/en-x-pirate/flags.json -trans.he = public/language/he/flags.json -trans.zh_CN = public/language/zh-CN/flags.json -trans.lt = public/language/lt/flags.json -trans.da = public/language/da/flags.json -trans.es = public/language/es/flags.json -trans.et = public/language/et/flags.json -trans.hu = public/language/hu/flags.json -trans.tr = public/language/tr/flags.json -trans.bn = public/language/bn/flags.json -trans.it = public/language/it/flags.json -trans.pt_BR = public/language/pt-BR/flags.json -trans.sk = public/language/sk/flags.json -trans.ro = public/language/ro/flags.json -trans.sl = public/language/sl/flags.json -trans.ar = public/language/ar/flags.json -trans.bg = public/language/bg/flags.json -trans.cs = public/language/cs/flags.json -trans.fr = public/language/fr/flags.json - -[o:nodebb:p:nodebb:r:global] -file_filter = public/language//global.json -source_file = public/language/en-GB/global.json -source_lang = en_GB -type = KEYVALUEJSON -trans.ms = public/language/ms/global.json -trans.pl = public/language/pl/global.json -trans.ru = public/language/ru/global.json -trans.bn = public/language/bn/global.json -trans.fr = public/language/fr/global.json -trans.hr = public/language/hr/global.json -trans.hy = public/language/hy/global.json -trans.lv = public/language/lv/global.json -trans.fa_IR = public/language/fa-IR/global.json -trans.sl = public/language/sl/global.json -trans.uk = public/language/uk/global.json -trans.sc = public/language/sc/global.json -trans.sv = public/language/sv/global.json -trans.th = public/language/th/global.json -trans.zh_TW = public/language/zh-TW/global.json -trans.hu = public/language/hu/global.json -trans.sk = public/language/sk/global.json -trans.sr = public/language/sr/global.json -trans.tr = public/language/tr/global.json -trans.nb = public/language/nb/global.json -trans.pt_BR = public/language/pt-BR/global.json -trans.pt_PT = public/language/pt-PT/global.json -trans.bg = public/language/bg/global.json -trans.da = public/language/da/global.json -trans.fi = public/language/fi/global.json -trans.id = public/language/id/global.json -trans.lt = public/language/lt/global.json -trans.ro = public/language/ro/global.json -trans.de = public/language/de/global.json -trans.el = public/language/el/global.json -trans.vi = public/language/vi/global.json -trans.zh_CN = public/language/zh-CN/global.json -trans.en_US = public/language/en-US/global.json -trans.et = public/language/et/global.json -trans.gl = public/language/gl/global.json -trans.he = public/language/he/global.json -trans.ko = public/language/ko/global.json -trans.ja = public/language/ja/global.json -trans.nl = public/language/nl/global.json -trans.rw = public/language/rw/global.json -trans.ar = public/language/ar/global.json -trans.cs = public/language/cs/global.json -trans.en@pirate = public/language/en-x-pirate/global.json -trans.es = public/language/es/global.json -trans.it = public/language/it/global.json -trans.sq_AL = public/language/sq-AL/global.json - -[o:nodebb:p:nodebb:r:groups] -file_filter = public/language//groups.json -source_file = public/language/en-GB/groups.json -source_lang = en_GB -type = KEYVALUEJSON -trans.zh_TW = public/language/zh-TW/groups.json -trans.de = public/language/de/groups.json -trans.es = public/language/es/groups.json -trans.sc = public/language/sc/groups.json -trans.sr = public/language/sr/groups.json -trans.da = public/language/da/groups.json -trans.en@pirate = public/language/en-x-pirate/groups.json -trans.hy = public/language/hy/groups.json -trans.pt_PT = public/language/pt-PT/groups.json -trans.ms = public/language/ms/groups.json -trans.nb = public/language/nb/groups.json -trans.ro = public/language/ro/groups.json -trans.vi = public/language/vi/groups.json -trans.fa_IR = public/language/fa-IR/groups.json -trans.he = public/language/he/groups.json -trans.hr = public/language/hr/groups.json -trans.lv = public/language/lv/groups.json -trans.bg = public/language/bg/groups.json -trans.bn = public/language/bn/groups.json -trans.ja = public/language/ja/groups.json -trans.tr = public/language/tr/groups.json -trans.zh_CN = public/language/zh-CN/groups.json -trans.ar = public/language/ar/groups.json -trans.cs = public/language/cs/groups.json -trans.it = public/language/it/groups.json -trans.sk = public/language/sk/groups.json -trans.fi = public/language/fi/groups.json -trans.fr = public/language/fr/groups.json -trans.sq_AL = public/language/sq-AL/groups.json -trans.th = public/language/th/groups.json -trans.id = public/language/id/groups.json -trans.sl = public/language/sl/groups.json -trans.sv = public/language/sv/groups.json -trans.uk = public/language/uk/groups.json -trans.el = public/language/el/groups.json -trans.et = public/language/et/groups.json -trans.gl = public/language/gl/groups.json -trans.hu = public/language/hu/groups.json -trans.pl = public/language/pl/groups.json -trans.pt_BR = public/language/pt-BR/groups.json -trans.ru = public/language/ru/groups.json -trans.rw = public/language/rw/groups.json -trans.en_US = public/language/en-US/groups.json -trans.ko = public/language/ko/groups.json -trans.lt = public/language/lt/groups.json -trans.nl = public/language/nl/groups.json - -[o:nodebb:p:nodebb:r:ip-blacklist] -file_filter = public/language//ip-blacklist.json -source_file = public/language/en-GB/ip-blacklist.json -source_lang = en_GB -type = KEYVALUEJSON -trans.sr = public/language/sr/ip-blacklist.json -trans.et = public/language/et/ip-blacklist.json -trans.fi = public/language/fi/ip-blacklist.json -trans.hr = public/language/hr/ip-blacklist.json -trans.hu = public/language/hu/ip-blacklist.json -trans.ru = public/language/ru/ip-blacklist.json -trans.sk = public/language/sk/ip-blacklist.json -trans.sq_AL = public/language/sq-AL/ip-blacklist.json -trans.zh_CN = public/language/zh-CN/ip-blacklist.json -trans.da = public/language/da/ip-blacklist.json -trans.en@pirate = public/language/en-x-pirate/ip-blacklist.json -trans.he = public/language/he/ip-blacklist.json -trans.hy = public/language/hy/ip-blacklist.json -trans.lv = public/language/lv/ip-blacklist.json -trans.pt_BR = public/language/pt-BR/ip-blacklist.json -trans.sc = public/language/sc/ip-blacklist.json -trans.ar = public/language/ar/ip-blacklist.json -trans.fa_IR = public/language/fa-IR/ip-blacklist.json -trans.fr = public/language/fr/ip-blacklist.json -trans.gl = public/language/gl/ip-blacklist.json -trans.nb = public/language/nb/ip-blacklist.json -trans.sv = public/language/sv/ip-blacklist.json -trans.th = public/language/th/ip-blacklist.json -trans.bn = public/language/bn/ip-blacklist.json -trans.en_US = public/language/en-US/ip-blacklist.json -trans.ja = public/language/ja/ip-blacklist.json -trans.ms = public/language/ms/ip-blacklist.json -trans.nl = public/language/nl/ip-blacklist.json -trans.pt_PT = public/language/pt-PT/ip-blacklist.json -trans.ro = public/language/ro/ip-blacklist.json -trans.es = public/language/es/ip-blacklist.json -trans.id = public/language/id/ip-blacklist.json -trans.it = public/language/it/ip-blacklist.json -trans.uk = public/language/uk/ip-blacklist.json -trans.vi = public/language/vi/ip-blacklist.json -trans.zh_TW = public/language/zh-TW/ip-blacklist.json -trans.bg = public/language/bg/ip-blacklist.json -trans.de = public/language/de/ip-blacklist.json -trans.sl = public/language/sl/ip-blacklist.json -trans.pl = public/language/pl/ip-blacklist.json -trans.rw = public/language/rw/ip-blacklist.json -trans.cs = public/language/cs/ip-blacklist.json -trans.el = public/language/el/ip-blacklist.json -trans.ko = public/language/ko/ip-blacklist.json -trans.lt = public/language/lt/ip-blacklist.json -trans.tr = public/language/tr/ip-blacklist.json - -[o:nodebb:p:nodebb:r:language-1] -file_filter = public/language//language.json -source_file = public/language/en-GB/language.json -source_lang = en_GB -type = KEYVALUEJSON -trans.lt = public/language/lt/language.json -trans.vi = public/language/vi/language.json -trans.sr = public/language/sr/language.json -trans.tr = public/language/tr/language.json -trans.uk = public/language/uk/language.json -trans.bg = public/language/bg/language.json -trans.da = public/language/da/language.json -trans.en@pirate = public/language/en-x-pirate/language.json -trans.hr = public/language/hr/language.json -trans.rw = public/language/rw/language.json -trans.en_US = public/language/en-US/language.json -trans.et = public/language/et/language.json -trans.ja = public/language/ja/language.json -trans.nb = public/language/nb/language.json -trans.sk = public/language/sk/language.json -trans.el = public/language/el/language.json -trans.es = public/language/es/language.json -trans.fi = public/language/fi/language.json -trans.it = public/language/it/language.json -trans.pt_PT = public/language/pt-PT/language.json -trans.ro = public/language/ro/language.json -trans.th = public/language/th/language.json -trans.ar = public/language/ar/language.json -trans.bn = public/language/bn/language.json -trans.de = public/language/de/language.json -trans.ko = public/language/ko/language.json -trans.pl = public/language/pl/language.json -trans.gl = public/language/gl/language.json -trans.sq_AL = public/language/sq-AL/language.json -trans.zh_TW = public/language/zh-TW/language.json -trans.nl = public/language/nl/language.json -trans.ru = public/language/ru/language.json -trans.sc = public/language/sc/language.json -trans.cs = public/language/cs/language.json -trans.fr = public/language/fr/language.json -trans.he = public/language/he/language.json -trans.id = public/language/id/language.json -trans.lv = public/language/lv/language.json -trans.sl = public/language/sl/language.json -trans.sv = public/language/sv/language.json -trans.zh_CN = public/language/zh-CN/language.json -trans.fa_IR = public/language/fa-IR/language.json -trans.hu = public/language/hu/language.json -trans.hy = public/language/hy/language.json -trans.ms = public/language/ms/language.json -trans.pt_BR = public/language/pt-BR/language.json - -[o:nodebb:p:nodebb:r:login] -file_filter = public/language//login.json -source_file = public/language/en-GB/login.json -source_lang = en_GB -type = KEYVALUEJSON -trans.bn = public/language/bn/login.json -trans.cs = public/language/cs/login.json -trans.el = public/language/el/login.json -trans.ja = public/language/ja/login.json -trans.pt_BR = public/language/pt-BR/login.json -trans.ro = public/language/ro/login.json -trans.zh_TW = public/language/zh-TW/login.json -trans.bg = public/language/bg/login.json -trans.pt_PT = public/language/pt-PT/login.json -trans.sr = public/language/sr/login.json -trans.vi = public/language/vi/login.json -trans.zh_CN = public/language/zh-CN/login.json -trans.pl = public/language/pl/login.json -trans.gl = public/language/gl/login.json -trans.ko = public/language/ko/login.json -trans.lv = public/language/lv/login.json -trans.sl = public/language/sl/login.json -trans.sq_AL = public/language/sq-AL/login.json -trans.sv = public/language/sv/login.json -trans.tr = public/language/tr/login.json -trans.es = public/language/es/login.json -trans.sk = public/language/sk/login.json -trans.uk = public/language/uk/login.json -trans.it = public/language/it/login.json -trans.da = public/language/da/login.json -trans.fa_IR = public/language/fa-IR/login.json -trans.fi = public/language/fi/login.json -trans.fr = public/language/fr/login.json -trans.he = public/language/he/login.json -trans.hr = public/language/hr/login.json -trans.ar = public/language/ar/login.json -trans.en_US = public/language/en-US/login.json -trans.hu = public/language/hu/login.json -trans.ms = public/language/ms/login.json -trans.en@pirate = public/language/en-x-pirate/login.json -trans.hy = public/language/hy/login.json -trans.id = public/language/id/login.json -trans.nb = public/language/nb/login.json -trans.ru = public/language/ru/login.json -trans.rw = public/language/rw/login.json -trans.th = public/language/th/login.json -trans.et = public/language/et/login.json -trans.lt = public/language/lt/login.json -trans.nl = public/language/nl/login.json -trans.sc = public/language/sc/login.json -trans.de = public/language/de/login.json - -[o:nodebb:p:nodebb:r:modules] -file_filter = public/language//modules.json -source_file = public/language/en-GB/modules.json -source_lang = en_GB -type = KEYVALUEJSON -trans.sl = public/language/sl/modules.json -trans.sq_AL = public/language/sq-AL/modules.json -trans.da = public/language/da/modules.json -trans.et = public/language/et/modules.json -trans.fr = public/language/fr/modules.json -trans.lt = public/language/lt/modules.json -trans.ms = public/language/ms/modules.json -trans.sk = public/language/sk/modules.json -trans.vi = public/language/vi/modules.json -trans.fa_IR = public/language/fa-IR/modules.json -trans.hr = public/language/hr/modules.json -trans.lv = public/language/lv/modules.json -trans.nb = public/language/nb/modules.json -trans.ro = public/language/ro/modules.json -trans.sv = public/language/sv/modules.json -trans.en@pirate = public/language/en-x-pirate/modules.json -trans.tr = public/language/tr/modules.json -trans.cs = public/language/cs/modules.json -trans.de = public/language/de/modules.json -trans.fi = public/language/fi/modules.json -trans.he = public/language/he/modules.json -trans.hy = public/language/hy/modules.json -trans.sr = public/language/sr/modules.json -trans.el = public/language/el/modules.json -trans.hu = public/language/hu/modules.json -trans.ko = public/language/ko/modules.json -trans.es = public/language/es/modules.json -trans.id = public/language/id/modules.json -trans.nl = public/language/nl/modules.json -trans.sc = public/language/sc/modules.json -trans.th = public/language/th/modules.json -trans.zh_TW = public/language/zh-TW/modules.json -trans.bg = public/language/bg/modules.json -trans.bn = public/language/bn/modules.json -trans.en_US = public/language/en-US/modules.json -trans.it = public/language/it/modules.json -trans.pl = public/language/pl/modules.json -trans.uk = public/language/uk/modules.json -trans.rw = public/language/rw/modules.json -trans.zh_CN = public/language/zh-CN/modules.json -trans.ar = public/language/ar/modules.json -trans.gl = public/language/gl/modules.json -trans.ja = public/language/ja/modules.json -trans.pt_BR = public/language/pt-BR/modules.json -trans.pt_PT = public/language/pt-PT/modules.json -trans.ru = public/language/ru/modules.json - -[o:nodebb:p:nodebb:r:notifications] -file_filter = public/language//notifications.json -source_file = public/language/en-GB/notifications.json -source_lang = en_GB -type = KEYVALUEJSON -trans.ru = public/language/ru/notifications.json -trans.sq_AL = public/language/sq-AL/notifications.json -trans.el = public/language/el/notifications.json -trans.en_US = public/language/en-US/notifications.json -trans.ja = public/language/ja/notifications.json -trans.pl = public/language/pl/notifications.json -trans.sr = public/language/sr/notifications.json -trans.th = public/language/th/notifications.json -trans.tr = public/language/tr/notifications.json -trans.zh_CN = public/language/zh-CN/notifications.json -trans.cs = public/language/cs/notifications.json -trans.de = public/language/de/notifications.json -trans.fa_IR = public/language/fa-IR/notifications.json -trans.sl = public/language/sl/notifications.json -trans.sc = public/language/sc/notifications.json -trans.uk = public/language/uk/notifications.json -trans.bn = public/language/bn/notifications.json -trans.fi = public/language/fi/notifications.json -trans.lt = public/language/lt/notifications.json -trans.pt_PT = public/language/pt-PT/notifications.json -trans.es = public/language/es/notifications.json -trans.gl = public/language/gl/notifications.json -trans.sv = public/language/sv/notifications.json -trans.zh_TW = public/language/zh-TW/notifications.json -trans.pt_BR = public/language/pt-BR/notifications.json -trans.rw = public/language/rw/notifications.json -trans.lv = public/language/lv/notifications.json -trans.bg = public/language/bg/notifications.json -trans.he = public/language/he/notifications.json -trans.hu = public/language/hu/notifications.json -trans.it = public/language/it/notifications.json -trans.nl = public/language/nl/notifications.json -trans.ro = public/language/ro/notifications.json -trans.sk = public/language/sk/notifications.json -trans.vi = public/language/vi/notifications.json -trans.et = public/language/et/notifications.json -trans.hy = public/language/hy/notifications.json -trans.ko = public/language/ko/notifications.json -trans.ms = public/language/ms/notifications.json -trans.hr = public/language/hr/notifications.json -trans.id = public/language/id/notifications.json -trans.nb = public/language/nb/notifications.json -trans.ar = public/language/ar/notifications.json -trans.da = public/language/da/notifications.json -trans.en@pirate = public/language/en-x-pirate/notifications.json -trans.fr = public/language/fr/notifications.json - -[o:nodebb:p:nodebb:r:pages] -file_filter = public/language//pages.json -source_file = public/language/en-GB/pages.json -source_lang = en_GB -type = KEYVALUEJSON -trans.he = public/language/he/pages.json -trans.nb = public/language/nb/pages.json -trans.sv = public/language/sv/pages.json -trans.pt_BR = public/language/pt-BR/pages.json -trans.tr = public/language/tr/pages.json -trans.zh_TW = public/language/zh-TW/pages.json -trans.bn = public/language/bn/pages.json -trans.gl = public/language/gl/pages.json -trans.hr = public/language/hr/pages.json -trans.id = public/language/id/pages.json -trans.lt = public/language/lt/pages.json -trans.zh_CN = public/language/zh-CN/pages.json -trans.bg = public/language/bg/pages.json -trans.et = public/language/et/pages.json -trans.it = public/language/it/pages.json -trans.ro = public/language/ro/pages.json -trans.sl = public/language/sl/pages.json -trans.sk = public/language/sk/pages.json -trans.sr = public/language/sr/pages.json -trans.uk = public/language/uk/pages.json -trans.de = public/language/de/pages.json -trans.en@pirate = public/language/en-x-pirate/pages.json -trans.en_US = public/language/en-US/pages.json -trans.pt_PT = public/language/pt-PT/pages.json -trans.rw = public/language/rw/pages.json -trans.th = public/language/th/pages.json -trans.vi = public/language/vi/pages.json -trans.hu = public/language/hu/pages.json -trans.hy = public/language/hy/pages.json -trans.nl = public/language/nl/pages.json -trans.ru = public/language/ru/pages.json -trans.sc = public/language/sc/pages.json -trans.cs = public/language/cs/pages.json -trans.fi = public/language/fi/pages.json -trans.ko = public/language/ko/pages.json -trans.lv = public/language/lv/pages.json -trans.sq_AL = public/language/sq-AL/pages.json -trans.ar = public/language/ar/pages.json -trans.da = public/language/da/pages.json -trans.es = public/language/es/pages.json -trans.pl = public/language/pl/pages.json -trans.el = public/language/el/pages.json -trans.fa_IR = public/language/fa-IR/pages.json -trans.fr = public/language/fr/pages.json -trans.ja = public/language/ja/pages.json -trans.ms = public/language/ms/pages.json - -[o:nodebb:p:nodebb:r:post-queue] -file_filter = public/language//post-queue.json -source_file = public/language/en-GB/post-queue.json -source_lang = en_GB -type = KEYVALUEJSON -trans.it = public/language/it/post-queue.json -trans.ko = public/language/ko/post-queue.json -trans.lv = public/language/lv/post-queue.json -trans.nl = public/language/nl/post-queue.json -trans.rw = public/language/rw/post-queue.json -trans.da = public/language/da/post-queue.json -trans.de = public/language/de/post-queue.json -trans.el = public/language/el/post-queue.json -trans.sk = public/language/sk/post-queue.json -trans.sc = public/language/sc/post-queue.json -trans.sr = public/language/sr/post-queue.json -trans.tr = public/language/tr/post-queue.json -trans.uk = public/language/uk/post-queue.json -trans.ja = public/language/ja/post-queue.json -trans.ms = public/language/ms/post-queue.json -trans.ru = public/language/ru/post-queue.json -trans.fr = public/language/fr/post-queue.json -trans.hu = public/language/hu/post-queue.json -trans.lt = public/language/lt/post-queue.json -trans.pl = public/language/pl/post-queue.json -trans.ro = public/language/ro/post-queue.json -trans.bn = public/language/bn/post-queue.json -trans.en@pirate = public/language/en-x-pirate/post-queue.json -trans.fa_IR = public/language/fa-IR/post-queue.json -trans.sl = public/language/sl/post-queue.json -trans.vi = public/language/vi/post-queue.json -trans.zh_CN = public/language/zh-CN/post-queue.json -trans.id = public/language/id/post-queue.json -trans.en_US = public/language/en-US/post-queue.json -trans.sq_AL = public/language/sq-AL/post-queue.json -trans.sv = public/language/sv/post-queue.json -trans.zh_TW = public/language/zh-TW/post-queue.json -trans.ar = public/language/ar/post-queue.json -trans.bg = public/language/bg/post-queue.json -trans.cs = public/language/cs/post-queue.json -trans.hr = public/language/hr/post-queue.json -trans.pt_BR = public/language/pt-BR/post-queue.json -trans.th = public/language/th/post-queue.json -trans.es = public/language/es/post-queue.json -trans.et = public/language/et/post-queue.json -trans.gl = public/language/gl/post-queue.json -trans.hy = public/language/hy/post-queue.json -trans.pt_PT = public/language/pt-PT/post-queue.json -trans.fi = public/language/fi/post-queue.json -trans.he = public/language/he/post-queue.json -trans.nb = public/language/nb/post-queue.json - -[o:nodebb:p:nodebb:r:recent] -file_filter = public/language//recent.json -source_file = public/language/en-GB/recent.json -source_lang = en_GB -type = KEYVALUEJSON -trans.sq_AL = public/language/sq-AL/recent.json -trans.sr = public/language/sr/recent.json -trans.sk = public/language/sk/recent.json -trans.uk = public/language/uk/recent.json -trans.bg = public/language/bg/recent.json -trans.cs = public/language/cs/recent.json -trans.da = public/language/da/recent.json -trans.hy = public/language/hy/recent.json -trans.id = public/language/id/recent.json -trans.lv = public/language/lv/recent.json -trans.ar = public/language/ar/recent.json -trans.de = public/language/de/recent.json -trans.es = public/language/es/recent.json -trans.fa_IR = public/language/fa-IR/recent.json -trans.gl = public/language/gl/recent.json -trans.hu = public/language/hu/recent.json -trans.lt = public/language/lt/recent.json -trans.pt_BR = public/language/pt-BR/recent.json -trans.ru = public/language/ru/recent.json -trans.vi = public/language/vi/recent.json -trans.rw = public/language/rw/recent.json -trans.sl = public/language/sl/recent.json -trans.el = public/language/el/recent.json -trans.en_US = public/language/en-US/recent.json -trans.he = public/language/he/recent.json -trans.hr = public/language/hr/recent.json -trans.ro = public/language/ro/recent.json -trans.tr = public/language/tr/recent.json -trans.zh_CN = public/language/zh-CN/recent.json -trans.bn = public/language/bn/recent.json -trans.en@pirate = public/language/en-x-pirate/recent.json -trans.ja = public/language/ja/recent.json -trans.nb = public/language/nb/recent.json -trans.nl = public/language/nl/recent.json -trans.sv = public/language/sv/recent.json -trans.th = public/language/th/recent.json -trans.fr = public/language/fr/recent.json -trans.it = public/language/it/recent.json -trans.ms = public/language/ms/recent.json -trans.pl = public/language/pl/recent.json -trans.pt_PT = public/language/pt-PT/recent.json -trans.et = public/language/et/recent.json -trans.fi = public/language/fi/recent.json -trans.ko = public/language/ko/recent.json -trans.sc = public/language/sc/recent.json -trans.zh_TW = public/language/zh-TW/recent.json - -[o:nodebb:p:nodebb:r:register] -file_filter = public/language//register.json -source_file = public/language/en-GB/register.json -source_lang = en_GB -type = KEYVALUEJSON -trans.sq_AL = public/language/sq-AL/register.json -trans.tr = public/language/tr/register.json -trans.et = public/language/et/register.json -trans.he = public/language/he/register.json -trans.lv = public/language/lv/register.json -trans.nl = public/language/nl/register.json -trans.sc = public/language/sc/register.json -trans.en@pirate = public/language/en-x-pirate/register.json -trans.es = public/language/es/register.json -trans.pl = public/language/pl/register.json -trans.sl = public/language/sl/register.json -trans.uk = public/language/uk/register.json -trans.pt_PT = public/language/pt-PT/register.json -trans.ar = public/language/ar/register.json -trans.bg = public/language/bg/register.json -trans.de = public/language/de/register.json -trans.hr = public/language/hr/register.json -trans.nb = public/language/nb/register.json -trans.gl = public/language/gl/register.json -trans.sk = public/language/sk/register.json -trans.hy = public/language/hy/register.json -trans.ko = public/language/ko/register.json -trans.ms = public/language/ms/register.json -trans.ro = public/language/ro/register.json -trans.rw = public/language/rw/register.json -trans.zh_CN = public/language/zh-CN/register.json -trans.fi = public/language/fi/register.json -trans.it = public/language/it/register.json -trans.ru = public/language/ru/register.json -trans.sr = public/language/sr/register.json -trans.vi = public/language/vi/register.json -trans.sv = public/language/sv/register.json -trans.zh_TW = public/language/zh-TW/register.json -trans.bn = public/language/bn/register.json -trans.cs = public/language/cs/register.json -trans.fa_IR = public/language/fa-IR/register.json -trans.hu = public/language/hu/register.json -trans.lt = public/language/lt/register.json -trans.ja = public/language/ja/register.json -trans.pt_BR = public/language/pt-BR/register.json -trans.th = public/language/th/register.json -trans.da = public/language/da/register.json -trans.el = public/language/el/register.json -trans.en_US = public/language/en-US/register.json -trans.fr = public/language/fr/register.json -trans.id = public/language/id/register.json - -[o:nodebb:p:nodebb:r:reset_password] -file_filter = public/language//reset_password.json -source_file = public/language/en-GB/reset_password.json -source_lang = en_GB -type = KEYVALUEJSON -trans.bg = public/language/bg/reset_password.json -trans.fr = public/language/fr/reset_password.json -trans.hr = public/language/hr/reset_password.json -trans.hy = public/language/hy/reset_password.json -trans.ja = public/language/ja/reset_password.json -trans.pt_PT = public/language/pt-PT/reset_password.json -trans.zh_CN = public/language/zh-CN/reset_password.json -trans.sv = public/language/sv/reset_password.json -trans.de = public/language/de/reset_password.json -trans.fa_IR = public/language/fa-IR/reset_password.json -trans.gl = public/language/gl/reset_password.json -trans.hu = public/language/hu/reset_password.json -trans.id = public/language/id/reset_password.json -trans.rw = public/language/rw/reset_password.json -trans.sc = public/language/sc/reset_password.json -trans.vi = public/language/vi/reset_password.json -trans.bn = public/language/bn/reset_password.json -trans.he = public/language/he/reset_password.json -trans.ro = public/language/ro/reset_password.json -trans.sq_AL = public/language/sq-AL/reset_password.json -trans.ar = public/language/ar/reset_password.json -trans.cs = public/language/cs/reset_password.json -trans.ko = public/language/ko/reset_password.json -trans.ms = public/language/ms/reset_password.json -trans.pt_BR = public/language/pt-BR/reset_password.json -trans.sr = public/language/sr/reset_password.json -trans.tr = public/language/tr/reset_password.json -trans.ru = public/language/ru/reset_password.json -trans.zh_TW = public/language/zh-TW/reset_password.json -trans.da = public/language/da/reset_password.json -trans.en@pirate = public/language/en-x-pirate/reset_password.json -trans.en_US = public/language/en-US/reset_password.json -trans.lt = public/language/lt/reset_password.json -trans.lv = public/language/lv/reset_password.json -trans.nb = public/language/nb/reset_password.json -trans.sk = public/language/sk/reset_password.json -trans.el = public/language/el/reset_password.json -trans.es = public/language/es/reset_password.json -trans.et = public/language/et/reset_password.json -trans.uk = public/language/uk/reset_password.json -trans.fi = public/language/fi/reset_password.json -trans.it = public/language/it/reset_password.json -trans.nl = public/language/nl/reset_password.json -trans.pl = public/language/pl/reset_password.json -trans.sl = public/language/sl/reset_password.json -trans.th = public/language/th/reset_password.json - -[o:nodebb:p:nodebb:r:search] -file_filter = public/language//search.json -source_file = public/language/en-GB/search.json -source_lang = en_GB -type = KEYVALUEJSON -trans.da = public/language/da/search.json -trans.en_US = public/language/en-US/search.json -trans.ms = public/language/ms/search.json -trans.hr = public/language/hr/search.json -trans.hu = public/language/hu/search.json -trans.id = public/language/id/search.json -trans.bg = public/language/bg/search.json -trans.de = public/language/de/search.json -trans.en@pirate = public/language/en-x-pirate/search.json -trans.fa_IR = public/language/fa-IR/search.json -trans.fi = public/language/fi/search.json -trans.sc = public/language/sc/search.json -trans.sk = public/language/sk/search.json -trans.sl = public/language/sl/search.json -trans.sq_AL = public/language/sq-AL/search.json -trans.sr = public/language/sr/search.json -trans.bn = public/language/bn/search.json -trans.ja = public/language/ja/search.json -trans.ko = public/language/ko/search.json -trans.pl = public/language/pl/search.json -trans.ro = public/language/ro/search.json -trans.zh_TW = public/language/zh-TW/search.json -trans.cs = public/language/cs/search.json -trans.he = public/language/he/search.json -trans.nb = public/language/nb/search.json -trans.zh_CN = public/language/zh-CN/search.json -trans.lv = public/language/lv/search.json -trans.rw = public/language/rw/search.json -trans.sv = public/language/sv/search.json -trans.ru = public/language/ru/search.json -trans.tr = public/language/tr/search.json -trans.uk = public/language/uk/search.json -trans.el = public/language/el/search.json -trans.fr = public/language/fr/search.json -trans.gl = public/language/gl/search.json -trans.it = public/language/it/search.json -trans.pt_BR = public/language/pt-BR/search.json -trans.nl = public/language/nl/search.json -trans.pt_PT = public/language/pt-PT/search.json -trans.th = public/language/th/search.json -trans.vi = public/language/vi/search.json -trans.ar = public/language/ar/search.json -trans.es = public/language/es/search.json -trans.et = public/language/et/search.json -trans.hy = public/language/hy/search.json -trans.lt = public/language/lt/search.json - -[o:nodebb:p:nodebb:r:success] -file_filter = public/language//success.json -source_file = public/language/en-GB/success.json -source_lang = en_GB -type = KEYVALUEJSON -trans.pt_BR = public/language/pt-BR/success.json -trans.en@pirate = public/language/en-x-pirate/success.json -trans.es = public/language/es/success.json -trans.he = public/language/he/success.json -trans.hy = public/language/hy/success.json -trans.ja = public/language/ja/success.json -trans.ko = public/language/ko/success.json -trans.pl = public/language/pl/success.json -trans.de = public/language/de/success.json -trans.fa_IR = public/language/fa-IR/success.json -trans.ro = public/language/ro/success.json -trans.en_US = public/language/en-US/success.json -trans.lt = public/language/lt/success.json -trans.ru = public/language/ru/success.json -trans.sq_AL = public/language/sq-AL/success.json -trans.vi = public/language/vi/success.json -trans.bg = public/language/bg/success.json -trans.hr = public/language/hr/success.json -trans.ms = public/language/ms/success.json -trans.th = public/language/th/success.json -trans.zh_CN = public/language/zh-CN/success.json -trans.bn = public/language/bn/success.json -trans.fr = public/language/fr/success.json -trans.hu = public/language/hu/success.json -trans.id = public/language/id/success.json -trans.rw = public/language/rw/success.json -trans.sl = public/language/sl/success.json -trans.zh_TW = public/language/zh-TW/success.json -trans.ar = public/language/ar/success.json -trans.et = public/language/et/success.json -trans.it = public/language/it/success.json -trans.pt_PT = public/language/pt-PT/success.json -trans.sk = public/language/sk/success.json -trans.sv = public/language/sv/success.json -trans.tr = public/language/tr/success.json -trans.cs = public/language/cs/success.json -trans.fi = public/language/fi/success.json -trans.lv = public/language/lv/success.json -trans.nl = public/language/nl/success.json -trans.sc = public/language/sc/success.json -trans.da = public/language/da/success.json -trans.el = public/language/el/success.json -trans.gl = public/language/gl/success.json -trans.nb = public/language/nb/success.json -trans.sr = public/language/sr/success.json -trans.uk = public/language/uk/success.json - -[o:nodebb:p:nodebb:r:tags] -file_filter = public/language//tags.json -source_file = public/language/en-GB/tags.json -source_lang = en_GB -type = KEYVALUEJSON -trans.et = public/language/et/tags.json -trans.nl = public/language/nl/tags.json -trans.pt_BR = public/language/pt-BR/tags.json -trans.uk = public/language/uk/tags.json -trans.el = public/language/el/tags.json -trans.fa_IR = public/language/fa-IR/tags.json -trans.he = public/language/he/tags.json -trans.hr = public/language/hr/tags.json -trans.th = public/language/th/tags.json -trans.sl = public/language/sl/tags.json -trans.bg = public/language/bg/tags.json -trans.en_US = public/language/en-US/tags.json -trans.fi = public/language/fi/tags.json -trans.rw = public/language/rw/tags.json -trans.sc = public/language/sc/tags.json -trans.tr = public/language/tr/tags.json -trans.vi = public/language/vi/tags.json -trans.ar = public/language/ar/tags.json -trans.de = public/language/de/tags.json -trans.es = public/language/es/tags.json -trans.pt_PT = public/language/pt-PT/tags.json -trans.ro = public/language/ro/tags.json -trans.ru = public/language/ru/tags.json -trans.sk = public/language/sk/tags.json -trans.sr = public/language/sr/tags.json -trans.cs = public/language/cs/tags.json -trans.da = public/language/da/tags.json -trans.en@pirate = public/language/en-x-pirate/tags.json -trans.hu = public/language/hu/tags.json -trans.ja = public/language/ja/tags.json -trans.zh_CN = public/language/zh-CN/tags.json -trans.gl = public/language/gl/tags.json -trans.lv = public/language/lv/tags.json -trans.ms = public/language/ms/tags.json -trans.nb = public/language/nb/tags.json -trans.sv = public/language/sv/tags.json -trans.sq_AL = public/language/sq-AL/tags.json -trans.zh_TW = public/language/zh-TW/tags.json -trans.bn = public/language/bn/tags.json -trans.fr = public/language/fr/tags.json -trans.id = public/language/id/tags.json -trans.ko = public/language/ko/tags.json -trans.lt = public/language/lt/tags.json -trans.hy = public/language/hy/tags.json -trans.it = public/language/it/tags.json -trans.pl = public/language/pl/tags.json - -[o:nodebb:p:nodebb:r:top] -file_filter = public/language//top.json -source_file = public/language/en-GB/top.json -source_lang = en_GB -type = KEYVALUEJSON -trans.hy = public/language/hy/top.json -trans.el = public/language/el/top.json -trans.fa_IR = public/language/fa-IR/top.json -trans.nl = public/language/nl/top.json -trans.cs = public/language/cs/top.json -trans.en_US = public/language/en-US/top.json -trans.fi = public/language/fi/top.json -trans.he = public/language/he/top.json -trans.lt = public/language/lt/top.json -trans.ms = public/language/ms/top.json -trans.sk = public/language/sk/top.json -trans.vi = public/language/vi/top.json -trans.bg = public/language/bg/top.json -trans.de = public/language/de/top.json -trans.hu = public/language/hu/top.json -trans.pl = public/language/pl/top.json -trans.pt_PT = public/language/pt-PT/top.json -trans.sl = public/language/sl/top.json -trans.en@pirate = public/language/en-x-pirate/top.json -trans.gl = public/language/gl/top.json -trans.rw = public/language/rw/top.json -trans.sq_AL = public/language/sq-AL/top.json -trans.zh_CN = public/language/zh-CN/top.json -trans.ko = public/language/ko/top.json -trans.ro = public/language/ro/top.json -trans.pt_BR = public/language/pt-BR/top.json -trans.bn = public/language/bn/top.json -trans.fr = public/language/fr/top.json -trans.et = public/language/et/top.json -trans.id = public/language/id/top.json -trans.ja = public/language/ja/top.json -trans.lv = public/language/lv/top.json -trans.ru = public/language/ru/top.json -trans.sc = public/language/sc/top.json -trans.ar = public/language/ar/top.json -trans.da = public/language/da/top.json -trans.uk = public/language/uk/top.json -trans.sv = public/language/sv/top.json -trans.th = public/language/th/top.json -trans.it = public/language/it/top.json -trans.nb = public/language/nb/top.json -trans.sr = public/language/sr/top.json -trans.tr = public/language/tr/top.json -trans.zh_TW = public/language/zh-TW/top.json -trans.es = public/language/es/top.json -trans.hr = public/language/hr/top.json - -[o:nodebb:p:nodebb:r:topic] -file_filter = public/language//topic.json -source_file = public/language/en-GB/topic.json -source_lang = en_GB -type = KEYVALUEJSON -trans.et = public/language/et/topic.json -trans.hu = public/language/hu/topic.json -trans.nb = public/language/nb/topic.json -trans.nl = public/language/nl/topic.json -trans.sk = public/language/sk/topic.json -trans.ar = public/language/ar/topic.json -trans.es = public/language/es/topic.json -trans.fr = public/language/fr/topic.json -trans.lv = public/language/lv/topic.json -trans.ms = public/language/ms/topic.json -trans.pl = public/language/pl/topic.json -trans.pt_PT = public/language/pt-PT/topic.json -trans.uk = public/language/uk/topic.json -trans.ru = public/language/ru/topic.json -trans.bg = public/language/bg/topic.json -trans.en@pirate = public/language/en-x-pirate/topic.json -trans.fa_IR = public/language/fa-IR/topic.json -trans.fi = public/language/fi/topic.json -trans.he = public/language/he/topic.json -trans.ja = public/language/ja/topic.json -trans.pt_BR = public/language/pt-BR/topic.json -trans.tr = public/language/tr/topic.json -trans.zh_TW = public/language/zh-TW/topic.json -trans.bn = public/language/bn/topic.json -trans.da = public/language/da/topic.json -trans.en_US = public/language/en-US/topic.json -trans.hr = public/language/hr/topic.json -trans.it = public/language/it/topic.json -trans.ro = public/language/ro/topic.json -trans.cs = public/language/cs/topic.json -trans.de = public/language/de/topic.json -trans.sr = public/language/sr/topic.json -trans.sv = public/language/sv/topic.json -trans.vi = public/language/vi/topic.json -trans.ko = public/language/ko/topic.json -trans.sl = public/language/sl/topic.json -trans.el = public/language/el/topic.json -trans.gl = public/language/gl/topic.json -trans.id = public/language/id/topic.json -trans.lt = public/language/lt/topic.json -trans.sq_AL = public/language/sq-AL/topic.json -trans.th = public/language/th/topic.json -trans.hy = public/language/hy/topic.json -trans.rw = public/language/rw/topic.json -trans.sc = public/language/sc/topic.json -trans.zh_CN = public/language/zh-CN/topic.json - -[o:nodebb:p:nodebb:r:unread] -file_filter = public/language//unread.json -source_file = public/language/en-GB/unread.json -source_lang = en_GB -type = KEYVALUEJSON -trans.pt_BR = public/language/pt-BR/unread.json -trans.zh_TW = public/language/zh-TW/unread.json -trans.fa_IR = public/language/fa-IR/unread.json -trans.fr = public/language/fr/unread.json -trans.es = public/language/es/unread.json -trans.it = public/language/it/unread.json -trans.ms = public/language/ms/unread.json -trans.ro = public/language/ro/unread.json -trans.de = public/language/de/unread.json -trans.en@pirate = public/language/en-x-pirate/unread.json -trans.hr = public/language/hr/unread.json -trans.hu = public/language/hu/unread.json -trans.lt = public/language/lt/unread.json -trans.ru = public/language/ru/unread.json -trans.sl = public/language/sl/unread.json -trans.th = public/language/th/unread.json -trans.bg = public/language/bg/unread.json -trans.gl = public/language/gl/unread.json -trans.uk = public/language/uk/unread.json -trans.vi = public/language/vi/unread.json -trans.ja = public/language/ja/unread.json -trans.lv = public/language/lv/unread.json -trans.nl = public/language/nl/unread.json -trans.sr = public/language/sr/unread.json -trans.zh_CN = public/language/zh-CN/unread.json -trans.hy = public/language/hy/unread.json -trans.id = public/language/id/unread.json -trans.da = public/language/da/unread.json -trans.en_US = public/language/en-US/unread.json -trans.sk = public/language/sk/unread.json -trans.bn = public/language/bn/unread.json -trans.cs = public/language/cs/unread.json -trans.nb = public/language/nb/unread.json -trans.rw = public/language/rw/unread.json -trans.sq_AL = public/language/sq-AL/unread.json -trans.tr = public/language/tr/unread.json -trans.ar = public/language/ar/unread.json -trans.el = public/language/el/unread.json -trans.he = public/language/he/unread.json -trans.pt_PT = public/language/pt-PT/unread.json -trans.et = public/language/et/unread.json -trans.fi = public/language/fi/unread.json -trans.sc = public/language/sc/unread.json -trans.sv = public/language/sv/unread.json -trans.ko = public/language/ko/unread.json -trans.pl = public/language/pl/unread.json - -[o:nodebb:p:nodebb:r:uploads] -file_filter = public/language//uploads.json -source_file = public/language/en-GB/uploads.json -source_lang = en_GB -type = KEYVALUEJSON -trans.sv = public/language/sv/uploads.json -trans.cs = public/language/cs/uploads.json -trans.el = public/language/el/uploads.json -trans.hu = public/language/hu/uploads.json -trans.hy = public/language/hy/uploads.json -trans.it = public/language/it/uploads.json -trans.tr = public/language/tr/uploads.json -trans.uk = public/language/uk/uploads.json -trans.zh_CN = public/language/zh-CN/uploads.json -trans.en@pirate = public/language/en-x-pirate/uploads.json -trans.lt = public/language/lt/uploads.json -trans.lv = public/language/lv/uploads.json -trans.pt_BR = public/language/pt-BR/uploads.json -trans.sk = public/language/sk/uploads.json -trans.bn = public/language/bn/uploads.json -trans.hr = public/language/hr/uploads.json -trans.pl = public/language/pl/uploads.json -trans.zh_TW = public/language/zh-TW/uploads.json -trans.ru = public/language/ru/uploads.json -trans.sl = public/language/sl/uploads.json -trans.sq_AL = public/language/sq-AL/uploads.json -trans.et = public/language/et/uploads.json -trans.id = public/language/id/uploads.json -trans.ms = public/language/ms/uploads.json -trans.nb = public/language/nb/uploads.json -trans.pt_PT = public/language/pt-PT/uploads.json -trans.da = public/language/da/uploads.json -trans.es = public/language/es/uploads.json -trans.fr = public/language/fr/uploads.json -trans.th = public/language/th/uploads.json -trans.ar = public/language/ar/uploads.json -trans.en_US = public/language/en-US/uploads.json -trans.fi = public/language/fi/uploads.json -trans.gl = public/language/gl/uploads.json -trans.rw = public/language/rw/uploads.json -trans.ro = public/language/ro/uploads.json -trans.sr = public/language/sr/uploads.json -trans.vi = public/language/vi/uploads.json -trans.bg = public/language/bg/uploads.json -trans.de = public/language/de/uploads.json -trans.fa_IR = public/language/fa-IR/uploads.json -trans.ja = public/language/ja/uploads.json -trans.nl = public/language/nl/uploads.json -trans.he = public/language/he/uploads.json -trans.ko = public/language/ko/uploads.json -trans.sc = public/language/sc/uploads.json - -[o:nodebb:p:nodebb:r:user] -file_filter = public/language//user.json -source_file = public/language/en-GB/user.json -source_lang = en_GB -type = KEYVALUEJSON -trans.ms = public/language/ms/user.json -trans.sr = public/language/sr/user.json -trans.lt = public/language/lt/user.json -trans.da = public/language/da/user.json -trans.it = public/language/it/user.json -trans.ru = public/language/ru/user.json -trans.sk = public/language/sk/user.json -trans.ar = public/language/ar/user.json -trans.fr = public/language/fr/user.json -trans.he = public/language/he/user.json -trans.id = public/language/id/user.json -trans.es = public/language/es/user.json -trans.cs = public/language/cs/user.json -trans.et = public/language/et/user.json -trans.pt_BR = public/language/pt-BR/user.json -trans.zh_CN = public/language/zh-CN/user.json -trans.zh_TW = public/language/zh-TW/user.json -trans.bn = public/language/bn/user.json -trans.de = public/language/de/user.json -trans.el = public/language/el/user.json -trans.en@pirate = public/language/en-x-pirate/user.json -trans.en_US = public/language/en-US/user.json -trans.fa_IR = public/language/fa-IR/user.json -trans.gl = public/language/gl/user.json -trans.pl = public/language/pl/user.json -trans.bg = public/language/bg/user.json -trans.sv = public/language/sv/user.json -trans.th = public/language/th/user.json -trans.tr = public/language/tr/user.json -trans.uk = public/language/uk/user.json -trans.vi = public/language/vi/user.json -trans.fi = public/language/fi/user.json -trans.ko = public/language/ko/user.json -trans.lv = public/language/lv/user.json -trans.pt_PT = public/language/pt-PT/user.json -trans.rw = public/language/rw/user.json -trans.sl = public/language/sl/user.json -trans.sq_AL = public/language/sq-AL/user.json -trans.hr = public/language/hr/user.json -trans.hy = public/language/hy/user.json -trans.ja = public/language/ja/user.json -trans.nb = public/language/nb/user.json -trans.nl = public/language/nl/user.json -trans.ro = public/language/ro/user.json -trans.sc = public/language/sc/user.json -trans.hu = public/language/hu/user.json - -[o:nodebb:p:nodebb:r:users] -file_filter = public/language//users.json -source_file = public/language/en-GB/users.json -source_lang = en_GB -type = KEYVALUEJSON -trans.zh_TW = public/language/zh-TW/users.json -trans.de = public/language/de/users.json -trans.en@pirate = public/language/en-x-pirate/users.json -trans.ru = public/language/ru/users.json -trans.sc = public/language/sc/users.json -trans.en_US = public/language/en-US/users.json -trans.bn = public/language/bn/users.json -trans.hy = public/language/hy/users.json -trans.ro = public/language/ro/users.json -trans.fi = public/language/fi/users.json -trans.it = public/language/it/users.json -trans.pl = public/language/pl/users.json -trans.sk = public/language/sk/users.json -trans.ar = public/language/ar/users.json -trans.bg = public/language/bg/users.json -trans.el = public/language/el/users.json -trans.fa_IR = public/language/fa-IR/users.json -trans.sq_AL = public/language/sq-AL/users.json -trans.cs = public/language/cs/users.json -trans.he = public/language/he/users.json -trans.ja = public/language/ja/users.json -trans.ko = public/language/ko/users.json -trans.nb = public/language/nb/users.json -trans.pt_PT = public/language/pt-PT/users.json -trans.sr = public/language/sr/users.json -trans.zh_CN = public/language/zh-CN/users.json -trans.da = public/language/da/users.json -trans.id = public/language/id/users.json -trans.lt = public/language/lt/users.json -trans.ms = public/language/ms/users.json -trans.nl = public/language/nl/users.json -trans.rw = public/language/rw/users.json -trans.sl = public/language/sl/users.json -trans.th = public/language/th/users.json -trans.es = public/language/es/users.json -trans.fr = public/language/fr/users.json -trans.gl = public/language/gl/users.json -trans.hr = public/language/hr/users.json -trans.uk = public/language/uk/users.json -trans.vi = public/language/vi/users.json -trans.sv = public/language/sv/users.json -trans.tr = public/language/tr/users.json -trans.et = public/language/et/users.json -trans.hu = public/language/hu/users.json -trans.lv = public/language/lv/users.json -trans.pt_BR = public/language/pt-BR/users.json - +[main] +host = https://www.transifex.com + +[o:nodebb:p:nodebb:r:admin-admin] +file_filter = public/language//admin/admin.json +source_file = public/language/en-GB/admin/admin.json +source_lang = en_GB +type = KEYVALUEJSON +trans.pt_BR = public/language/pt-BR/admin/admin.json +trans.en@pirate = public/language/en-x-pirate/admin/admin.json +trans.hy = public/language/hy/admin/admin.json +trans.pl = public/language/pl/admin/admin.json +trans.th = public/language/th/admin/admin.json +trans.de = public/language/de/admin/admin.json +trans.el = public/language/el/admin/admin.json +trans.ar = public/language/ar/admin/admin.json +trans.bg = public/language/bg/admin/admin.json +trans.bn = public/language/bn/admin/admin.json +trans.it = public/language/it/admin/admin.json +trans.lv = public/language/lv/admin/admin.json +trans.nl = public/language/nl/admin/admin.json +trans.ru = public/language/ru/admin/admin.json +trans.sr = public/language/sr/admin/admin.json +trans.sv = public/language/sv/admin/admin.json +trans.uk = public/language/uk/admin/admin.json +trans.zh_CN = public/language/zh-CN/admin/admin.json +trans.fa_IR = public/language/fa-IR/admin/admin.json +trans.id = public/language/id/admin/admin.json +trans.ms = public/language/ms/admin/admin.json +trans.nb = public/language/nb/admin/admin.json +trans.sk = public/language/sk/admin/admin.json +trans.cs = public/language/cs/admin/admin.json +trans.fi = public/language/fi/admin/admin.json +trans.fr = public/language/fr/admin/admin.json +trans.rw = public/language/rw/admin/admin.json +trans.sq_AL = public/language/sq-AL/admin/admin.json +trans.en_US = public/language/en-US/admin/admin.json +trans.es = public/language/es/admin/admin.json +trans.et = public/language/et/admin/admin.json +trans.gl = public/language/gl/admin/admin.json +trans.he = public/language/he/admin/admin.json +trans.ja = public/language/ja/admin/admin.json +trans.lt = public/language/lt/admin/admin.json +trans.pt_PT = public/language/pt-PT/admin/admin.json +trans.sc = public/language/sc/admin/admin.json +trans.sl = public/language/sl/admin/admin.json +trans.vi = public/language/vi/admin/admin.json +trans.da = public/language/da/admin/admin.json +trans.hr = public/language/hr/admin/admin.json +trans.hu = public/language/hu/admin/admin.json +trans.ko = public/language/ko/admin/admin.json +trans.ro = public/language/ro/admin/admin.json +trans.tr = public/language/tr/admin/admin.json +trans.zh_TW = public/language/zh-TW/admin/admin.json + +[o:nodebb:p:nodebb:r:admin-advanced-cache] +file_filter = public/language//admin/advanced/cache.json +source_file = public/language/en-GB/admin/advanced/cache.json +source_lang = en_GB +type = KEYVALUEJSON +trans.fa_IR = public/language/fa-IR/admin/advanced/cache.json +trans.he = public/language/he/admin/advanced/cache.json +trans.ko = public/language/ko/admin/advanced/cache.json +trans.pt_PT = public/language/pt-PT/admin/advanced/cache.json +trans.rw = public/language/rw/admin/advanced/cache.json +trans.tr = public/language/tr/admin/advanced/cache.json +trans.en_US = public/language/en-US/admin/advanced/cache.json +trans.hu = public/language/hu/admin/advanced/cache.json +trans.id = public/language/id/admin/advanced/cache.json +trans.ms = public/language/ms/admin/advanced/cache.json +trans.sc = public/language/sc/admin/advanced/cache.json +trans.sv = public/language/sv/admin/advanced/cache.json +trans.es = public/language/es/admin/advanced/cache.json +trans.gl = public/language/gl/admin/advanced/cache.json +trans.lv = public/language/lv/admin/advanced/cache.json +trans.nl = public/language/nl/admin/advanced/cache.json +trans.ru = public/language/ru/admin/advanced/cache.json +trans.zh_TW = public/language/zh-TW/admin/advanced/cache.json +trans.bn = public/language/bn/admin/advanced/cache.json +trans.en@pirate = public/language/en-x-pirate/admin/advanced/cache.json +trans.fr = public/language/fr/admin/advanced/cache.json +trans.hr = public/language/hr/admin/advanced/cache.json +trans.pt_BR = public/language/pt-BR/admin/advanced/cache.json +trans.ar = public/language/ar/admin/advanced/cache.json +trans.bg = public/language/bg/admin/advanced/cache.json +trans.cs = public/language/cs/admin/advanced/cache.json +trans.lt = public/language/lt/admin/advanced/cache.json +trans.nb = public/language/nb/admin/advanced/cache.json +trans.uk = public/language/uk/admin/advanced/cache.json +trans.el = public/language/el/admin/advanced/cache.json +trans.pl = public/language/pl/admin/advanced/cache.json +trans.sr = public/language/sr/admin/advanced/cache.json +trans.da = public/language/da/admin/advanced/cache.json +trans.et = public/language/et/admin/advanced/cache.json +trans.fi = public/language/fi/admin/advanced/cache.json +trans.hy = public/language/hy/admin/advanced/cache.json +trans.ja = public/language/ja/admin/advanced/cache.json +trans.sl = public/language/sl/admin/advanced/cache.json +trans.sq_AL = public/language/sq-AL/admin/advanced/cache.json +trans.th = public/language/th/admin/advanced/cache.json +trans.de = public/language/de/admin/advanced/cache.json +trans.it = public/language/it/admin/advanced/cache.json +trans.ro = public/language/ro/admin/advanced/cache.json +trans.sk = public/language/sk/admin/advanced/cache.json +trans.vi = public/language/vi/admin/advanced/cache.json +trans.zh_CN = public/language/zh-CN/admin/advanced/cache.json + +[o:nodebb:p:nodebb:r:admin-advanced-database] +file_filter = public/language//admin/advanced/database.json +source_file = public/language/en-GB/admin/advanced/database.json +source_lang = en_GB +type = KEYVALUEJSON +trans.fr = public/language/fr/admin/advanced/database.json +trans.he = public/language/he/admin/advanced/database.json +trans.ja = public/language/ja/admin/advanced/database.json +trans.lv = public/language/lv/admin/advanced/database.json +trans.pt_PT = public/language/pt-PT/admin/advanced/database.json +trans.en_US = public/language/en-US/admin/advanced/database.json +trans.el = public/language/el/admin/advanced/database.json +trans.tr = public/language/tr/admin/advanced/database.json +trans.zh_CN = public/language/zh-CN/admin/advanced/database.json +trans.ar = public/language/ar/admin/advanced/database.json +trans.hr = public/language/hr/admin/advanced/database.json +trans.lt = public/language/lt/admin/advanced/database.json +trans.ro = public/language/ro/admin/advanced/database.json +trans.zh_TW = public/language/zh-TW/admin/advanced/database.json +trans.gl = public/language/gl/admin/advanced/database.json +trans.it = public/language/it/admin/advanced/database.json +trans.nb = public/language/nb/admin/advanced/database.json +trans.bn = public/language/bn/admin/advanced/database.json +trans.da = public/language/da/admin/advanced/database.json +trans.de = public/language/de/admin/advanced/database.json +trans.en@pirate = public/language/en-x-pirate/admin/advanced/database.json +trans.hu = public/language/hu/admin/advanced/database.json +trans.hy = public/language/hy/admin/advanced/database.json +trans.id = public/language/id/admin/advanced/database.json +trans.nl = public/language/nl/admin/advanced/database.json +trans.cs = public/language/cs/admin/advanced/database.json +trans.sv = public/language/sv/admin/advanced/database.json +trans.sr = public/language/sr/admin/advanced/database.json +trans.pl = public/language/pl/admin/advanced/database.json +trans.ru = public/language/ru/admin/advanced/database.json +trans.sc = public/language/sc/admin/advanced/database.json +trans.sl = public/language/sl/admin/advanced/database.json +trans.sq_AL = public/language/sq-AL/admin/advanced/database.json +trans.th = public/language/th/admin/advanced/database.json +trans.et = public/language/et/admin/advanced/database.json +trans.fa_IR = public/language/fa-IR/admin/advanced/database.json +trans.ko = public/language/ko/admin/advanced/database.json +trans.sk = public/language/sk/admin/advanced/database.json +trans.vi = public/language/vi/admin/advanced/database.json +trans.es = public/language/es/admin/advanced/database.json +trans.fi = public/language/fi/admin/advanced/database.json +trans.ms = public/language/ms/admin/advanced/database.json +trans.pt_BR = public/language/pt-BR/admin/advanced/database.json +trans.rw = public/language/rw/admin/advanced/database.json +trans.uk = public/language/uk/admin/advanced/database.json +trans.bg = public/language/bg/admin/advanced/database.json + +[o:nodebb:p:nodebb:r:admin-advanced-errors] +file_filter = public/language//admin/advanced/errors.json +source_file = public/language/en-GB/admin/advanced/errors.json +source_lang = en_GB +type = KEYVALUEJSON +trans.cs = public/language/cs/admin/advanced/errors.json +trans.en_US = public/language/en-US/admin/advanced/errors.json +trans.es = public/language/es/admin/advanced/errors.json +trans.pl = public/language/pl/admin/advanced/errors.json +trans.sk = public/language/sk/admin/advanced/errors.json +trans.uk = public/language/uk/admin/advanced/errors.json +trans.da = public/language/da/admin/advanced/errors.json +trans.gl = public/language/gl/admin/advanced/errors.json +trans.hu = public/language/hu/admin/advanced/errors.json +trans.pt_PT = public/language/pt-PT/admin/advanced/errors.json +trans.vi = public/language/vi/admin/advanced/errors.json +trans.de = public/language/de/admin/advanced/errors.json +trans.ko = public/language/ko/admin/advanced/errors.json +trans.nb = public/language/nb/admin/advanced/errors.json +trans.sc = public/language/sc/admin/advanced/errors.json +trans.sl = public/language/sl/admin/advanced/errors.json +trans.tr = public/language/tr/admin/advanced/errors.json +trans.zh_CN = public/language/zh-CN/admin/advanced/errors.json +trans.fr = public/language/fr/admin/advanced/errors.json +trans.hy = public/language/hy/admin/advanced/errors.json +trans.pt_BR = public/language/pt-BR/admin/advanced/errors.json +trans.ro = public/language/ro/admin/advanced/errors.json +trans.sr = public/language/sr/admin/advanced/errors.json +trans.sv = public/language/sv/admin/advanced/errors.json +trans.fa_IR = public/language/fa-IR/admin/advanced/errors.json +trans.it = public/language/it/admin/advanced/errors.json +trans.lt = public/language/lt/admin/advanced/errors.json +trans.ms = public/language/ms/admin/advanced/errors.json +trans.ru = public/language/ru/admin/advanced/errors.json +trans.sq_AL = public/language/sq-AL/admin/advanced/errors.json +trans.ar = public/language/ar/admin/advanced/errors.json +trans.fi = public/language/fi/admin/advanced/errors.json +trans.he = public/language/he/admin/advanced/errors.json +trans.ja = public/language/ja/admin/advanced/errors.json +trans.th = public/language/th/admin/advanced/errors.json +trans.zh_TW = public/language/zh-TW/admin/advanced/errors.json +trans.bn = public/language/bn/admin/advanced/errors.json +trans.en@pirate = public/language/en-x-pirate/admin/advanced/errors.json +trans.hr = public/language/hr/admin/advanced/errors.json +trans.rw = public/language/rw/admin/advanced/errors.json +trans.bg = public/language/bg/admin/advanced/errors.json +trans.el = public/language/el/admin/advanced/errors.json +trans.et = public/language/et/admin/advanced/errors.json +trans.id = public/language/id/admin/advanced/errors.json +trans.lv = public/language/lv/admin/advanced/errors.json +trans.nl = public/language/nl/admin/advanced/errors.json + +[o:nodebb:p:nodebb:r:admin-advanced-events] +file_filter = public/language//admin/advanced/events.json +source_file = public/language/en-GB/admin/advanced/events.json +source_lang = en_GB +type = KEYVALUEJSON +trans.bg = public/language/bg/admin/advanced/events.json +trans.el = public/language/el/admin/advanced/events.json +trans.lt = public/language/lt/admin/advanced/events.json +trans.pt_BR = public/language/pt-BR/admin/advanced/events.json +trans.zh_TW = public/language/zh-TW/admin/advanced/events.json +trans.th = public/language/th/admin/advanced/events.json +trans.gl = public/language/gl/admin/advanced/events.json +trans.ko = public/language/ko/admin/advanced/events.json +trans.nl = public/language/nl/admin/advanced/events.json +trans.ro = public/language/ro/admin/advanced/events.json +trans.sl = public/language/sl/admin/advanced/events.json +trans.ar = public/language/ar/admin/advanced/events.json +trans.hr = public/language/hr/admin/advanced/events.json +trans.vi = public/language/vi/admin/advanced/events.json +trans.fa_IR = public/language/fa-IR/admin/advanced/events.json +trans.ms = public/language/ms/admin/advanced/events.json +trans.tr = public/language/tr/admin/advanced/events.json +trans.nb = public/language/nb/admin/advanced/events.json +trans.pt_PT = public/language/pt-PT/admin/advanced/events.json +trans.sk = public/language/sk/admin/advanced/events.json +trans.en@pirate = public/language/en-x-pirate/admin/advanced/events.json +trans.es = public/language/es/admin/advanced/events.json +trans.et = public/language/et/admin/advanced/events.json +trans.he = public/language/he/admin/advanced/events.json +trans.lv = public/language/lv/admin/advanced/events.json +trans.sv = public/language/sv/admin/advanced/events.json +trans.zh_CN = public/language/zh-CN/admin/advanced/events.json +trans.pl = public/language/pl/admin/advanced/events.json +trans.rw = public/language/rw/admin/advanced/events.json +trans.cs = public/language/cs/admin/advanced/events.json +trans.de = public/language/de/admin/advanced/events.json +trans.fr = public/language/fr/admin/advanced/events.json +trans.hy = public/language/hy/admin/advanced/events.json +trans.id = public/language/id/admin/advanced/events.json +trans.ru = public/language/ru/admin/advanced/events.json +trans.sq_AL = public/language/sq-AL/admin/advanced/events.json +trans.uk = public/language/uk/admin/advanced/events.json +trans.da = public/language/da/admin/advanced/events.json +trans.en_US = public/language/en-US/admin/advanced/events.json +trans.hu = public/language/hu/admin/advanced/events.json +trans.it = public/language/it/admin/advanced/events.json +trans.ja = public/language/ja/admin/advanced/events.json +trans.bn = public/language/bn/admin/advanced/events.json +trans.fi = public/language/fi/admin/advanced/events.json +trans.sc = public/language/sc/admin/advanced/events.json +trans.sr = public/language/sr/admin/advanced/events.json + +[o:nodebb:p:nodebb:r:admin-advanced-logs] +file_filter = public/language//admin/advanced/logs.json +source_file = public/language/en-GB/admin/advanced/logs.json +source_lang = en_GB +type = KEYVALUEJSON +trans.nl = public/language/nl/admin/advanced/logs.json +trans.ru = public/language/ru/admin/advanced/logs.json +trans.vi = public/language/vi/admin/advanced/logs.json +trans.id = public/language/id/admin/advanced/logs.json +trans.fi = public/language/fi/admin/advanced/logs.json +trans.he = public/language/he/admin/advanced/logs.json +trans.hr = public/language/hr/admin/advanced/logs.json +trans.ja = public/language/ja/admin/advanced/logs.json +trans.lt = public/language/lt/admin/advanced/logs.json +trans.nb = public/language/nb/admin/advanced/logs.json +trans.rw = public/language/rw/admin/advanced/logs.json +trans.es = public/language/es/admin/advanced/logs.json +trans.sv = public/language/sv/admin/advanced/logs.json +trans.fa_IR = public/language/fa-IR/admin/advanced/logs.json +trans.fr = public/language/fr/admin/advanced/logs.json +trans.gl = public/language/gl/admin/advanced/logs.json +trans.zh_TW = public/language/zh-TW/admin/advanced/logs.json +trans.en@pirate = public/language/en-x-pirate/admin/advanced/logs.json +trans.sc = public/language/sc/admin/advanced/logs.json +trans.sq_AL = public/language/sq-AL/admin/advanced/logs.json +trans.uk = public/language/uk/admin/advanced/logs.json +trans.hu = public/language/hu/admin/advanced/logs.json +trans.bn = public/language/bn/admin/advanced/logs.json +trans.de = public/language/de/admin/advanced/logs.json +trans.it = public/language/it/admin/advanced/logs.json +trans.lv = public/language/lv/admin/advanced/logs.json +trans.ms = public/language/ms/admin/advanced/logs.json +trans.pl = public/language/pl/admin/advanced/logs.json +trans.zh_CN = public/language/zh-CN/admin/advanced/logs.json +trans.ar = public/language/ar/admin/advanced/logs.json +trans.et = public/language/et/admin/advanced/logs.json +trans.hy = public/language/hy/admin/advanced/logs.json +trans.ko = public/language/ko/admin/advanced/logs.json +trans.th = public/language/th/admin/advanced/logs.json +trans.tr = public/language/tr/admin/advanced/logs.json +trans.cs = public/language/cs/admin/advanced/logs.json +trans.ro = public/language/ro/admin/advanced/logs.json +trans.pt_BR = public/language/pt-BR/admin/advanced/logs.json +trans.da = public/language/da/admin/advanced/logs.json +trans.el = public/language/el/admin/advanced/logs.json +trans.en_US = public/language/en-US/admin/advanced/logs.json +trans.pt_PT = public/language/pt-PT/admin/advanced/logs.json +trans.sk = public/language/sk/admin/advanced/logs.json +trans.sl = public/language/sl/admin/advanced/logs.json +trans.sr = public/language/sr/admin/advanced/logs.json +trans.bg = public/language/bg/admin/advanced/logs.json + +[o:nodebb:p:nodebb:r:admin-appearance-customise] +file_filter = public/language//admin/appearance/customise.json +source_file = public/language/en-GB/admin/appearance/customise.json +source_lang = en_GB +type = KEYVALUEJSON +trans.cs = public/language/cs/admin/appearance/customise.json +trans.da = public/language/da/admin/appearance/customise.json +trans.es = public/language/es/admin/appearance/customise.json +trans.hy = public/language/hy/admin/appearance/customise.json +trans.th = public/language/th/admin/appearance/customise.json +trans.ar = public/language/ar/admin/appearance/customise.json +trans.bg = public/language/bg/admin/appearance/customise.json +trans.he = public/language/he/admin/appearance/customise.json +trans.lt = public/language/lt/admin/appearance/customise.json +trans.nb = public/language/nb/admin/appearance/customise.json +trans.pl = public/language/pl/admin/appearance/customise.json +trans.sl = public/language/sl/admin/appearance/customise.json +trans.zh_TW = public/language/zh-TW/admin/appearance/customise.json +trans.bn = public/language/bn/admin/appearance/customise.json +trans.el = public/language/el/admin/appearance/customise.json +trans.hu = public/language/hu/admin/appearance/customise.json +trans.sk = public/language/sk/admin/appearance/customise.json +trans.tr = public/language/tr/admin/appearance/customise.json +trans.et = public/language/et/admin/appearance/customise.json +trans.id = public/language/id/admin/appearance/customise.json +trans.lv = public/language/lv/admin/appearance/customise.json +trans.pt_BR = public/language/pt-BR/admin/appearance/customise.json +trans.sr = public/language/sr/admin/appearance/customise.json +trans.zh_CN = public/language/zh-CN/admin/appearance/customise.json +trans.fr = public/language/fr/admin/appearance/customise.json +trans.hr = public/language/hr/admin/appearance/customise.json +trans.it = public/language/it/admin/appearance/customise.json +trans.nl = public/language/nl/admin/appearance/customise.json +trans.sv = public/language/sv/admin/appearance/customise.json +trans.fi = public/language/fi/admin/appearance/customise.json +trans.gl = public/language/gl/admin/appearance/customise.json +trans.ko = public/language/ko/admin/appearance/customise.json +trans.sc = public/language/sc/admin/appearance/customise.json +trans.de = public/language/de/admin/appearance/customise.json +trans.en_US = public/language/en-US/admin/appearance/customise.json +trans.ja = public/language/ja/admin/appearance/customise.json +trans.ru = public/language/ru/admin/appearance/customise.json +trans.rw = public/language/rw/admin/appearance/customise.json +trans.vi = public/language/vi/admin/appearance/customise.json +trans.en@pirate = public/language/en-x-pirate/admin/appearance/customise.json +trans.fa_IR = public/language/fa-IR/admin/appearance/customise.json +trans.ms = public/language/ms/admin/appearance/customise.json +trans.pt_PT = public/language/pt-PT/admin/appearance/customise.json +trans.ro = public/language/ro/admin/appearance/customise.json +trans.sq_AL = public/language/sq-AL/admin/appearance/customise.json +trans.uk = public/language/uk/admin/appearance/customise.json + +[o:nodebb:p:nodebb:r:admin-appearance-skins] +file_filter = public/language//admin/appearance/skins.json +source_file = public/language/en-GB/admin/appearance/skins.json +source_lang = en_GB +type = KEYVALUEJSON +trans.et = public/language/et/admin/appearance/skins.json +trans.he = public/language/he/admin/appearance/skins.json +trans.hr = public/language/hr/admin/appearance/skins.json +trans.sc = public/language/sc/admin/appearance/skins.json +trans.sk = public/language/sk/admin/appearance/skins.json +trans.uk = public/language/uk/admin/appearance/skins.json +trans.vi = public/language/vi/admin/appearance/skins.json +trans.bn = public/language/bn/admin/appearance/skins.json +trans.ms = public/language/ms/admin/appearance/skins.json +trans.pl = public/language/pl/admin/appearance/skins.json +trans.sv = public/language/sv/admin/appearance/skins.json +trans.fi = public/language/fi/admin/appearance/skins.json +trans.da = public/language/da/admin/appearance/skins.json +trans.hu = public/language/hu/admin/appearance/skins.json +trans.hy = public/language/hy/admin/appearance/skins.json +trans.id = public/language/id/admin/appearance/skins.json +trans.lv = public/language/lv/admin/appearance/skins.json +trans.sq_AL = public/language/sq-AL/admin/appearance/skins.json +trans.cs = public/language/cs/admin/appearance/skins.json +trans.de = public/language/de/admin/appearance/skins.json +trans.ko = public/language/ko/admin/appearance/skins.json +trans.sl = public/language/sl/admin/appearance/skins.json +trans.zh_TW = public/language/zh-TW/admin/appearance/skins.json +trans.bg = public/language/bg/admin/appearance/skins.json +trans.en_US = public/language/en-US/admin/appearance/skins.json +trans.es = public/language/es/admin/appearance/skins.json +trans.sr = public/language/sr/admin/appearance/skins.json +trans.zh_CN = public/language/zh-CN/admin/appearance/skins.json +trans.en@pirate = public/language/en-x-pirate/admin/appearance/skins.json +trans.it = public/language/it/admin/appearance/skins.json +trans.ja = public/language/ja/admin/appearance/skins.json +trans.nb = public/language/nb/admin/appearance/skins.json +trans.fr = public/language/fr/admin/appearance/skins.json +trans.fa_IR = public/language/fa-IR/admin/appearance/skins.json +trans.gl = public/language/gl/admin/appearance/skins.json +trans.ro = public/language/ro/admin/appearance/skins.json +trans.ru = public/language/ru/admin/appearance/skins.json +trans.rw = public/language/rw/admin/appearance/skins.json +trans.el = public/language/el/admin/appearance/skins.json +trans.lt = public/language/lt/admin/appearance/skins.json +trans.nl = public/language/nl/admin/appearance/skins.json +trans.pt_BR = public/language/pt-BR/admin/appearance/skins.json +trans.pt_PT = public/language/pt-PT/admin/appearance/skins.json +trans.th = public/language/th/admin/appearance/skins.json +trans.tr = public/language/tr/admin/appearance/skins.json +trans.ar = public/language/ar/admin/appearance/skins.json + +[o:nodebb:p:nodebb:r:admin-appearance-themes] +file_filter = public/language//admin/appearance/themes.json +source_file = public/language/en-GB/admin/appearance/themes.json +source_lang = en_GB +type = KEYVALUEJSON +trans.sq_AL = public/language/sq-AL/admin/appearance/themes.json +trans.ar = public/language/ar/admin/appearance/themes.json +trans.bg = public/language/bg/admin/appearance/themes.json +trans.bn = public/language/bn/admin/appearance/themes.json +trans.en_US = public/language/en-US/admin/appearance/themes.json +trans.fa_IR = public/language/fa-IR/admin/appearance/themes.json +trans.pt_BR = public/language/pt-BR/admin/appearance/themes.json +trans.ru = public/language/ru/admin/appearance/themes.json +trans.sv = public/language/sv/admin/appearance/themes.json +trans.cs = public/language/cs/admin/appearance/themes.json +trans.da = public/language/da/admin/appearance/themes.json +trans.sk = public/language/sk/admin/appearance/themes.json +trans.zh_CN = public/language/zh-CN/admin/appearance/themes.json +trans.et = public/language/et/admin/appearance/themes.json +trans.ja = public/language/ja/admin/appearance/themes.json +trans.sl = public/language/sl/admin/appearance/themes.json +trans.sr = public/language/sr/admin/appearance/themes.json +trans.hr = public/language/hr/admin/appearance/themes.json +trans.hu = public/language/hu/admin/appearance/themes.json +trans.ms = public/language/ms/admin/appearance/themes.json +trans.sc = public/language/sc/admin/appearance/themes.json +trans.th = public/language/th/admin/appearance/themes.json +trans.lt = public/language/lt/admin/appearance/themes.json +trans.el = public/language/el/admin/appearance/themes.json +trans.en@pirate = public/language/en-x-pirate/admin/appearance/themes.json +trans.fi = public/language/fi/admin/appearance/themes.json +trans.he = public/language/he/admin/appearance/themes.json +trans.hy = public/language/hy/admin/appearance/themes.json +trans.id = public/language/id/admin/appearance/themes.json +trans.ko = public/language/ko/admin/appearance/themes.json +trans.nb = public/language/nb/admin/appearance/themes.json +trans.pl = public/language/pl/admin/appearance/themes.json +trans.pt_PT = public/language/pt-PT/admin/appearance/themes.json +trans.tr = public/language/tr/admin/appearance/themes.json +trans.fr = public/language/fr/admin/appearance/themes.json +trans.nl = public/language/nl/admin/appearance/themes.json +trans.ro = public/language/ro/admin/appearance/themes.json +trans.uk = public/language/uk/admin/appearance/themes.json +trans.de = public/language/de/admin/appearance/themes.json +trans.es = public/language/es/admin/appearance/themes.json +trans.gl = public/language/gl/admin/appearance/themes.json +trans.it = public/language/it/admin/appearance/themes.json +trans.lv = public/language/lv/admin/appearance/themes.json +trans.vi = public/language/vi/admin/appearance/themes.json +trans.rw = public/language/rw/admin/appearance/themes.json +trans.zh_TW = public/language/zh-TW/admin/appearance/themes.json + +[o:nodebb:p:nodebb:r:admin-dashboard] +file_filter = public/language//admin/dashboard.json +source_file = public/language/en-GB/admin/dashboard.json +source_lang = en_GB +type = KEYVALUEJSON +trans.bn = public/language/bn/admin/dashboard.json +trans.en_US = public/language/en-US/admin/dashboard.json +trans.fa_IR = public/language/fa-IR/admin/dashboard.json +trans.fr = public/language/fr/admin/dashboard.json +trans.hu = public/language/hu/admin/dashboard.json +trans.nl = public/language/nl/admin/dashboard.json +trans.pl = public/language/pl/admin/dashboard.json +trans.bg = public/language/bg/admin/dashboard.json +trans.el = public/language/el/admin/dashboard.json +trans.gl = public/language/gl/admin/dashboard.json +trans.hy = public/language/hy/admin/dashboard.json +trans.id = public/language/id/admin/dashboard.json +trans.ja = public/language/ja/admin/dashboard.json +trans.pt_BR = public/language/pt-BR/admin/dashboard.json +trans.zh_CN = public/language/zh-CN/admin/dashboard.json +trans.zh_TW = public/language/zh-TW/admin/dashboard.json +trans.uk = public/language/uk/admin/dashboard.json +trans.ar = public/language/ar/admin/dashboard.json +trans.de = public/language/de/admin/dashboard.json +trans.en@pirate = public/language/en-x-pirate/admin/dashboard.json +trans.es = public/language/es/admin/dashboard.json +trans.ko = public/language/ko/admin/dashboard.json +trans.sv = public/language/sv/admin/dashboard.json +trans.lv = public/language/lv/admin/dashboard.json +trans.ms = public/language/ms/admin/dashboard.json +trans.ru = public/language/ru/admin/dashboard.json +trans.sl = public/language/sl/admin/dashboard.json +trans.sq_AL = public/language/sq-AL/admin/dashboard.json +trans.da = public/language/da/admin/dashboard.json +trans.lt = public/language/lt/admin/dashboard.json +trans.he = public/language/he/admin/dashboard.json +trans.sr = public/language/sr/admin/dashboard.json +trans.vi = public/language/vi/admin/dashboard.json +trans.pt_PT = public/language/pt-PT/admin/dashboard.json +trans.ro = public/language/ro/admin/dashboard.json +trans.rw = public/language/rw/admin/dashboard.json +trans.sc = public/language/sc/admin/dashboard.json +trans.th = public/language/th/admin/dashboard.json +trans.sk = public/language/sk/admin/dashboard.json +trans.tr = public/language/tr/admin/dashboard.json +trans.cs = public/language/cs/admin/dashboard.json +trans.et = public/language/et/admin/dashboard.json +trans.fi = public/language/fi/admin/dashboard.json +trans.hr = public/language/hr/admin/dashboard.json +trans.it = public/language/it/admin/dashboard.json +trans.nb = public/language/nb/admin/dashboard.json + +[o:nodebb:p:nodebb:r:admin-development-info] +file_filter = public/language//admin/development/info.json +source_file = public/language/en-GB/admin/development/info.json +source_lang = en_GB +type = KEYVALUEJSON +trans.de = public/language/de/admin/development/info.json +trans.et = public/language/et/admin/development/info.json +trans.hr = public/language/hr/admin/development/info.json +trans.ms = public/language/ms/admin/development/info.json +trans.pl = public/language/pl/admin/development/info.json +trans.pt_BR = public/language/pt-BR/admin/development/info.json +trans.ro = public/language/ro/admin/development/info.json +trans.rw = public/language/rw/admin/development/info.json +trans.sl = public/language/sl/admin/development/info.json +trans.sr = public/language/sr/admin/development/info.json +trans.uk = public/language/uk/admin/development/info.json +trans.da = public/language/da/admin/development/info.json +trans.en@pirate = public/language/en-x-pirate/admin/development/info.json +trans.es = public/language/es/admin/development/info.json +trans.fi = public/language/fi/admin/development/info.json +trans.it = public/language/it/admin/development/info.json +trans.lt = public/language/lt/admin/development/info.json +trans.th = public/language/th/admin/development/info.json +trans.ar = public/language/ar/admin/development/info.json +trans.bn = public/language/bn/admin/development/info.json +trans.fa_IR = public/language/fa-IR/admin/development/info.json +trans.hu = public/language/hu/admin/development/info.json +trans.id = public/language/id/admin/development/info.json +trans.lv = public/language/lv/admin/development/info.json +trans.gl = public/language/gl/admin/development/info.json +trans.hy = public/language/hy/admin/development/info.json +trans.zh_CN = public/language/zh-CN/admin/development/info.json +trans.cs = public/language/cs/admin/development/info.json +trans.ja = public/language/ja/admin/development/info.json +trans.nb = public/language/nb/admin/development/info.json +trans.sq_AL = public/language/sq-AL/admin/development/info.json +trans.sv = public/language/sv/admin/development/info.json +trans.bg = public/language/bg/admin/development/info.json +trans.he = public/language/he/admin/development/info.json +trans.sk = public/language/sk/admin/development/info.json +trans.el = public/language/el/admin/development/info.json +trans.fr = public/language/fr/admin/development/info.json +trans.ru = public/language/ru/admin/development/info.json +trans.sc = public/language/sc/admin/development/info.json +trans.tr = public/language/tr/admin/development/info.json +trans.en_US = public/language/en-US/admin/development/info.json +trans.ko = public/language/ko/admin/development/info.json +trans.nl = public/language/nl/admin/development/info.json +trans.pt_PT = public/language/pt-PT/admin/development/info.json +trans.vi = public/language/vi/admin/development/info.json +trans.zh_TW = public/language/zh-TW/admin/development/info.json + +[o:nodebb:p:nodebb:r:admin-development-logger] +file_filter = public/language//admin/development/logger.json +source_file = public/language/en-GB/admin/development/logger.json +source_lang = en_GB +type = KEYVALUEJSON +trans.de = public/language/de/admin/development/logger.json +trans.fr = public/language/fr/admin/development/logger.json +trans.gl = public/language/gl/admin/development/logger.json +trans.hr = public/language/hr/admin/development/logger.json +trans.sl = public/language/sl/admin/development/logger.json +trans.vi = public/language/vi/admin/development/logger.json +trans.zh_TW = public/language/zh-TW/admin/development/logger.json +trans.ar = public/language/ar/admin/development/logger.json +trans.he = public/language/he/admin/development/logger.json +trans.id = public/language/id/admin/development/logger.json +trans.ko = public/language/ko/admin/development/logger.json +trans.lt = public/language/lt/admin/development/logger.json +trans.nb = public/language/nb/admin/development/logger.json +trans.pt_BR = public/language/pt-BR/admin/development/logger.json +trans.ro = public/language/ro/admin/development/logger.json +trans.fi = public/language/fi/admin/development/logger.json +trans.sc = public/language/sc/admin/development/logger.json +trans.ru = public/language/ru/admin/development/logger.json +trans.sq_AL = public/language/sq-AL/admin/development/logger.json +trans.th = public/language/th/admin/development/logger.json +trans.hy = public/language/hy/admin/development/logger.json +trans.fa_IR = public/language/fa-IR/admin/development/logger.json +trans.it = public/language/it/admin/development/logger.json +trans.lv = public/language/lv/admin/development/logger.json +trans.nl = public/language/nl/admin/development/logger.json +trans.pt_PT = public/language/pt-PT/admin/development/logger.json +trans.sk = public/language/sk/admin/development/logger.json +trans.sv = public/language/sv/admin/development/logger.json +trans.el = public/language/el/admin/development/logger.json +trans.uk = public/language/uk/admin/development/logger.json +trans.ms = public/language/ms/admin/development/logger.json +trans.zh_CN = public/language/zh-CN/admin/development/logger.json +trans.bn = public/language/bn/admin/development/logger.json +trans.et = public/language/et/admin/development/logger.json +trans.ja = public/language/ja/admin/development/logger.json +trans.da = public/language/da/admin/development/logger.json +trans.en@pirate = public/language/en-x-pirate/admin/development/logger.json +trans.es = public/language/es/admin/development/logger.json +trans.cs = public/language/cs/admin/development/logger.json +trans.en_US = public/language/en-US/admin/development/logger.json +trans.hu = public/language/hu/admin/development/logger.json +trans.pl = public/language/pl/admin/development/logger.json +trans.rw = public/language/rw/admin/development/logger.json +trans.sr = public/language/sr/admin/development/logger.json +trans.tr = public/language/tr/admin/development/logger.json +trans.bg = public/language/bg/admin/development/logger.json + +[o:nodebb:p:nodebb:r:admin-extend-plugins] +file_filter = public/language//admin/extend/plugins.json +source_file = public/language/en-GB/admin/extend/plugins.json +source_lang = en_GB +type = KEYVALUEJSON +trans.en@pirate = public/language/en-x-pirate/admin/extend/plugins.json +trans.et = public/language/et/admin/extend/plugins.json +trans.hr = public/language/hr/admin/extend/plugins.json +trans.hy = public/language/hy/admin/extend/plugins.json +trans.tr = public/language/tr/admin/extend/plugins.json +trans.it = public/language/it/admin/extend/plugins.json +trans.lv = public/language/lv/admin/extend/plugins.json +trans.sl = public/language/sl/admin/extend/plugins.json +trans.th = public/language/th/admin/extend/plugins.json +trans.en_US = public/language/en-US/admin/extend/plugins.json +trans.he = public/language/he/admin/extend/plugins.json +trans.nb = public/language/nb/admin/extend/plugins.json +trans.sk = public/language/sk/admin/extend/plugins.json +trans.uk = public/language/uk/admin/extend/plugins.json +trans.es = public/language/es/admin/extend/plugins.json +trans.lt = public/language/lt/admin/extend/plugins.json +trans.sv = public/language/sv/admin/extend/plugins.json +trans.nl = public/language/nl/admin/extend/plugins.json +trans.pt_PT = public/language/pt-PT/admin/extend/plugins.json +trans.ar = public/language/ar/admin/extend/plugins.json +trans.cs = public/language/cs/admin/extend/plugins.json +trans.fi = public/language/fi/admin/extend/plugins.json +trans.id = public/language/id/admin/extend/plugins.json +trans.ja = public/language/ja/admin/extend/plugins.json +trans.ko = public/language/ko/admin/extend/plugins.json +trans.ru = public/language/ru/admin/extend/plugins.json +trans.sr = public/language/sr/admin/extend/plugins.json +trans.bn = public/language/bn/admin/extend/plugins.json +trans.de = public/language/de/admin/extend/plugins.json +trans.el = public/language/el/admin/extend/plugins.json +trans.ms = public/language/ms/admin/extend/plugins.json +trans.pt_BR = public/language/pt-BR/admin/extend/plugins.json +trans.sq_AL = public/language/sq-AL/admin/extend/plugins.json +trans.zh_TW = public/language/zh-TW/admin/extend/plugins.json +trans.da = public/language/da/admin/extend/plugins.json +trans.fa_IR = public/language/fa-IR/admin/extend/plugins.json +trans.gl = public/language/gl/admin/extend/plugins.json +trans.hu = public/language/hu/admin/extend/plugins.json +trans.sc = public/language/sc/admin/extend/plugins.json +trans.vi = public/language/vi/admin/extend/plugins.json +trans.bg = public/language/bg/admin/extend/plugins.json +trans.fr = public/language/fr/admin/extend/plugins.json +trans.pl = public/language/pl/admin/extend/plugins.json +trans.ro = public/language/ro/admin/extend/plugins.json +trans.rw = public/language/rw/admin/extend/plugins.json +trans.zh_CN = public/language/zh-CN/admin/extend/plugins.json + +[o:nodebb:p:nodebb:r:admin-extend-rewards] +file_filter = public/language//admin/extend/rewards.json +source_file = public/language/en-GB/admin/extend/rewards.json +source_lang = en_GB +type = KEYVALUEJSON +trans.ms = public/language/ms/admin/extend/rewards.json +trans.ar = public/language/ar/admin/extend/rewards.json +trans.fi = public/language/fi/admin/extend/rewards.json +trans.fr = public/language/fr/admin/extend/rewards.json +trans.sr = public/language/sr/admin/extend/rewards.json +trans.id = public/language/id/admin/extend/rewards.json +trans.pt_BR = public/language/pt-BR/admin/extend/rewards.json +trans.sq_AL = public/language/sq-AL/admin/extend/rewards.json +trans.pt_PT = public/language/pt-PT/admin/extend/rewards.json +trans.ro = public/language/ro/admin/extend/rewards.json +trans.ru = public/language/ru/admin/extend/rewards.json +trans.sk = public/language/sk/admin/extend/rewards.json +trans.es = public/language/es/admin/extend/rewards.json +trans.lt = public/language/lt/admin/extend/rewards.json +trans.nl = public/language/nl/admin/extend/rewards.json +trans.en@pirate = public/language/en-x-pirate/admin/extend/rewards.json +trans.hr = public/language/hr/admin/extend/rewards.json +trans.ja = public/language/ja/admin/extend/rewards.json +trans.ko = public/language/ko/admin/extend/rewards.json +trans.nb = public/language/nb/admin/extend/rewards.json +trans.bg = public/language/bg/admin/extend/rewards.json +trans.bn = public/language/bn/admin/extend/rewards.json +trans.da = public/language/da/admin/extend/rewards.json +trans.hy = public/language/hy/admin/extend/rewards.json +trans.pl = public/language/pl/admin/extend/rewards.json +trans.sc = public/language/sc/admin/extend/rewards.json +trans.it = public/language/it/admin/extend/rewards.json +trans.tr = public/language/tr/admin/extend/rewards.json +trans.uk = public/language/uk/admin/extend/rewards.json +trans.vi = public/language/vi/admin/extend/rewards.json +trans.zh_CN = public/language/zh-CN/admin/extend/rewards.json +trans.en_US = public/language/en-US/admin/extend/rewards.json +trans.fa_IR = public/language/fa-IR/admin/extend/rewards.json +trans.he = public/language/he/admin/extend/rewards.json +trans.zh_TW = public/language/zh-TW/admin/extend/rewards.json +trans.lv = public/language/lv/admin/extend/rewards.json +trans.sl = public/language/sl/admin/extend/rewards.json +trans.cs = public/language/cs/admin/extend/rewards.json +trans.el = public/language/el/admin/extend/rewards.json +trans.et = public/language/et/admin/extend/rewards.json +trans.rw = public/language/rw/admin/extend/rewards.json +trans.sv = public/language/sv/admin/extend/rewards.json +trans.th = public/language/th/admin/extend/rewards.json +trans.de = public/language/de/admin/extend/rewards.json +trans.gl = public/language/gl/admin/extend/rewards.json +trans.hu = public/language/hu/admin/extend/rewards.json + +[o:nodebb:p:nodebb:r:admin-extend-widgets] +file_filter = public/language//admin/extend/widgets.json +source_file = public/language/en-GB/admin/extend/widgets.json +source_lang = en_GB +type = KEYVALUEJSON +trans.bn = public/language/bn/admin/extend/widgets.json +trans.el = public/language/el/admin/extend/widgets.json +trans.id = public/language/id/admin/extend/widgets.json +trans.nb = public/language/nb/admin/extend/widgets.json +trans.ro = public/language/ro/admin/extend/widgets.json +trans.rw = public/language/rw/admin/extend/widgets.json +trans.ar = public/language/ar/admin/extend/widgets.json +trans.hy = public/language/hy/admin/extend/widgets.json +trans.lv = public/language/lv/admin/extend/widgets.json +trans.ru = public/language/ru/admin/extend/widgets.json +trans.sc = public/language/sc/admin/extend/widgets.json +trans.sr = public/language/sr/admin/extend/widgets.json +trans.tr = public/language/tr/admin/extend/widgets.json +trans.vi = public/language/vi/admin/extend/widgets.json +trans.fr = public/language/fr/admin/extend/widgets.json +trans.fa_IR = public/language/fa-IR/admin/extend/widgets.json +trans.ko = public/language/ko/admin/extend/widgets.json +trans.lt = public/language/lt/admin/extend/widgets.json +trans.sq_AL = public/language/sq-AL/admin/extend/widgets.json +trans.uk = public/language/uk/admin/extend/widgets.json +trans.bg = public/language/bg/admin/extend/widgets.json +trans.de = public/language/de/admin/extend/widgets.json +trans.ms = public/language/ms/admin/extend/widgets.json +trans.nl = public/language/nl/admin/extend/widgets.json +trans.pt_BR = public/language/pt-BR/admin/extend/widgets.json +trans.sk = public/language/sk/admin/extend/widgets.json +trans.zh_CN = public/language/zh-CN/admin/extend/widgets.json +trans.da = public/language/da/admin/extend/widgets.json +trans.hu = public/language/hu/admin/extend/widgets.json +trans.ja = public/language/ja/admin/extend/widgets.json +trans.th = public/language/th/admin/extend/widgets.json +trans.et = public/language/et/admin/extend/widgets.json +trans.gl = public/language/gl/admin/extend/widgets.json +trans.he = public/language/he/admin/extend/widgets.json +trans.it = public/language/it/admin/extend/widgets.json +trans.pl = public/language/pl/admin/extend/widgets.json +trans.zh_TW = public/language/zh-TW/admin/extend/widgets.json +trans.en@pirate = public/language/en-x-pirate/admin/extend/widgets.json +trans.fi = public/language/fi/admin/extend/widgets.json +trans.hr = public/language/hr/admin/extend/widgets.json +trans.sl = public/language/sl/admin/extend/widgets.json +trans.sv = public/language/sv/admin/extend/widgets.json +trans.cs = public/language/cs/admin/extend/widgets.json +trans.es = public/language/es/admin/extend/widgets.json +trans.pt_PT = public/language/pt-PT/admin/extend/widgets.json +trans.en_US = public/language/en-US/admin/extend/widgets.json + +[o:nodebb:p:nodebb:r:admin-manage-admins-mods] +file_filter = public/language//admin/manage/admins-mods.json +source_file = public/language/en-GB/admin/manage/admins-mods.json +source_lang = en_GB +type = KEYVALUEJSON +trans.hu = public/language/hu/admin/manage/admins-mods.json +trans.nb = public/language/nb/admin/manage/admins-mods.json +trans.ru = public/language/ru/admin/manage/admins-mods.json +trans.fr = public/language/fr/admin/manage/admins-mods.json +trans.he = public/language/he/admin/manage/admins-mods.json +trans.lv = public/language/lv/admin/manage/admins-mods.json +trans.sc = public/language/sc/admin/manage/admins-mods.json +trans.vi = public/language/vi/admin/manage/admins-mods.json +trans.es = public/language/es/admin/manage/admins-mods.json +trans.lt = public/language/lt/admin/manage/admins-mods.json +trans.de = public/language/de/admin/manage/admins-mods.json +trans.ja = public/language/ja/admin/manage/admins-mods.json +trans.pl = public/language/pl/admin/manage/admins-mods.json +trans.sq_AL = public/language/sq-AL/admin/manage/admins-mods.json +trans.sr = public/language/sr/admin/manage/admins-mods.json +trans.zh_TW = public/language/zh-TW/admin/manage/admins-mods.json +trans.id = public/language/id/admin/manage/admins-mods.json +trans.ko = public/language/ko/admin/manage/admins-mods.json +trans.gl = public/language/gl/admin/manage/admins-mods.json +trans.hr = public/language/hr/admin/manage/admins-mods.json +trans.hy = public/language/hy/admin/manage/admins-mods.json +trans.rw = public/language/rw/admin/manage/admins-mods.json +trans.bn = public/language/bn/admin/manage/admins-mods.json +trans.fi = public/language/fi/admin/manage/admins-mods.json +trans.ms = public/language/ms/admin/manage/admins-mods.json +trans.pt_BR = public/language/pt-BR/admin/manage/admins-mods.json +trans.pt_PT = public/language/pt-PT/admin/manage/admins-mods.json +trans.sv = public/language/sv/admin/manage/admins-mods.json +trans.th = public/language/th/admin/manage/admins-mods.json +trans.uk = public/language/uk/admin/manage/admins-mods.json +trans.ar = public/language/ar/admin/manage/admins-mods.json +trans.bg = public/language/bg/admin/manage/admins-mods.json +trans.el = public/language/el/admin/manage/admins-mods.json +trans.en@pirate = public/language/en-x-pirate/admin/manage/admins-mods.json +trans.en_US = public/language/en-US/admin/manage/admins-mods.json +trans.it = public/language/it/admin/manage/admins-mods.json +trans.nl = public/language/nl/admin/manage/admins-mods.json +trans.ro = public/language/ro/admin/manage/admins-mods.json +trans.cs = public/language/cs/admin/manage/admins-mods.json +trans.da = public/language/da/admin/manage/admins-mods.json +trans.zh_CN = public/language/zh-CN/admin/manage/admins-mods.json +trans.sk = public/language/sk/admin/manage/admins-mods.json +trans.sl = public/language/sl/admin/manage/admins-mods.json +trans.tr = public/language/tr/admin/manage/admins-mods.json +trans.et = public/language/et/admin/manage/admins-mods.json +trans.fa_IR = public/language/fa-IR/admin/manage/admins-mods.json + +[o:nodebb:p:nodebb:r:admin-manage-categories] +file_filter = public/language//admin/manage/categories.json +source_file = public/language/en-GB/admin/manage/categories.json +source_lang = en_GB +type = KEYVALUEJSON +trans.es = public/language/es/admin/manage/categories.json +trans.gl = public/language/gl/admin/manage/categories.json +trans.pt_PT = public/language/pt-PT/admin/manage/categories.json +trans.sc = public/language/sc/admin/manage/categories.json +trans.zh_TW = public/language/zh-TW/admin/manage/categories.json +trans.bg = public/language/bg/admin/manage/categories.json +trans.hu = public/language/hu/admin/manage/categories.json +trans.hy = public/language/hy/admin/manage/categories.json +trans.sk = public/language/sk/admin/manage/categories.json +trans.uk = public/language/uk/admin/manage/categories.json +trans.vi = public/language/vi/admin/manage/categories.json +trans.bn = public/language/bn/admin/manage/categories.json +trans.en_US = public/language/en-US/admin/manage/categories.json +trans.fr = public/language/fr/admin/manage/categories.json +trans.it = public/language/it/admin/manage/categories.json +trans.nb = public/language/nb/admin/manage/categories.json +trans.ru = public/language/ru/admin/manage/categories.json +trans.sr = public/language/sr/admin/manage/categories.json +trans.fa_IR = public/language/fa-IR/admin/manage/categories.json +trans.id = public/language/id/admin/manage/categories.json +trans.ms = public/language/ms/admin/manage/categories.json +trans.pl = public/language/pl/admin/manage/categories.json +trans.tr = public/language/tr/admin/manage/categories.json +trans.zh_CN = public/language/zh-CN/admin/manage/categories.json +trans.lt = public/language/lt/admin/manage/categories.json +trans.sl = public/language/sl/admin/manage/categories.json +trans.sv = public/language/sv/admin/manage/categories.json +trans.rw = public/language/rw/admin/manage/categories.json +trans.el = public/language/el/admin/manage/categories.json +trans.et = public/language/et/admin/manage/categories.json +trans.fi = public/language/fi/admin/manage/categories.json +trans.he = public/language/he/admin/manage/categories.json +trans.ja = public/language/ja/admin/manage/categories.json +trans.ko = public/language/ko/admin/manage/categories.json +trans.ro = public/language/ro/admin/manage/categories.json +trans.cs = public/language/cs/admin/manage/categories.json +trans.sq_AL = public/language/sq-AL/admin/manage/categories.json +trans.th = public/language/th/admin/manage/categories.json +trans.pt_BR = public/language/pt-BR/admin/manage/categories.json +trans.ar = public/language/ar/admin/manage/categories.json +trans.da = public/language/da/admin/manage/categories.json +trans.de = public/language/de/admin/manage/categories.json +trans.en@pirate = public/language/en-x-pirate/admin/manage/categories.json +trans.hr = public/language/hr/admin/manage/categories.json +trans.lv = public/language/lv/admin/manage/categories.json +trans.nl = public/language/nl/admin/manage/categories.json + +[o:nodebb:p:nodebb:r:admin-manage-digest] +file_filter = public/language//admin/manage/digest.json +source_file = public/language/en-GB/admin/manage/digest.json +source_lang = en_GB +type = KEYVALUEJSON +trans.sr = public/language/sr/admin/manage/digest.json +trans.fi = public/language/fi/admin/manage/digest.json +trans.gl = public/language/gl/admin/manage/digest.json +trans.fr = public/language/fr/admin/manage/digest.json +trans.hu = public/language/hu/admin/manage/digest.json +trans.id = public/language/id/admin/manage/digest.json +trans.lv = public/language/lv/admin/manage/digest.json +trans.pl = public/language/pl/admin/manage/digest.json +trans.sl = public/language/sl/admin/manage/digest.json +trans.da = public/language/da/admin/manage/digest.json +trans.fa_IR = public/language/fa-IR/admin/manage/digest.json +trans.sq_AL = public/language/sq-AL/admin/manage/digest.json +trans.en@pirate = public/language/en-x-pirate/admin/manage/digest.json +trans.en_US = public/language/en-US/admin/manage/digest.json +trans.he = public/language/he/admin/manage/digest.json +trans.hr = public/language/hr/admin/manage/digest.json +trans.hy = public/language/hy/admin/manage/digest.json +trans.it = public/language/it/admin/manage/digest.json +trans.bg = public/language/bg/admin/manage/digest.json +trans.bn = public/language/bn/admin/manage/digest.json +trans.ro = public/language/ro/admin/manage/digest.json +trans.th = public/language/th/admin/manage/digest.json +trans.uk = public/language/uk/admin/manage/digest.json +trans.vi = public/language/vi/admin/manage/digest.json +trans.ms = public/language/ms/admin/manage/digest.json +trans.pt_BR = public/language/pt-BR/admin/manage/digest.json +trans.rw = public/language/rw/admin/manage/digest.json +trans.de = public/language/de/admin/manage/digest.json +trans.el = public/language/el/admin/manage/digest.json +trans.nl = public/language/nl/admin/manage/digest.json +trans.ru = public/language/ru/admin/manage/digest.json +trans.sv = public/language/sv/admin/manage/digest.json +trans.zh_TW = public/language/zh-TW/admin/manage/digest.json +trans.es = public/language/es/admin/manage/digest.json +trans.lt = public/language/lt/admin/manage/digest.json +trans.ko = public/language/ko/admin/manage/digest.json +trans.zh_CN = public/language/zh-CN/admin/manage/digest.json +trans.ar = public/language/ar/admin/manage/digest.json +trans.ja = public/language/ja/admin/manage/digest.json +trans.nb = public/language/nb/admin/manage/digest.json +trans.sk = public/language/sk/admin/manage/digest.json +trans.pt_PT = public/language/pt-PT/admin/manage/digest.json +trans.sc = public/language/sc/admin/manage/digest.json +trans.tr = public/language/tr/admin/manage/digest.json +trans.cs = public/language/cs/admin/manage/digest.json +trans.et = public/language/et/admin/manage/digest.json + +[o:nodebb:p:nodebb:r:admin-manage-groups] +file_filter = public/language//admin/manage/groups.json +source_file = public/language/en-GB/admin/manage/groups.json +source_lang = en_GB +type = KEYVALUEJSON +trans.pt_PT = public/language/pt-PT/admin/manage/groups.json +trans.tr = public/language/tr/admin/manage/groups.json +trans.uk = public/language/uk/admin/manage/groups.json +trans.zh_TW = public/language/zh-TW/admin/manage/groups.json +trans.nb = public/language/nb/admin/manage/groups.json +trans.id = public/language/id/admin/manage/groups.json +trans.lt = public/language/lt/admin/manage/groups.json +trans.pl = public/language/pl/admin/manage/groups.json +trans.sc = public/language/sc/admin/manage/groups.json +trans.hy = public/language/hy/admin/manage/groups.json +trans.he = public/language/he/admin/manage/groups.json +trans.ko = public/language/ko/admin/manage/groups.json +trans.sv = public/language/sv/admin/manage/groups.json +trans.bn = public/language/bn/admin/manage/groups.json +trans.es = public/language/es/admin/manage/groups.json +trans.ja = public/language/ja/admin/manage/groups.json +trans.th = public/language/th/admin/manage/groups.json +trans.cs = public/language/cs/admin/manage/groups.json +trans.fi = public/language/fi/admin/manage/groups.json +trans.hr = public/language/hr/admin/manage/groups.json +trans.it = public/language/it/admin/manage/groups.json +trans.en@pirate = public/language/en-x-pirate/admin/manage/groups.json +trans.bg = public/language/bg/admin/manage/groups.json +trans.hu = public/language/hu/admin/manage/groups.json +trans.pt_BR = public/language/pt-BR/admin/manage/groups.json +trans.ro = public/language/ro/admin/manage/groups.json +trans.ru = public/language/ru/admin/manage/groups.json +trans.sq_AL = public/language/sq-AL/admin/manage/groups.json +trans.vi = public/language/vi/admin/manage/groups.json +trans.ar = public/language/ar/admin/manage/groups.json +trans.et = public/language/et/admin/manage/groups.json +trans.fa_IR = public/language/fa-IR/admin/manage/groups.json +trans.fr = public/language/fr/admin/manage/groups.json +trans.nl = public/language/nl/admin/manage/groups.json +trans.rw = public/language/rw/admin/manage/groups.json +trans.sl = public/language/sl/admin/manage/groups.json +trans.zh_CN = public/language/zh-CN/admin/manage/groups.json +trans.da = public/language/da/admin/manage/groups.json +trans.el = public/language/el/admin/manage/groups.json +trans.en_US = public/language/en-US/admin/manage/groups.json +trans.gl = public/language/gl/admin/manage/groups.json +trans.lv = public/language/lv/admin/manage/groups.json +trans.ms = public/language/ms/admin/manage/groups.json +trans.sk = public/language/sk/admin/manage/groups.json +trans.sr = public/language/sr/admin/manage/groups.json +trans.de = public/language/de/admin/manage/groups.json + +[o:nodebb:p:nodebb:r:admin-manage-privileges] +file_filter = public/language//admin/manage/privileges.json +source_file = public/language/en-GB/admin/manage/privileges.json +source_lang = en_GB +type = KEYVALUEJSON +trans.bg = public/language/bg/admin/manage/privileges.json +trans.es = public/language/es/admin/manage/privileges.json +trans.fa_IR = public/language/fa-IR/admin/manage/privileges.json +trans.ms = public/language/ms/admin/manage/privileges.json +trans.ro = public/language/ro/admin/manage/privileges.json +trans.sl = public/language/sl/admin/manage/privileges.json +trans.el = public/language/el/admin/manage/privileges.json +trans.lt = public/language/lt/admin/manage/privileges.json +trans.pt_BR = public/language/pt-BR/admin/manage/privileges.json +trans.pt_PT = public/language/pt-PT/admin/manage/privileges.json +trans.hu = public/language/hu/admin/manage/privileges.json +trans.pl = public/language/pl/admin/manage/privileges.json +trans.sc = public/language/sc/admin/manage/privileges.json +trans.uk = public/language/uk/admin/manage/privileges.json +trans.bn = public/language/bn/admin/manage/privileges.json +trans.cs = public/language/cs/admin/manage/privileges.json +trans.da = public/language/da/admin/manage/privileges.json +trans.en@pirate = public/language/en-x-pirate/admin/manage/privileges.json +trans.vi = public/language/vi/admin/manage/privileges.json +trans.en_US = public/language/en-US/admin/manage/privileges.json +trans.hy = public/language/hy/admin/manage/privileges.json +trans.sr = public/language/sr/admin/manage/privileges.json +trans.ja = public/language/ja/admin/manage/privileges.json +trans.nb = public/language/nb/admin/manage/privileges.json +trans.nl = public/language/nl/admin/manage/privileges.json +trans.sv = public/language/sv/admin/manage/privileges.json +trans.et = public/language/et/admin/manage/privileges.json +trans.fr = public/language/fr/admin/manage/privileges.json +trans.he = public/language/he/admin/manage/privileges.json +trans.hr = public/language/hr/admin/manage/privileges.json +trans.th = public/language/th/admin/manage/privileges.json +trans.sq_AL = public/language/sq-AL/admin/manage/privileges.json +trans.gl = public/language/gl/admin/manage/privileges.json +trans.ko = public/language/ko/admin/manage/privileges.json +trans.lv = public/language/lv/admin/manage/privileges.json +trans.sk = public/language/sk/admin/manage/privileges.json +trans.tr = public/language/tr/admin/manage/privileges.json +trans.fi = public/language/fi/admin/manage/privileges.json +trans.id = public/language/id/admin/manage/privileges.json +trans.it = public/language/it/admin/manage/privileges.json +trans.rw = public/language/rw/admin/manage/privileges.json +trans.zh_TW = public/language/zh-TW/admin/manage/privileges.json +trans.ar = public/language/ar/admin/manage/privileges.json +trans.de = public/language/de/admin/manage/privileges.json +trans.ru = public/language/ru/admin/manage/privileges.json +trans.zh_CN = public/language/zh-CN/admin/manage/privileges.json + +[o:nodebb:p:nodebb:r:admin-manage-registration] +file_filter = public/language//admin/manage/registration.json +source_file = public/language/en-GB/admin/manage/registration.json +source_lang = en_GB +type = KEYVALUEJSON +trans.pl = public/language/pl/admin/manage/registration.json +trans.ro = public/language/ro/admin/manage/registration.json +trans.sk = public/language/sk/admin/manage/registration.json +trans.fi = public/language/fi/admin/manage/registration.json +trans.hu = public/language/hu/admin/manage/registration.json +trans.ms = public/language/ms/admin/manage/registration.json +trans.ru = public/language/ru/admin/manage/registration.json +trans.sc = public/language/sc/admin/manage/registration.json +trans.sr = public/language/sr/admin/manage/registration.json +trans.th = public/language/th/admin/manage/registration.json +trans.zh_TW = public/language/zh-TW/admin/manage/registration.json +trans.da = public/language/da/admin/manage/registration.json +trans.et = public/language/et/admin/manage/registration.json +trans.it = public/language/it/admin/manage/registration.json +trans.nb = public/language/nb/admin/manage/registration.json +trans.pt_BR = public/language/pt-BR/admin/manage/registration.json +trans.hy = public/language/hy/admin/manage/registration.json +trans.uk = public/language/uk/admin/manage/registration.json +trans.sq_AL = public/language/sq-AL/admin/manage/registration.json +trans.ar = public/language/ar/admin/manage/registration.json +trans.es = public/language/es/admin/manage/registration.json +trans.he = public/language/he/admin/manage/registration.json +trans.id = public/language/id/admin/manage/registration.json +trans.nl = public/language/nl/admin/manage/registration.json +trans.en@pirate = public/language/en-x-pirate/admin/manage/registration.json +trans.en_US = public/language/en-US/admin/manage/registration.json +trans.rw = public/language/rw/admin/manage/registration.json +trans.sv = public/language/sv/admin/manage/registration.json +trans.tr = public/language/tr/admin/manage/registration.json +trans.vi = public/language/vi/admin/manage/registration.json +trans.bg = public/language/bg/admin/manage/registration.json +trans.cs = public/language/cs/admin/manage/registration.json +trans.fa_IR = public/language/fa-IR/admin/manage/registration.json +trans.fr = public/language/fr/admin/manage/registration.json +trans.lt = public/language/lt/admin/manage/registration.json +trans.ja = public/language/ja/admin/manage/registration.json +trans.ko = public/language/ko/admin/manage/registration.json +trans.lv = public/language/lv/admin/manage/registration.json +trans.bn = public/language/bn/admin/manage/registration.json +trans.de = public/language/de/admin/manage/registration.json +trans.el = public/language/el/admin/manage/registration.json +trans.gl = public/language/gl/admin/manage/registration.json +trans.hr = public/language/hr/admin/manage/registration.json +trans.pt_PT = public/language/pt-PT/admin/manage/registration.json +trans.sl = public/language/sl/admin/manage/registration.json +trans.zh_CN = public/language/zh-CN/admin/manage/registration.json + +[o:nodebb:p:nodebb:r:admin-manage-tags] +file_filter = public/language//admin/manage/tags.json +source_file = public/language/en-GB/admin/manage/tags.json +source_lang = en_GB +type = KEYVALUEJSON +trans.zh_TW = public/language/zh-TW/admin/manage/tags.json +trans.bg = public/language/bg/admin/manage/tags.json +trans.da = public/language/da/admin/manage/tags.json +trans.en_US = public/language/en-US/admin/manage/tags.json +trans.hu = public/language/hu/admin/manage/tags.json +trans.nb = public/language/nb/admin/manage/tags.json +trans.ru = public/language/ru/admin/manage/tags.json +trans.sq_AL = public/language/sq-AL/admin/manage/tags.json +trans.de = public/language/de/admin/manage/tags.json +trans.fi = public/language/fi/admin/manage/tags.json +trans.hr = public/language/hr/admin/manage/tags.json +trans.ko = public/language/ko/admin/manage/tags.json +trans.ms = public/language/ms/admin/manage/tags.json +trans.th = public/language/th/admin/manage/tags.json +trans.ar = public/language/ar/admin/manage/tags.json +trans.el = public/language/el/admin/manage/tags.json +trans.es = public/language/es/admin/manage/tags.json +trans.hy = public/language/hy/admin/manage/tags.json +trans.ja = public/language/ja/admin/manage/tags.json +trans.cs = public/language/cs/admin/manage/tags.json +trans.pl = public/language/pl/admin/manage/tags.json +trans.ro = public/language/ro/admin/manage/tags.json +trans.rw = public/language/rw/admin/manage/tags.json +trans.bn = public/language/bn/admin/manage/tags.json +trans.fa_IR = public/language/fa-IR/admin/manage/tags.json +trans.zh_CN = public/language/zh-CN/admin/manage/tags.json +trans.et = public/language/et/admin/manage/tags.json +trans.fr = public/language/fr/admin/manage/tags.json +trans.gl = public/language/gl/admin/manage/tags.json +trans.id = public/language/id/admin/manage/tags.json +trans.lt = public/language/lt/admin/manage/tags.json +trans.sv = public/language/sv/admin/manage/tags.json +trans.tr = public/language/tr/admin/manage/tags.json +trans.uk = public/language/uk/admin/manage/tags.json +trans.lv = public/language/lv/admin/manage/tags.json +trans.nl = public/language/nl/admin/manage/tags.json +trans.pt_BR = public/language/pt-BR/admin/manage/tags.json +trans.pt_PT = public/language/pt-PT/admin/manage/tags.json +trans.sc = public/language/sc/admin/manage/tags.json +trans.sk = public/language/sk/admin/manage/tags.json +trans.sl = public/language/sl/admin/manage/tags.json +trans.en@pirate = public/language/en-x-pirate/admin/manage/tags.json +trans.he = public/language/he/admin/manage/tags.json +trans.it = public/language/it/admin/manage/tags.json +trans.sr = public/language/sr/admin/manage/tags.json +trans.vi = public/language/vi/admin/manage/tags.json + +[o:nodebb:p:nodebb:r:admin-manage-uploads] +file_filter = public/language//admin/manage/uploads.json +source_file = public/language/en-GB/admin/manage/uploads.json +source_lang = en_GB +type = KEYVALUEJSON +trans.ms = public/language/ms/admin/manage/uploads.json +trans.nb = public/language/nb/admin/manage/uploads.json +trans.tr = public/language/tr/admin/manage/uploads.json +trans.bg = public/language/bg/admin/manage/uploads.json +trans.bn = public/language/bn/admin/manage/uploads.json +trans.en@pirate = public/language/en-x-pirate/admin/manage/uploads.json +trans.lt = public/language/lt/admin/manage/uploads.json +trans.sq_AL = public/language/sq-AL/admin/manage/uploads.json +trans.el = public/language/el/admin/manage/uploads.json +trans.en_US = public/language/en-US/admin/manage/uploads.json +trans.fi = public/language/fi/admin/manage/uploads.json +trans.hr = public/language/hr/admin/manage/uploads.json +trans.sv = public/language/sv/admin/manage/uploads.json +trans.ar = public/language/ar/admin/manage/uploads.json +trans.de = public/language/de/admin/manage/uploads.json +trans.fr = public/language/fr/admin/manage/uploads.json +trans.he = public/language/he/admin/manage/uploads.json +trans.ro = public/language/ro/admin/manage/uploads.json +trans.rw = public/language/rw/admin/manage/uploads.json +trans.gl = public/language/gl/admin/manage/uploads.json +trans.nl = public/language/nl/admin/manage/uploads.json +trans.pl = public/language/pl/admin/manage/uploads.json +trans.pt_BR = public/language/pt-BR/admin/manage/uploads.json +trans.sc = public/language/sc/admin/manage/uploads.json +trans.th = public/language/th/admin/manage/uploads.json +trans.es = public/language/es/admin/manage/uploads.json +trans.et = public/language/et/admin/manage/uploads.json +trans.lv = public/language/lv/admin/manage/uploads.json +trans.pt_PT = public/language/pt-PT/admin/manage/uploads.json +trans.sr = public/language/sr/admin/manage/uploads.json +trans.uk = public/language/uk/admin/manage/uploads.json +trans.vi = public/language/vi/admin/manage/uploads.json +trans.cs = public/language/cs/admin/manage/uploads.json +trans.ru = public/language/ru/admin/manage/uploads.json +trans.sk = public/language/sk/admin/manage/uploads.json +trans.sl = public/language/sl/admin/manage/uploads.json +trans.fa_IR = public/language/fa-IR/admin/manage/uploads.json +trans.hu = public/language/hu/admin/manage/uploads.json +trans.hy = public/language/hy/admin/manage/uploads.json +trans.zh_CN = public/language/zh-CN/admin/manage/uploads.json +trans.ko = public/language/ko/admin/manage/uploads.json +trans.zh_TW = public/language/zh-TW/admin/manage/uploads.json +trans.da = public/language/da/admin/manage/uploads.json +trans.id = public/language/id/admin/manage/uploads.json +trans.it = public/language/it/admin/manage/uploads.json +trans.ja = public/language/ja/admin/manage/uploads.json + +[o:nodebb:p:nodebb:r:admin-manage-users] +file_filter = public/language//admin/manage/users.json +source_file = public/language/en-GB/admin/manage/users.json +source_lang = en_GB +type = KEYVALUEJSON +trans.uk = public/language/uk/admin/manage/users.json +trans.en@pirate = public/language/en-x-pirate/admin/manage/users.json +trans.en_US = public/language/en-US/admin/manage/users.json +trans.fr = public/language/fr/admin/manage/users.json +trans.ko = public/language/ko/admin/manage/users.json +trans.ms = public/language/ms/admin/manage/users.json +trans.nb = public/language/nb/admin/manage/users.json +trans.pt_BR = public/language/pt-BR/admin/manage/users.json +trans.zh_CN = public/language/zh-CN/admin/manage/users.json +trans.zh_TW = public/language/zh-TW/admin/manage/users.json +trans.cs = public/language/cs/admin/manage/users.json +trans.gl = public/language/gl/admin/manage/users.json +trans.rw = public/language/rw/admin/manage/users.json +trans.bg = public/language/bg/admin/manage/users.json +trans.de = public/language/de/admin/manage/users.json +trans.et = public/language/et/admin/manage/users.json +trans.id = public/language/id/admin/manage/users.json +trans.pt_PT = public/language/pt-PT/admin/manage/users.json +trans.ru = public/language/ru/admin/manage/users.json +trans.da = public/language/da/admin/manage/users.json +trans.he = public/language/he/admin/manage/users.json +trans.hu = public/language/hu/admin/manage/users.json +trans.ro = public/language/ro/admin/manage/users.json +trans.bn = public/language/bn/admin/manage/users.json +trans.es = public/language/es/admin/manage/users.json +trans.it = public/language/it/admin/manage/users.json +trans.nl = public/language/nl/admin/manage/users.json +trans.sq_AL = public/language/sq-AL/admin/manage/users.json +trans.tr = public/language/tr/admin/manage/users.json +trans.vi = public/language/vi/admin/manage/users.json +trans.fi = public/language/fi/admin/manage/users.json +trans.sc = public/language/sc/admin/manage/users.json +trans.hy = public/language/hy/admin/manage/users.json +trans.ja = public/language/ja/admin/manage/users.json +trans.lt = public/language/lt/admin/manage/users.json +trans.th = public/language/th/admin/manage/users.json +trans.sl = public/language/sl/admin/manage/users.json +trans.ar = public/language/ar/admin/manage/users.json +trans.el = public/language/el/admin/manage/users.json +trans.fa_IR = public/language/fa-IR/admin/manage/users.json +trans.hr = public/language/hr/admin/manage/users.json +trans.lv = public/language/lv/admin/manage/users.json +trans.pl = public/language/pl/admin/manage/users.json +trans.sk = public/language/sk/admin/manage/users.json +trans.sr = public/language/sr/admin/manage/users.json +trans.sv = public/language/sv/admin/manage/users.json + +[o:nodebb:p:nodebb:r:admin-menu] +file_filter = public/language//admin/menu.json +source_file = public/language/en-GB/admin/menu.json +source_lang = en_GB +type = KEYVALUEJSON +trans.ru = public/language/ru/admin/menu.json +trans.th = public/language/th/admin/menu.json +trans.vi = public/language/vi/admin/menu.json +trans.zh_CN = public/language/zh-CN/admin/menu.json +trans.hr = public/language/hr/admin/menu.json +trans.ko = public/language/ko/admin/menu.json +trans.it = public/language/it/admin/menu.json +trans.lt = public/language/lt/admin/menu.json +trans.pl = public/language/pl/admin/menu.json +trans.sc = public/language/sc/admin/menu.json +trans.sv = public/language/sv/admin/menu.json +trans.en@pirate = public/language/en-x-pirate/admin/menu.json +trans.fr = public/language/fr/admin/menu.json +trans.de = public/language/de/admin/menu.json +trans.ms = public/language/ms/admin/menu.json +trans.sq_AL = public/language/sq-AL/admin/menu.json +trans.bg = public/language/bg/admin/menu.json +trans.da = public/language/da/admin/menu.json +trans.es = public/language/es/admin/menu.json +trans.hy = public/language/hy/admin/menu.json +trans.id = public/language/id/admin/menu.json +trans.ja = public/language/ja/admin/menu.json +trans.ro = public/language/ro/admin/menu.json +trans.rw = public/language/rw/admin/menu.json +trans.ar = public/language/ar/admin/menu.json +trans.en_US = public/language/en-US/admin/menu.json +trans.sl = public/language/sl/admin/menu.json +trans.uk = public/language/uk/admin/menu.json +trans.he = public/language/he/admin/menu.json +trans.hu = public/language/hu/admin/menu.json +trans.sr = public/language/sr/admin/menu.json +trans.cs = public/language/cs/admin/menu.json +trans.fa_IR = public/language/fa-IR/admin/menu.json +trans.sk = public/language/sk/admin/menu.json +trans.tr = public/language/tr/admin/menu.json +trans.fi = public/language/fi/admin/menu.json +trans.nl = public/language/nl/admin/menu.json +trans.pt_BR = public/language/pt-BR/admin/menu.json +trans.zh_TW = public/language/zh-TW/admin/menu.json +trans.el = public/language/el/admin/menu.json +trans.gl = public/language/gl/admin/menu.json +trans.lv = public/language/lv/admin/menu.json +trans.nb = public/language/nb/admin/menu.json +trans.pt_PT = public/language/pt-PT/admin/menu.json +trans.bn = public/language/bn/admin/menu.json +trans.et = public/language/et/admin/menu.json + +[o:nodebb:p:nodebb:r:admin-settings-advanced] +file_filter = public/language//admin/settings/advanced.json +source_file = public/language/en-GB/admin/settings/advanced.json +source_lang = en_GB +type = KEYVALUEJSON +trans.ko = public/language/ko/admin/settings/advanced.json +trans.sc = public/language/sc/admin/settings/advanced.json +trans.ar = public/language/ar/admin/settings/advanced.json +trans.bn = public/language/bn/admin/settings/advanced.json +trans.el = public/language/el/admin/settings/advanced.json +trans.fa_IR = public/language/fa-IR/admin/settings/advanced.json +trans.fr = public/language/fr/admin/settings/advanced.json +trans.hy = public/language/hy/admin/settings/advanced.json +trans.bg = public/language/bg/admin/settings/advanced.json +trans.lv = public/language/lv/admin/settings/advanced.json +trans.pt_BR = public/language/pt-BR/admin/settings/advanced.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/advanced.json +trans.es = public/language/es/admin/settings/advanced.json +trans.id = public/language/id/admin/settings/advanced.json +trans.rw = public/language/rw/admin/settings/advanced.json +trans.sl = public/language/sl/admin/settings/advanced.json +trans.it = public/language/it/admin/settings/advanced.json +trans.nb = public/language/nb/admin/settings/advanced.json +trans.pt_PT = public/language/pt-PT/admin/settings/advanced.json +trans.sq_AL = public/language/sq-AL/admin/settings/advanced.json +trans.sr = public/language/sr/admin/settings/advanced.json +trans.zh_CN = public/language/zh-CN/admin/settings/advanced.json +trans.zh_TW = public/language/zh-TW/admin/settings/advanced.json +trans.cs = public/language/cs/admin/settings/advanced.json +trans.en_US = public/language/en-US/admin/settings/advanced.json +trans.hr = public/language/hr/admin/settings/advanced.json +trans.pl = public/language/pl/admin/settings/advanced.json +trans.ru = public/language/ru/admin/settings/advanced.json +trans.sv = public/language/sv/admin/settings/advanced.json +trans.vi = public/language/vi/admin/settings/advanced.json +trans.de = public/language/de/admin/settings/advanced.json +trans.et = public/language/et/admin/settings/advanced.json +trans.fi = public/language/fi/admin/settings/advanced.json +trans.ro = public/language/ro/admin/settings/advanced.json +trans.sk = public/language/sk/admin/settings/advanced.json +trans.uk = public/language/uk/admin/settings/advanced.json +trans.da = public/language/da/admin/settings/advanced.json +trans.gl = public/language/gl/admin/settings/advanced.json +trans.he = public/language/he/admin/settings/advanced.json +trans.hu = public/language/hu/admin/settings/advanced.json +trans.ja = public/language/ja/admin/settings/advanced.json +trans.tr = public/language/tr/admin/settings/advanced.json +trans.lt = public/language/lt/admin/settings/advanced.json +trans.ms = public/language/ms/admin/settings/advanced.json +trans.nl = public/language/nl/admin/settings/advanced.json +trans.th = public/language/th/admin/settings/advanced.json + +[o:nodebb:p:nodebb:r:admin-settings-api] +file_filter = public/language//admin/settings/api.json +source_file = public/language/en-GB/admin/settings/api.json +source_lang = en_GB +type = KEYVALUEJSON +trans.et = public/language/et/admin/settings/api.json +trans.lv = public/language/lv/admin/settings/api.json +trans.nl = public/language/nl/admin/settings/api.json +trans.rw = public/language/rw/admin/settings/api.json +trans.sl = public/language/sl/admin/settings/api.json +trans.bn = public/language/bn/admin/settings/api.json +trans.de = public/language/de/admin/settings/api.json +trans.el = public/language/el/admin/settings/api.json +trans.en_US = public/language/en-US/admin/settings/api.json +trans.fi = public/language/fi/admin/settings/api.json +trans.he = public/language/he/admin/settings/api.json +trans.hr = public/language/hr/admin/settings/api.json +trans.hy = public/language/hy/admin/settings/api.json +trans.ja = public/language/ja/admin/settings/api.json +trans.ko = public/language/ko/admin/settings/api.json +trans.ms = public/language/ms/admin/settings/api.json +trans.pt_BR = public/language/pt-BR/admin/settings/api.json +trans.zh_CN = public/language/zh-CN/admin/settings/api.json +trans.zh_TW = public/language/zh-TW/admin/settings/api.json +trans.cs = public/language/cs/admin/settings/api.json +trans.it = public/language/it/admin/settings/api.json +trans.nb = public/language/nb/admin/settings/api.json +trans.pt_PT = public/language/pt-PT/admin/settings/api.json +trans.ru = public/language/ru/admin/settings/api.json +trans.uk = public/language/uk/admin/settings/api.json +trans.vi = public/language/vi/admin/settings/api.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/api.json +trans.fr = public/language/fr/admin/settings/api.json +trans.lt = public/language/lt/admin/settings/api.json +trans.sr = public/language/sr/admin/settings/api.json +trans.fa_IR = public/language/fa-IR/admin/settings/api.json +trans.sq_AL = public/language/sq-AL/admin/settings/api.json +trans.th = public/language/th/admin/settings/api.json +trans.da = public/language/da/admin/settings/api.json +trans.gl = public/language/gl/admin/settings/api.json +trans.pl = public/language/pl/admin/settings/api.json +trans.ar = public/language/ar/admin/settings/api.json +trans.es = public/language/es/admin/settings/api.json +trans.hu = public/language/hu/admin/settings/api.json +trans.sc = public/language/sc/admin/settings/api.json +trans.bg = public/language/bg/admin/settings/api.json +trans.id = public/language/id/admin/settings/api.json +trans.ro = public/language/ro/admin/settings/api.json +trans.sk = public/language/sk/admin/settings/api.json +trans.sv = public/language/sv/admin/settings/api.json +trans.tr = public/language/tr/admin/settings/api.json + +[o:nodebb:p:nodebb:r:admin-settings-chat] +file_filter = public/language//admin/settings/chat.json +source_file = public/language/en-GB/admin/settings/chat.json +source_lang = en_GB +type = KEYVALUEJSON +trans.ar = public/language/ar/admin/settings/chat.json +trans.es = public/language/es/admin/settings/chat.json +trans.et = public/language/et/admin/settings/chat.json +trans.ms = public/language/ms/admin/settings/chat.json +trans.sk = public/language/sk/admin/settings/chat.json +trans.sq_AL = public/language/sq-AL/admin/settings/chat.json +trans.da = public/language/da/admin/settings/chat.json +trans.de = public/language/de/admin/settings/chat.json +trans.en_US = public/language/en-US/admin/settings/chat.json +trans.fa_IR = public/language/fa-IR/admin/settings/chat.json +trans.fr = public/language/fr/admin/settings/chat.json +trans.id = public/language/id/admin/settings/chat.json +trans.ro = public/language/ro/admin/settings/chat.json +trans.el = public/language/el/admin/settings/chat.json +trans.hr = public/language/hr/admin/settings/chat.json +trans.ja = public/language/ja/admin/settings/chat.json +trans.ko = public/language/ko/admin/settings/chat.json +trans.nb = public/language/nb/admin/settings/chat.json +trans.nl = public/language/nl/admin/settings/chat.json +trans.uk = public/language/uk/admin/settings/chat.json +trans.he = public/language/he/admin/settings/chat.json +trans.sl = public/language/sl/admin/settings/chat.json +trans.sr = public/language/sr/admin/settings/chat.json +trans.cs = public/language/cs/admin/settings/chat.json +trans.pl = public/language/pl/admin/settings/chat.json +trans.pt_BR = public/language/pt-BR/admin/settings/chat.json +trans.sv = public/language/sv/admin/settings/chat.json +trans.zh_CN = public/language/zh-CN/admin/settings/chat.json +trans.bg = public/language/bg/admin/settings/chat.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/chat.json +trans.hu = public/language/hu/admin/settings/chat.json +trans.ru = public/language/ru/admin/settings/chat.json +trans.rw = public/language/rw/admin/settings/chat.json +trans.tr = public/language/tr/admin/settings/chat.json +trans.bn = public/language/bn/admin/settings/chat.json +trans.hy = public/language/hy/admin/settings/chat.json +trans.lt = public/language/lt/admin/settings/chat.json +trans.lv = public/language/lv/admin/settings/chat.json +trans.th = public/language/th/admin/settings/chat.json +trans.fi = public/language/fi/admin/settings/chat.json +trans.gl = public/language/gl/admin/settings/chat.json +trans.it = public/language/it/admin/settings/chat.json +trans.pt_PT = public/language/pt-PT/admin/settings/chat.json +trans.sc = public/language/sc/admin/settings/chat.json +trans.vi = public/language/vi/admin/settings/chat.json +trans.zh_TW = public/language/zh-TW/admin/settings/chat.json + +[o:nodebb:p:nodebb:r:admin-settings-cookies] +file_filter = public/language//admin/settings/cookies.json +source_file = public/language/en-GB/admin/settings/cookies.json +source_lang = en_GB +type = KEYVALUEJSON +trans.sr = public/language/sr/admin/settings/cookies.json +trans.th = public/language/th/admin/settings/cookies.json +trans.zh_CN = public/language/zh-CN/admin/settings/cookies.json +trans.en_US = public/language/en-US/admin/settings/cookies.json +trans.lt = public/language/lt/admin/settings/cookies.json +trans.pl = public/language/pl/admin/settings/cookies.json +trans.ro = public/language/ro/admin/settings/cookies.json +trans.rw = public/language/rw/admin/settings/cookies.json +trans.sk = public/language/sk/admin/settings/cookies.json +trans.tr = public/language/tr/admin/settings/cookies.json +trans.ar = public/language/ar/admin/settings/cookies.json +trans.da = public/language/da/admin/settings/cookies.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/cookies.json +trans.gl = public/language/gl/admin/settings/cookies.json +trans.hu = public/language/hu/admin/settings/cookies.json +trans.vi = public/language/vi/admin/settings/cookies.json +trans.el = public/language/el/admin/settings/cookies.json +trans.et = public/language/et/admin/settings/cookies.json +trans.lv = public/language/lv/admin/settings/cookies.json +trans.ru = public/language/ru/admin/settings/cookies.json +trans.uk = public/language/uk/admin/settings/cookies.json +trans.ko = public/language/ko/admin/settings/cookies.json +trans.sv = public/language/sv/admin/settings/cookies.json +trans.bn = public/language/bn/admin/settings/cookies.json +trans.de = public/language/de/admin/settings/cookies.json +trans.he = public/language/he/admin/settings/cookies.json +trans.hy = public/language/hy/admin/settings/cookies.json +trans.it = public/language/it/admin/settings/cookies.json +trans.cs = public/language/cs/admin/settings/cookies.json +trans.hr = public/language/hr/admin/settings/cookies.json +trans.ja = public/language/ja/admin/settings/cookies.json +trans.pt_PT = public/language/pt-PT/admin/settings/cookies.json +trans.nb = public/language/nb/admin/settings/cookies.json +trans.sc = public/language/sc/admin/settings/cookies.json +trans.bg = public/language/bg/admin/settings/cookies.json +trans.fi = public/language/fi/admin/settings/cookies.json +trans.fr = public/language/fr/admin/settings/cookies.json +trans.id = public/language/id/admin/settings/cookies.json +trans.ms = public/language/ms/admin/settings/cookies.json +trans.zh_TW = public/language/zh-TW/admin/settings/cookies.json +trans.es = public/language/es/admin/settings/cookies.json +trans.fa_IR = public/language/fa-IR/admin/settings/cookies.json +trans.nl = public/language/nl/admin/settings/cookies.json +trans.sl = public/language/sl/admin/settings/cookies.json +trans.sq_AL = public/language/sq-AL/admin/settings/cookies.json +trans.pt_BR = public/language/pt-BR/admin/settings/cookies.json + +[o:nodebb:p:nodebb:r:admin-settings-email] +file_filter = public/language//admin/settings/email.json +source_file = public/language/en-GB/admin/settings/email.json +source_lang = en_GB +type = KEYVALUEJSON +trans.sv = public/language/sv/admin/settings/email.json +trans.tr = public/language/tr/admin/settings/email.json +trans.uk = public/language/uk/admin/settings/email.json +trans.ar = public/language/ar/admin/settings/email.json +trans.ja = public/language/ja/admin/settings/email.json +trans.pt_PT = public/language/pt-PT/admin/settings/email.json +trans.sr = public/language/sr/admin/settings/email.json +trans.ms = public/language/ms/admin/settings/email.json +trans.nb = public/language/nb/admin/settings/email.json +trans.ru = public/language/ru/admin/settings/email.json +trans.sk = public/language/sk/admin/settings/email.json +trans.fr = public/language/fr/admin/settings/email.json +trans.he = public/language/he/admin/settings/email.json +trans.id = public/language/id/admin/settings/email.json +trans.it = public/language/it/admin/settings/email.json +trans.sl = public/language/sl/admin/settings/email.json +trans.sq_AL = public/language/sq-AL/admin/settings/email.json +trans.hr = public/language/hr/admin/settings/email.json +trans.hu = public/language/hu/admin/settings/email.json +trans.ko = public/language/ko/admin/settings/email.json +trans.zh_TW = public/language/zh-TW/admin/settings/email.json +trans.bn = public/language/bn/admin/settings/email.json +trans.fi = public/language/fi/admin/settings/email.json +trans.pt_BR = public/language/pt-BR/admin/settings/email.json +trans.es = public/language/es/admin/settings/email.json +trans.pl = public/language/pl/admin/settings/email.json +trans.ro = public/language/ro/admin/settings/email.json +trans.rw = public/language/rw/admin/settings/email.json +trans.bg = public/language/bg/admin/settings/email.json +trans.cs = public/language/cs/admin/settings/email.json +trans.el = public/language/el/admin/settings/email.json +trans.en_US = public/language/en-US/admin/settings/email.json +trans.zh_CN = public/language/zh-CN/admin/settings/email.json +trans.fa_IR = public/language/fa-IR/admin/settings/email.json +trans.gl = public/language/gl/admin/settings/email.json +trans.hy = public/language/hy/admin/settings/email.json +trans.lv = public/language/lv/admin/settings/email.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/email.json +trans.et = public/language/et/admin/settings/email.json +trans.lt = public/language/lt/admin/settings/email.json +trans.th = public/language/th/admin/settings/email.json +trans.vi = public/language/vi/admin/settings/email.json +trans.da = public/language/da/admin/settings/email.json +trans.de = public/language/de/admin/settings/email.json +trans.nl = public/language/nl/admin/settings/email.json +trans.sc = public/language/sc/admin/settings/email.json + +[o:nodebb:p:nodebb:r:admin-settings-general] +file_filter = public/language//admin/settings/general.json +source_file = public/language/en-GB/admin/settings/general.json +source_lang = en_GB +type = KEYVALUEJSON +trans.ko = public/language/ko/admin/settings/general.json +trans.ro = public/language/ro/admin/settings/general.json +trans.sc = public/language/sc/admin/settings/general.json +trans.sk = public/language/sk/admin/settings/general.json +trans.sv = public/language/sv/admin/settings/general.json +trans.uk = public/language/uk/admin/settings/general.json +trans.fr = public/language/fr/admin/settings/general.json +trans.gl = public/language/gl/admin/settings/general.json +trans.zh_CN = public/language/zh-CN/admin/settings/general.json +trans.lt = public/language/lt/admin/settings/general.json +trans.rw = public/language/rw/admin/settings/general.json +trans.th = public/language/th/admin/settings/general.json +trans.tr = public/language/tr/admin/settings/general.json +trans.zh_TW = public/language/zh-TW/admin/settings/general.json +trans.de = public/language/de/admin/settings/general.json +trans.ja = public/language/ja/admin/settings/general.json +trans.en_US = public/language/en-US/admin/settings/general.json +trans.et = public/language/et/admin/settings/general.json +trans.fi = public/language/fi/admin/settings/general.json +trans.hy = public/language/hy/admin/settings/general.json +trans.id = public/language/id/admin/settings/general.json +trans.ru = public/language/ru/admin/settings/general.json +trans.cs = public/language/cs/admin/settings/general.json +trans.el = public/language/el/admin/settings/general.json +trans.sl = public/language/sl/admin/settings/general.json +trans.hu = public/language/hu/admin/settings/general.json +trans.it = public/language/it/admin/settings/general.json +trans.nl = public/language/nl/admin/settings/general.json +trans.pl = public/language/pl/admin/settings/general.json +trans.es = public/language/es/admin/settings/general.json +trans.fa_IR = public/language/fa-IR/admin/settings/general.json +trans.ms = public/language/ms/admin/settings/general.json +trans.nb = public/language/nb/admin/settings/general.json +trans.sr = public/language/sr/admin/settings/general.json +trans.da = public/language/da/admin/settings/general.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/general.json +trans.pt_PT = public/language/pt-PT/admin/settings/general.json +trans.he = public/language/he/admin/settings/general.json +trans.lv = public/language/lv/admin/settings/general.json +trans.pt_BR = public/language/pt-BR/admin/settings/general.json +trans.bn = public/language/bn/admin/settings/general.json +trans.hr = public/language/hr/admin/settings/general.json +trans.sq_AL = public/language/sq-AL/admin/settings/general.json +trans.vi = public/language/vi/admin/settings/general.json +trans.ar = public/language/ar/admin/settings/general.json +trans.bg = public/language/bg/admin/settings/general.json + +[o:nodebb:p:nodebb:r:admin-settings-group] +file_filter = public/language//admin/settings/group.json +source_file = public/language/en-GB/admin/settings/group.json +source_lang = en_GB +type = KEYVALUEJSON +trans.sc = public/language/sc/admin/settings/group.json +trans.en_US = public/language/en-US/admin/settings/group.json +trans.et = public/language/et/admin/settings/group.json +trans.fr = public/language/fr/admin/settings/group.json +trans.it = public/language/it/admin/settings/group.json +trans.nb = public/language/nb/admin/settings/group.json +trans.es = public/language/es/admin/settings/group.json +trans.fa_IR = public/language/fa-IR/admin/settings/group.json +trans.gl = public/language/gl/admin/settings/group.json +trans.rw = public/language/rw/admin/settings/group.json +trans.sr = public/language/sr/admin/settings/group.json +trans.sq_AL = public/language/sq-AL/admin/settings/group.json +trans.th = public/language/th/admin/settings/group.json +trans.vi = public/language/vi/admin/settings/group.json +trans.bn = public/language/bn/admin/settings/group.json +trans.fi = public/language/fi/admin/settings/group.json +trans.hy = public/language/hy/admin/settings/group.json +trans.id = public/language/id/admin/settings/group.json +trans.ms = public/language/ms/admin/settings/group.json +trans.de = public/language/de/admin/settings/group.json +trans.he = public/language/he/admin/settings/group.json +trans.lv = public/language/lv/admin/settings/group.json +trans.pt_PT = public/language/pt-PT/admin/settings/group.json +trans.sk = public/language/sk/admin/settings/group.json +trans.tr = public/language/tr/admin/settings/group.json +trans.uk = public/language/uk/admin/settings/group.json +trans.cs = public/language/cs/admin/settings/group.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/group.json +trans.hu = public/language/hu/admin/settings/group.json +trans.nl = public/language/nl/admin/settings/group.json +trans.ru = public/language/ru/admin/settings/group.json +trans.lt = public/language/lt/admin/settings/group.json +trans.ro = public/language/ro/admin/settings/group.json +trans.sl = public/language/sl/admin/settings/group.json +trans.ar = public/language/ar/admin/settings/group.json +trans.bg = public/language/bg/admin/settings/group.json +trans.da = public/language/da/admin/settings/group.json +trans.hr = public/language/hr/admin/settings/group.json +trans.ko = public/language/ko/admin/settings/group.json +trans.el = public/language/el/admin/settings/group.json +trans.sv = public/language/sv/admin/settings/group.json +trans.ja = public/language/ja/admin/settings/group.json +trans.pl = public/language/pl/admin/settings/group.json +trans.pt_BR = public/language/pt-BR/admin/settings/group.json +trans.zh_CN = public/language/zh-CN/admin/settings/group.json +trans.zh_TW = public/language/zh-TW/admin/settings/group.json + +[o:nodebb:p:nodebb:r:admin-settings-guest] +file_filter = public/language//admin/settings/guest.json +source_file = public/language/en-GB/admin/settings/guest.json +source_lang = en_GB +type = KEYVALUEJSON +trans.cs = public/language/cs/admin/settings/guest.json +trans.da = public/language/da/admin/settings/guest.json +trans.en_US = public/language/en-US/admin/settings/guest.json +trans.lt = public/language/lt/admin/settings/guest.json +trans.ms = public/language/ms/admin/settings/guest.json +trans.nl = public/language/nl/admin/settings/guest.json +trans.ru = public/language/ru/admin/settings/guest.json +trans.sc = public/language/sc/admin/settings/guest.json +trans.sr = public/language/sr/admin/settings/guest.json +trans.th = public/language/th/admin/settings/guest.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/guest.json +trans.it = public/language/it/admin/settings/guest.json +trans.lv = public/language/lv/admin/settings/guest.json +trans.pt_BR = public/language/pt-BR/admin/settings/guest.json +trans.sk = public/language/sk/admin/settings/guest.json +trans.de = public/language/de/admin/settings/guest.json +trans.es = public/language/es/admin/settings/guest.json +trans.hr = public/language/hr/admin/settings/guest.json +trans.pt_PT = public/language/pt-PT/admin/settings/guest.json +trans.rw = public/language/rw/admin/settings/guest.json +trans.sq_AL = public/language/sq-AL/admin/settings/guest.json +trans.el = public/language/el/admin/settings/guest.json +trans.tr = public/language/tr/admin/settings/guest.json +trans.zh_CN = public/language/zh-CN/admin/settings/guest.json +trans.bg = public/language/bg/admin/settings/guest.json +trans.fi = public/language/fi/admin/settings/guest.json +trans.hu = public/language/hu/admin/settings/guest.json +trans.ja = public/language/ja/admin/settings/guest.json +trans.nb = public/language/nb/admin/settings/guest.json +trans.pl = public/language/pl/admin/settings/guest.json +trans.sl = public/language/sl/admin/settings/guest.json +trans.vi = public/language/vi/admin/settings/guest.json +trans.bn = public/language/bn/admin/settings/guest.json +trans.fa_IR = public/language/fa-IR/admin/settings/guest.json +trans.fr = public/language/fr/admin/settings/guest.json +trans.hy = public/language/hy/admin/settings/guest.json +trans.ro = public/language/ro/admin/settings/guest.json +trans.et = public/language/et/admin/settings/guest.json +trans.gl = public/language/gl/admin/settings/guest.json +trans.sv = public/language/sv/admin/settings/guest.json +trans.uk = public/language/uk/admin/settings/guest.json +trans.zh_TW = public/language/zh-TW/admin/settings/guest.json +trans.ar = public/language/ar/admin/settings/guest.json +trans.he = public/language/he/admin/settings/guest.json +trans.id = public/language/id/admin/settings/guest.json +trans.ko = public/language/ko/admin/settings/guest.json + +[o:nodebb:p:nodebb:r:admin-settings-homepage] +file_filter = public/language//admin/settings/homepage.json +source_file = public/language/en-GB/admin/settings/homepage.json +source_lang = en_GB +type = KEYVALUEJSON +trans.nb = public/language/nb/admin/settings/homepage.json +trans.tr = public/language/tr/admin/settings/homepage.json +trans.vi = public/language/vi/admin/settings/homepage.json +trans.et = public/language/et/admin/settings/homepage.json +trans.fi = public/language/fi/admin/settings/homepage.json +trans.hy = public/language/hy/admin/settings/homepage.json +trans.ru = public/language/ru/admin/settings/homepage.json +trans.sr = public/language/sr/admin/settings/homepage.json +trans.es = public/language/es/admin/settings/homepage.json +trans.id = public/language/id/admin/settings/homepage.json +trans.lt = public/language/lt/admin/settings/homepage.json +trans.sk = public/language/sk/admin/settings/homepage.json +trans.sq_AL = public/language/sq-AL/admin/settings/homepage.json +trans.th = public/language/th/admin/settings/homepage.json +trans.en_US = public/language/en-US/admin/settings/homepage.json +trans.lv = public/language/lv/admin/settings/homepage.json +trans.pt_PT = public/language/pt-PT/admin/settings/homepage.json +trans.sc = public/language/sc/admin/settings/homepage.json +trans.fa_IR = public/language/fa-IR/admin/settings/homepage.json +trans.he = public/language/he/admin/settings/homepage.json +trans.ms = public/language/ms/admin/settings/homepage.json +trans.cs = public/language/cs/admin/settings/homepage.json +trans.el = public/language/el/admin/settings/homepage.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/homepage.json +trans.gl = public/language/gl/admin/settings/homepage.json +trans.ko = public/language/ko/admin/settings/homepage.json +trans.ar = public/language/ar/admin/settings/homepage.json +trans.bg = public/language/bg/admin/settings/homepage.json +trans.bn = public/language/bn/admin/settings/homepage.json +trans.rw = public/language/rw/admin/settings/homepage.json +trans.zh_CN = public/language/zh-CN/admin/settings/homepage.json +trans.hr = public/language/hr/admin/settings/homepage.json +trans.it = public/language/it/admin/settings/homepage.json +trans.ja = public/language/ja/admin/settings/homepage.json +trans.nl = public/language/nl/admin/settings/homepage.json +trans.ro = public/language/ro/admin/settings/homepage.json +trans.da = public/language/da/admin/settings/homepage.json +trans.de = public/language/de/admin/settings/homepage.json +trans.fr = public/language/fr/admin/settings/homepage.json +trans.sv = public/language/sv/admin/settings/homepage.json +trans.hu = public/language/hu/admin/settings/homepage.json +trans.pt_BR = public/language/pt-BR/admin/settings/homepage.json +trans.sl = public/language/sl/admin/settings/homepage.json +trans.pl = public/language/pl/admin/settings/homepage.json +trans.uk = public/language/uk/admin/settings/homepage.json +trans.zh_TW = public/language/zh-TW/admin/settings/homepage.json + +[o:nodebb:p:nodebb:r:admin-settings-languages] +file_filter = public/language//admin/settings/languages.json +source_file = public/language/en-GB/admin/settings/languages.json +source_lang = en_GB +type = KEYVALUEJSON +trans.en@pirate = public/language/en-x-pirate/admin/settings/languages.json +trans.fa_IR = public/language/fa-IR/admin/settings/languages.json +trans.gl = public/language/gl/admin/settings/languages.json +trans.ro = public/language/ro/admin/settings/languages.json +trans.th = public/language/th/admin/settings/languages.json +trans.hr = public/language/hr/admin/settings/languages.json +trans.hy = public/language/hy/admin/settings/languages.json +trans.sc = public/language/sc/admin/settings/languages.json +trans.vi = public/language/vi/admin/settings/languages.json +trans.tr = public/language/tr/admin/settings/languages.json +trans.cs = public/language/cs/admin/settings/languages.json +trans.et = public/language/et/admin/settings/languages.json +trans.lv = public/language/lv/admin/settings/languages.json +trans.pl = public/language/pl/admin/settings/languages.json +trans.sr = public/language/sr/admin/settings/languages.json +trans.sv = public/language/sv/admin/settings/languages.json +trans.hu = public/language/hu/admin/settings/languages.json +trans.it = public/language/it/admin/settings/languages.json +trans.ja = public/language/ja/admin/settings/languages.json +trans.sl = public/language/sl/admin/settings/languages.json +trans.zh_TW = public/language/zh-TW/admin/settings/languages.json +trans.da = public/language/da/admin/settings/languages.json +trans.fr = public/language/fr/admin/settings/languages.json +trans.he = public/language/he/admin/settings/languages.json +trans.id = public/language/id/admin/settings/languages.json +trans.sq_AL = public/language/sq-AL/admin/settings/languages.json +trans.uk = public/language/uk/admin/settings/languages.json +trans.bn = public/language/bn/admin/settings/languages.json +trans.fi = public/language/fi/admin/settings/languages.json +trans.ko = public/language/ko/admin/settings/languages.json +trans.pt_BR = public/language/pt-BR/admin/settings/languages.json +trans.sk = public/language/sk/admin/settings/languages.json +trans.pt_PT = public/language/pt-PT/admin/settings/languages.json +trans.ru = public/language/ru/admin/settings/languages.json +trans.ar = public/language/ar/admin/settings/languages.json +trans.bg = public/language/bg/admin/settings/languages.json +trans.de = public/language/de/admin/settings/languages.json +trans.el = public/language/el/admin/settings/languages.json +trans.lt = public/language/lt/admin/settings/languages.json +trans.nl = public/language/nl/admin/settings/languages.json +trans.zh_CN = public/language/zh-CN/admin/settings/languages.json +trans.en_US = public/language/en-US/admin/settings/languages.json +trans.es = public/language/es/admin/settings/languages.json +trans.ms = public/language/ms/admin/settings/languages.json +trans.nb = public/language/nb/admin/settings/languages.json +trans.rw = public/language/rw/admin/settings/languages.json + +[o:nodebb:p:nodebb:r:admin-settings-navigation] +file_filter = public/language//admin/settings/navigation.json +source_file = public/language/en-GB/admin/settings/navigation.json +source_lang = en_GB +type = KEYVALUEJSON +trans.uk = public/language/uk/admin/settings/navigation.json +trans.bn = public/language/bn/admin/settings/navigation.json +trans.es = public/language/es/admin/settings/navigation.json +trans.fa_IR = public/language/fa-IR/admin/settings/navigation.json +trans.nl = public/language/nl/admin/settings/navigation.json +trans.pt_BR = public/language/pt-BR/admin/settings/navigation.json +trans.rw = public/language/rw/admin/settings/navigation.json +trans.zh_CN = public/language/zh-CN/admin/settings/navigation.json +trans.da = public/language/da/admin/settings/navigation.json +trans.it = public/language/it/admin/settings/navigation.json +trans.ms = public/language/ms/admin/settings/navigation.json +trans.pt_PT = public/language/pt-PT/admin/settings/navigation.json +trans.vi = public/language/vi/admin/settings/navigation.json +trans.en_US = public/language/en-US/admin/settings/navigation.json +trans.fr = public/language/fr/admin/settings/navigation.json +trans.hu = public/language/hu/admin/settings/navigation.json +trans.hy = public/language/hy/admin/settings/navigation.json +trans.ja = public/language/ja/admin/settings/navigation.json +trans.lt = public/language/lt/admin/settings/navigation.json +trans.ru = public/language/ru/admin/settings/navigation.json +trans.sk = public/language/sk/admin/settings/navigation.json +trans.sr = public/language/sr/admin/settings/navigation.json +trans.de = public/language/de/admin/settings/navigation.json +trans.et = public/language/et/admin/settings/navigation.json +trans.fi = public/language/fi/admin/settings/navigation.json +trans.gl = public/language/gl/admin/settings/navigation.json +trans.sc = public/language/sc/admin/settings/navigation.json +trans.sl = public/language/sl/admin/settings/navigation.json +trans.th = public/language/th/admin/settings/navigation.json +trans.bg = public/language/bg/admin/settings/navigation.json +trans.cs = public/language/cs/admin/settings/navigation.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/navigation.json +trans.ro = public/language/ro/admin/settings/navigation.json +trans.sq_AL = public/language/sq-AL/admin/settings/navigation.json +trans.tr = public/language/tr/admin/settings/navigation.json +trans.zh_TW = public/language/zh-TW/admin/settings/navigation.json +trans.ar = public/language/ar/admin/settings/navigation.json +trans.hr = public/language/hr/admin/settings/navigation.json +trans.id = public/language/id/admin/settings/navigation.json +trans.ko = public/language/ko/admin/settings/navigation.json +trans.nb = public/language/nb/admin/settings/navigation.json +trans.pl = public/language/pl/admin/settings/navigation.json +trans.sv = public/language/sv/admin/settings/navigation.json +trans.el = public/language/el/admin/settings/navigation.json +trans.he = public/language/he/admin/settings/navigation.json +trans.lv = public/language/lv/admin/settings/navigation.json + +[o:nodebb:p:nodebb:r:admin-settings-notifications] +file_filter = public/language//admin/settings/notifications.json +source_file = public/language/en-GB/admin/settings/notifications.json +source_lang = en_GB +type = KEYVALUEJSON +trans.zh_TW = public/language/zh-TW/admin/settings/notifications.json +trans.fi = public/language/fi/admin/settings/notifications.json +trans.id = public/language/id/admin/settings/notifications.json +trans.pt_PT = public/language/pt-PT/admin/settings/notifications.json +trans.rw = public/language/rw/admin/settings/notifications.json +trans.ar = public/language/ar/admin/settings/notifications.json +trans.bn = public/language/bn/admin/settings/notifications.json +trans.el = public/language/el/admin/settings/notifications.json +trans.en_US = public/language/en-US/admin/settings/notifications.json +trans.sk = public/language/sk/admin/settings/notifications.json +trans.sr = public/language/sr/admin/settings/notifications.json +trans.sv = public/language/sv/admin/settings/notifications.json +trans.th = public/language/th/admin/settings/notifications.json +trans.cs = public/language/cs/admin/settings/notifications.json +trans.it = public/language/it/admin/settings/notifications.json +trans.ru = public/language/ru/admin/settings/notifications.json +trans.sq_AL = public/language/sq-AL/admin/settings/notifications.json +trans.vi = public/language/vi/admin/settings/notifications.json +trans.fr = public/language/fr/admin/settings/notifications.json +trans.hy = public/language/hy/admin/settings/notifications.json +trans.sl = public/language/sl/admin/settings/notifications.json +trans.uk = public/language/uk/admin/settings/notifications.json +trans.ms = public/language/ms/admin/settings/notifications.json +trans.nl = public/language/nl/admin/settings/notifications.json +trans.ro = public/language/ro/admin/settings/notifications.json +trans.sc = public/language/sc/admin/settings/notifications.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/notifications.json +trans.gl = public/language/gl/admin/settings/notifications.json +trans.he = public/language/he/admin/settings/notifications.json +trans.hu = public/language/hu/admin/settings/notifications.json +trans.tr = public/language/tr/admin/settings/notifications.json +trans.zh_CN = public/language/zh-CN/admin/settings/notifications.json +trans.ko = public/language/ko/admin/settings/notifications.json +trans.lv = public/language/lv/admin/settings/notifications.json +trans.nb = public/language/nb/admin/settings/notifications.json +trans.pl = public/language/pl/admin/settings/notifications.json +trans.bg = public/language/bg/admin/settings/notifications.json +trans.da = public/language/da/admin/settings/notifications.json +trans.de = public/language/de/admin/settings/notifications.json +trans.hr = public/language/hr/admin/settings/notifications.json +trans.pt_BR = public/language/pt-BR/admin/settings/notifications.json +trans.et = public/language/et/admin/settings/notifications.json +trans.lt = public/language/lt/admin/settings/notifications.json +trans.es = public/language/es/admin/settings/notifications.json +trans.fa_IR = public/language/fa-IR/admin/settings/notifications.json +trans.ja = public/language/ja/admin/settings/notifications.json + +[o:nodebb:p:nodebb:r:admin-settings-pagination] +file_filter = public/language//admin/settings/pagination.json +source_file = public/language/en-GB/admin/settings/pagination.json +source_lang = en_GB +type = KEYVALUEJSON +trans.sq_AL = public/language/sq-AL/admin/settings/pagination.json +trans.th = public/language/th/admin/settings/pagination.json +trans.de = public/language/de/admin/settings/pagination.json +trans.ru = public/language/ru/admin/settings/pagination.json +trans.rw = public/language/rw/admin/settings/pagination.json +trans.sc = public/language/sc/admin/settings/pagination.json +trans.sk = public/language/sk/admin/settings/pagination.json +trans.lv = public/language/lv/admin/settings/pagination.json +trans.ar = public/language/ar/admin/settings/pagination.json +trans.el = public/language/el/admin/settings/pagination.json +trans.en_US = public/language/en-US/admin/settings/pagination.json +trans.et = public/language/et/admin/settings/pagination.json +trans.fr = public/language/fr/admin/settings/pagination.json +trans.bg = public/language/bg/admin/settings/pagination.json +trans.fi = public/language/fi/admin/settings/pagination.json +trans.ja = public/language/ja/admin/settings/pagination.json +trans.ms = public/language/ms/admin/settings/pagination.json +trans.uk = public/language/uk/admin/settings/pagination.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/pagination.json +trans.hu = public/language/hu/admin/settings/pagination.json +trans.ko = public/language/ko/admin/settings/pagination.json +trans.lt = public/language/lt/admin/settings/pagination.json +trans.nl = public/language/nl/admin/settings/pagination.json +trans.hr = public/language/hr/admin/settings/pagination.json +trans.pl = public/language/pl/admin/settings/pagination.json +trans.pt_BR = public/language/pt-BR/admin/settings/pagination.json +trans.cs = public/language/cs/admin/settings/pagination.json +trans.da = public/language/da/admin/settings/pagination.json +trans.es = public/language/es/admin/settings/pagination.json +trans.gl = public/language/gl/admin/settings/pagination.json +trans.he = public/language/he/admin/settings/pagination.json +trans.pt_PT = public/language/pt-PT/admin/settings/pagination.json +trans.ro = public/language/ro/admin/settings/pagination.json +trans.id = public/language/id/admin/settings/pagination.json +trans.tr = public/language/tr/admin/settings/pagination.json +trans.vi = public/language/vi/admin/settings/pagination.json +trans.fa_IR = public/language/fa-IR/admin/settings/pagination.json +trans.it = public/language/it/admin/settings/pagination.json +trans.sl = public/language/sl/admin/settings/pagination.json +trans.zh_CN = public/language/zh-CN/admin/settings/pagination.json +trans.zh_TW = public/language/zh-TW/admin/settings/pagination.json +trans.bn = public/language/bn/admin/settings/pagination.json +trans.hy = public/language/hy/admin/settings/pagination.json +trans.nb = public/language/nb/admin/settings/pagination.json +trans.sr = public/language/sr/admin/settings/pagination.json +trans.sv = public/language/sv/admin/settings/pagination.json + +[o:nodebb:p:nodebb:r:admin-settings-post] +file_filter = public/language//admin/settings/post.json +source_file = public/language/en-GB/admin/settings/post.json +source_lang = en_GB +type = KEYVALUEJSON +trans.id = public/language/id/admin/settings/post.json +trans.bn = public/language/bn/admin/settings/post.json +trans.da = public/language/da/admin/settings/post.json +trans.de = public/language/de/admin/settings/post.json +trans.en_US = public/language/en-US/admin/settings/post.json +trans.ms = public/language/ms/admin/settings/post.json +trans.ro = public/language/ro/admin/settings/post.json +trans.zh_TW = public/language/zh-TW/admin/settings/post.json +trans.cs = public/language/cs/admin/settings/post.json +trans.he = public/language/he/admin/settings/post.json +trans.ja = public/language/ja/admin/settings/post.json +trans.ko = public/language/ko/admin/settings/post.json +trans.hr = public/language/hr/admin/settings/post.json +trans.sq_AL = public/language/sq-AL/admin/settings/post.json +trans.lv = public/language/lv/admin/settings/post.json +trans.nl = public/language/nl/admin/settings/post.json +trans.pt_PT = public/language/pt-PT/admin/settings/post.json +trans.sr = public/language/sr/admin/settings/post.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/post.json +trans.et = public/language/et/admin/settings/post.json +trans.hu = public/language/hu/admin/settings/post.json +trans.it = public/language/it/admin/settings/post.json +trans.th = public/language/th/admin/settings/post.json +trans.gl = public/language/gl/admin/settings/post.json +trans.nb = public/language/nb/admin/settings/post.json +trans.sc = public/language/sc/admin/settings/post.json +trans.zh_CN = public/language/zh-CN/admin/settings/post.json +trans.rw = public/language/rw/admin/settings/post.json +trans.sv = public/language/sv/admin/settings/post.json +trans.vi = public/language/vi/admin/settings/post.json +trans.ar = public/language/ar/admin/settings/post.json +trans.el = public/language/el/admin/settings/post.json +trans.fa_IR = public/language/fa-IR/admin/settings/post.json +trans.fi = public/language/fi/admin/settings/post.json +trans.ru = public/language/ru/admin/settings/post.json +trans.bg = public/language/bg/admin/settings/post.json +trans.es = public/language/es/admin/settings/post.json +trans.hy = public/language/hy/admin/settings/post.json +trans.pt_BR = public/language/pt-BR/admin/settings/post.json +trans.sl = public/language/sl/admin/settings/post.json +trans.tr = public/language/tr/admin/settings/post.json +trans.uk = public/language/uk/admin/settings/post.json +trans.fr = public/language/fr/admin/settings/post.json +trans.lt = public/language/lt/admin/settings/post.json +trans.pl = public/language/pl/admin/settings/post.json +trans.sk = public/language/sk/admin/settings/post.json + +[o:nodebb:p:nodebb:r:admin-settings-reputation] +file_filter = public/language//admin/settings/reputation.json +source_file = public/language/en-GB/admin/settings/reputation.json +source_lang = en_GB +type = KEYVALUEJSON +trans.fi = public/language/fi/admin/settings/reputation.json +trans.ja = public/language/ja/admin/settings/reputation.json +trans.lt = public/language/lt/admin/settings/reputation.json +trans.pl = public/language/pl/admin/settings/reputation.json +trans.ro = public/language/ro/admin/settings/reputation.json +trans.bg = public/language/bg/admin/settings/reputation.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/reputation.json +trans.fa_IR = public/language/fa-IR/admin/settings/reputation.json +trans.sl = public/language/sl/admin/settings/reputation.json +trans.sv = public/language/sv/admin/settings/reputation.json +trans.uk = public/language/uk/admin/settings/reputation.json +trans.sr = public/language/sr/admin/settings/reputation.json +trans.zh_CN = public/language/zh-CN/admin/settings/reputation.json +trans.ar = public/language/ar/admin/settings/reputation.json +trans.el = public/language/el/admin/settings/reputation.json +trans.es = public/language/es/admin/settings/reputation.json +trans.sc = public/language/sc/admin/settings/reputation.json +trans.hr = public/language/hr/admin/settings/reputation.json +trans.ko = public/language/ko/admin/settings/reputation.json +trans.nb = public/language/nb/admin/settings/reputation.json +trans.bn = public/language/bn/admin/settings/reputation.json +trans.de = public/language/de/admin/settings/reputation.json +trans.et = public/language/et/admin/settings/reputation.json +trans.rw = public/language/rw/admin/settings/reputation.json +trans.th = public/language/th/admin/settings/reputation.json +trans.zh_TW = public/language/zh-TW/admin/settings/reputation.json +trans.fr = public/language/fr/admin/settings/reputation.json +trans.it = public/language/it/admin/settings/reputation.json +trans.ru = public/language/ru/admin/settings/reputation.json +trans.pt_PT = public/language/pt-PT/admin/settings/reputation.json +trans.sk = public/language/sk/admin/settings/reputation.json +trans.id = public/language/id/admin/settings/reputation.json +trans.ms = public/language/ms/admin/settings/reputation.json +trans.nl = public/language/nl/admin/settings/reputation.json +trans.he = public/language/he/admin/settings/reputation.json +trans.sq_AL = public/language/sq-AL/admin/settings/reputation.json +trans.tr = public/language/tr/admin/settings/reputation.json +trans.cs = public/language/cs/admin/settings/reputation.json +trans.da = public/language/da/admin/settings/reputation.json +trans.en_US = public/language/en-US/admin/settings/reputation.json +trans.lv = public/language/lv/admin/settings/reputation.json +trans.pt_BR = public/language/pt-BR/admin/settings/reputation.json +trans.vi = public/language/vi/admin/settings/reputation.json +trans.gl = public/language/gl/admin/settings/reputation.json +trans.hu = public/language/hu/admin/settings/reputation.json +trans.hy = public/language/hy/admin/settings/reputation.json + +[o:nodebb:p:nodebb:r:admin-settings-social] +file_filter = public/language//admin/settings/social.json +source_file = public/language/en-GB/admin/settings/social.json +source_lang = en_GB +type = KEYVALUEJSON +trans.nl = public/language/nl/admin/settings/social.json +trans.sc = public/language/sc/admin/settings/social.json +trans.sv = public/language/sv/admin/settings/social.json +trans.rw = public/language/rw/admin/settings/social.json +trans.bn = public/language/bn/admin/settings/social.json +trans.hr = public/language/hr/admin/settings/social.json +trans.id = public/language/id/admin/settings/social.json +trans.pt_PT = public/language/pt-PT/admin/settings/social.json +trans.de = public/language/de/admin/settings/social.json +trans.hu = public/language/hu/admin/settings/social.json +trans.pt_BR = public/language/pt-BR/admin/settings/social.json +trans.ja = public/language/ja/admin/settings/social.json +trans.sq_AL = public/language/sq-AL/admin/settings/social.json +trans.zh_TW = public/language/zh-TW/admin/settings/social.json +trans.cs = public/language/cs/admin/settings/social.json +trans.en_US = public/language/en-US/admin/settings/social.json +trans.fi = public/language/fi/admin/settings/social.json +trans.nb = public/language/nb/admin/settings/social.json +trans.pl = public/language/pl/admin/settings/social.json +trans.th = public/language/th/admin/settings/social.json +trans.bg = public/language/bg/admin/settings/social.json +trans.lt = public/language/lt/admin/settings/social.json +trans.lv = public/language/lv/admin/settings/social.json +trans.ko = public/language/ko/admin/settings/social.json +trans.es = public/language/es/admin/settings/social.json +trans.fr = public/language/fr/admin/settings/social.json +trans.he = public/language/he/admin/settings/social.json +trans.fa_IR = public/language/fa-IR/admin/settings/social.json +trans.hy = public/language/hy/admin/settings/social.json +trans.ms = public/language/ms/admin/settings/social.json +trans.ru = public/language/ru/admin/settings/social.json +trans.sk = public/language/sk/admin/settings/social.json +trans.ar = public/language/ar/admin/settings/social.json +trans.el = public/language/el/admin/settings/social.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/social.json +trans.uk = public/language/uk/admin/settings/social.json +trans.sl = public/language/sl/admin/settings/social.json +trans.sr = public/language/sr/admin/settings/social.json +trans.tr = public/language/tr/admin/settings/social.json +trans.it = public/language/it/admin/settings/social.json +trans.ro = public/language/ro/admin/settings/social.json +trans.vi = public/language/vi/admin/settings/social.json +trans.zh_CN = public/language/zh-CN/admin/settings/social.json +trans.da = public/language/da/admin/settings/social.json +trans.et = public/language/et/admin/settings/social.json +trans.gl = public/language/gl/admin/settings/social.json + +[o:nodebb:p:nodebb:r:admin-settings-sockets] +file_filter = public/language//admin/settings/sockets.json +source_file = public/language/en-GB/admin/settings/sockets.json +source_lang = en_GB +type = KEYVALUEJSON +trans.uk = public/language/uk/admin/settings/sockets.json +trans.en_US = public/language/en-US/admin/settings/sockets.json +trans.gl = public/language/gl/admin/settings/sockets.json +trans.ja = public/language/ja/admin/settings/sockets.json +trans.pt_BR = public/language/pt-BR/admin/settings/sockets.json +trans.sc = public/language/sc/admin/settings/sockets.json +trans.tr = public/language/tr/admin/settings/sockets.json +trans.da = public/language/da/admin/settings/sockets.json +trans.lv = public/language/lv/admin/settings/sockets.json +trans.sk = public/language/sk/admin/settings/sockets.json +trans.sr = public/language/sr/admin/settings/sockets.json +trans.vi = public/language/vi/admin/settings/sockets.json +trans.ar = public/language/ar/admin/settings/sockets.json +trans.cs = public/language/cs/admin/settings/sockets.json +trans.de = public/language/de/admin/settings/sockets.json +trans.hy = public/language/hy/admin/settings/sockets.json +trans.id = public/language/id/admin/settings/sockets.json +trans.rw = public/language/rw/admin/settings/sockets.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/sockets.json +trans.fi = public/language/fi/admin/settings/sockets.json +trans.it = public/language/it/admin/settings/sockets.json +trans.ro = public/language/ro/admin/settings/sockets.json +trans.nb = public/language/nb/admin/settings/sockets.json +trans.sq_AL = public/language/sq-AL/admin/settings/sockets.json +trans.bg = public/language/bg/admin/settings/sockets.json +trans.bn = public/language/bn/admin/settings/sockets.json +trans.es = public/language/es/admin/settings/sockets.json +trans.fr = public/language/fr/admin/settings/sockets.json +trans.hr = public/language/hr/admin/settings/sockets.json +trans.ko = public/language/ko/admin/settings/sockets.json +trans.zh_TW = public/language/zh-TW/admin/settings/sockets.json +trans.el = public/language/el/admin/settings/sockets.json +trans.he = public/language/he/admin/settings/sockets.json +trans.ms = public/language/ms/admin/settings/sockets.json +trans.sv = public/language/sv/admin/settings/sockets.json +trans.et = public/language/et/admin/settings/sockets.json +trans.pl = public/language/pl/admin/settings/sockets.json +trans.ru = public/language/ru/admin/settings/sockets.json +trans.zh_CN = public/language/zh-CN/admin/settings/sockets.json +trans.th = public/language/th/admin/settings/sockets.json +trans.fa_IR = public/language/fa-IR/admin/settings/sockets.json +trans.hu = public/language/hu/admin/settings/sockets.json +trans.lt = public/language/lt/admin/settings/sockets.json +trans.nl = public/language/nl/admin/settings/sockets.json +trans.pt_PT = public/language/pt-PT/admin/settings/sockets.json +trans.sl = public/language/sl/admin/settings/sockets.json + +[o:nodebb:p:nodebb:r:admin-settings-sounds] +file_filter = public/language//admin/settings/sounds.json +source_file = public/language/en-GB/admin/settings/sounds.json +source_lang = en_GB +type = KEYVALUEJSON +trans.sv = public/language/sv/admin/settings/sounds.json +trans.de = public/language/de/admin/settings/sounds.json +trans.el = public/language/el/admin/settings/sounds.json +trans.es = public/language/es/admin/settings/sounds.json +trans.he = public/language/he/admin/settings/sounds.json +trans.it = public/language/it/admin/settings/sounds.json +trans.pt_BR = public/language/pt-BR/admin/settings/sounds.json +trans.sq_AL = public/language/sq-AL/admin/settings/sounds.json +trans.vi = public/language/vi/admin/settings/sounds.json +trans.hr = public/language/hr/admin/settings/sounds.json +trans.hu = public/language/hu/admin/settings/sounds.json +trans.bg = public/language/bg/admin/settings/sounds.json +trans.ja = public/language/ja/admin/settings/sounds.json +trans.lt = public/language/lt/admin/settings/sounds.json +trans.nl = public/language/nl/admin/settings/sounds.json +trans.ru = public/language/ru/admin/settings/sounds.json +trans.cs = public/language/cs/admin/settings/sounds.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/sounds.json +trans.fa_IR = public/language/fa-IR/admin/settings/sounds.json +trans.fi = public/language/fi/admin/settings/sounds.json +trans.nb = public/language/nb/admin/settings/sounds.json +trans.th = public/language/th/admin/settings/sounds.json +trans.ar = public/language/ar/admin/settings/sounds.json +trans.da = public/language/da/admin/settings/sounds.json +trans.gl = public/language/gl/admin/settings/sounds.json +trans.lv = public/language/lv/admin/settings/sounds.json +trans.ms = public/language/ms/admin/settings/sounds.json +trans.sc = public/language/sc/admin/settings/sounds.json +trans.sr = public/language/sr/admin/settings/sounds.json +trans.bn = public/language/bn/admin/settings/sounds.json +trans.en_US = public/language/en-US/admin/settings/sounds.json +trans.hy = public/language/hy/admin/settings/sounds.json +trans.sk = public/language/sk/admin/settings/sounds.json +trans.sl = public/language/sl/admin/settings/sounds.json +trans.uk = public/language/uk/admin/settings/sounds.json +trans.zh_CN = public/language/zh-CN/admin/settings/sounds.json +trans.et = public/language/et/admin/settings/sounds.json +trans.fr = public/language/fr/admin/settings/sounds.json +trans.ko = public/language/ko/admin/settings/sounds.json +trans.ro = public/language/ro/admin/settings/sounds.json +trans.zh_TW = public/language/zh-TW/admin/settings/sounds.json +trans.id = public/language/id/admin/settings/sounds.json +trans.pl = public/language/pl/admin/settings/sounds.json +trans.pt_PT = public/language/pt-PT/admin/settings/sounds.json +trans.rw = public/language/rw/admin/settings/sounds.json +trans.tr = public/language/tr/admin/settings/sounds.json + +[o:nodebb:p:nodebb:r:admin-settings-tags] +file_filter = public/language//admin/settings/tags.json +source_file = public/language/en-GB/admin/settings/tags.json +source_lang = en_GB +type = KEYVALUEJSON +trans.bg = public/language/bg/admin/settings/tags.json +trans.cs = public/language/cs/admin/settings/tags.json +trans.de = public/language/de/admin/settings/tags.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/tags.json +trans.lv = public/language/lv/admin/settings/tags.json +trans.th = public/language/th/admin/settings/tags.json +trans.zh_TW = public/language/zh-TW/admin/settings/tags.json +trans.hu = public/language/hu/admin/settings/tags.json +trans.it = public/language/it/admin/settings/tags.json +trans.pt_BR = public/language/pt-BR/admin/settings/tags.json +trans.rw = public/language/rw/admin/settings/tags.json +trans.sk = public/language/sk/admin/settings/tags.json +trans.sv = public/language/sv/admin/settings/tags.json +trans.ar = public/language/ar/admin/settings/tags.json +trans.gl = public/language/gl/admin/settings/tags.json +trans.ja = public/language/ja/admin/settings/tags.json +trans.lt = public/language/lt/admin/settings/tags.json +trans.sc = public/language/sc/admin/settings/tags.json +trans.zh_CN = public/language/zh-CN/admin/settings/tags.json +trans.ro = public/language/ro/admin/settings/tags.json +trans.bn = public/language/bn/admin/settings/tags.json +trans.hr = public/language/hr/admin/settings/tags.json +trans.ko = public/language/ko/admin/settings/tags.json +trans.nb = public/language/nb/admin/settings/tags.json +trans.el = public/language/el/admin/settings/tags.json +trans.et = public/language/et/admin/settings/tags.json +trans.he = public/language/he/admin/settings/tags.json +trans.ms = public/language/ms/admin/settings/tags.json +trans.nl = public/language/nl/admin/settings/tags.json +trans.sl = public/language/sl/admin/settings/tags.json +trans.tr = public/language/tr/admin/settings/tags.json +trans.es = public/language/es/admin/settings/tags.json +trans.fr = public/language/fr/admin/settings/tags.json +trans.hy = public/language/hy/admin/settings/tags.json +trans.pl = public/language/pl/admin/settings/tags.json +trans.ru = public/language/ru/admin/settings/tags.json +trans.sq_AL = public/language/sq-AL/admin/settings/tags.json +trans.sr = public/language/sr/admin/settings/tags.json +trans.uk = public/language/uk/admin/settings/tags.json +trans.da = public/language/da/admin/settings/tags.json +trans.en_US = public/language/en-US/admin/settings/tags.json +trans.fa_IR = public/language/fa-IR/admin/settings/tags.json +trans.fi = public/language/fi/admin/settings/tags.json +trans.id = public/language/id/admin/settings/tags.json +trans.pt_PT = public/language/pt-PT/admin/settings/tags.json +trans.vi = public/language/vi/admin/settings/tags.json + +[o:nodebb:p:nodebb:r:admin-settings-uploads] +file_filter = public/language//admin/settings/uploads.json +source_file = public/language/en-GB/admin/settings/uploads.json +source_lang = en_GB +type = KEYVALUEJSON +trans.ar = public/language/ar/admin/settings/uploads.json +trans.it = public/language/it/admin/settings/uploads.json +trans.ko = public/language/ko/admin/settings/uploads.json +trans.sk = public/language/sk/admin/settings/uploads.json +trans.sq_AL = public/language/sq-AL/admin/settings/uploads.json +trans.fa_IR = public/language/fa-IR/admin/settings/uploads.json +trans.he = public/language/he/admin/settings/uploads.json +trans.ja = public/language/ja/admin/settings/uploads.json +trans.nb = public/language/nb/admin/settings/uploads.json +trans.nl = public/language/nl/admin/settings/uploads.json +trans.zh_TW = public/language/zh-TW/admin/settings/uploads.json +trans.ro = public/language/ro/admin/settings/uploads.json +trans.sl = public/language/sl/admin/settings/uploads.json +trans.da = public/language/da/admin/settings/uploads.json +trans.es = public/language/es/admin/settings/uploads.json +trans.et = public/language/et/admin/settings/uploads.json +trans.hr = public/language/hr/admin/settings/uploads.json +trans.id = public/language/id/admin/settings/uploads.json +trans.pt_BR = public/language/pt-BR/admin/settings/uploads.json +trans.uk = public/language/uk/admin/settings/uploads.json +trans.vi = public/language/vi/admin/settings/uploads.json +trans.th = public/language/th/admin/settings/uploads.json +trans.bg = public/language/bg/admin/settings/uploads.json +trans.el = public/language/el/admin/settings/uploads.json +trans.hu = public/language/hu/admin/settings/uploads.json +trans.lv = public/language/lv/admin/settings/uploads.json +trans.ms = public/language/ms/admin/settings/uploads.json +trans.pt_PT = public/language/pt-PT/admin/settings/uploads.json +trans.lt = public/language/lt/admin/settings/uploads.json +trans.bn = public/language/bn/admin/settings/uploads.json +trans.cs = public/language/cs/admin/settings/uploads.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/uploads.json +trans.fi = public/language/fi/admin/settings/uploads.json +trans.fr = public/language/fr/admin/settings/uploads.json +trans.hy = public/language/hy/admin/settings/uploads.json +trans.gl = public/language/gl/admin/settings/uploads.json +trans.ru = public/language/ru/admin/settings/uploads.json +trans.sr = public/language/sr/admin/settings/uploads.json +trans.sv = public/language/sv/admin/settings/uploads.json +trans.zh_CN = public/language/zh-CN/admin/settings/uploads.json +trans.de = public/language/de/admin/settings/uploads.json +trans.en_US = public/language/en-US/admin/settings/uploads.json +trans.pl = public/language/pl/admin/settings/uploads.json +trans.rw = public/language/rw/admin/settings/uploads.json +trans.sc = public/language/sc/admin/settings/uploads.json +trans.tr = public/language/tr/admin/settings/uploads.json + +[o:nodebb:p:nodebb:r:admin-settings-user] +file_filter = public/language//admin/settings/user.json +source_file = public/language/en-GB/admin/settings/user.json +source_lang = en_GB +type = KEYVALUEJSON +trans.da = public/language/da/admin/settings/user.json +trans.el = public/language/el/admin/settings/user.json +trans.he = public/language/he/admin/settings/user.json +trans.ro = public/language/ro/admin/settings/user.json +trans.sq_AL = public/language/sq-AL/admin/settings/user.json +trans.gl = public/language/gl/admin/settings/user.json +trans.hu = public/language/hu/admin/settings/user.json +trans.nb = public/language/nb/admin/settings/user.json +trans.sv = public/language/sv/admin/settings/user.json +trans.uk = public/language/uk/admin/settings/user.json +trans.cs = public/language/cs/admin/settings/user.json +trans.en_US = public/language/en-US/admin/settings/user.json +trans.fa_IR = public/language/fa-IR/admin/settings/user.json +trans.fi = public/language/fi/admin/settings/user.json +trans.lv = public/language/lv/admin/settings/user.json +trans.ms = public/language/ms/admin/settings/user.json +trans.pl = public/language/pl/admin/settings/user.json +trans.ru = public/language/ru/admin/settings/user.json +trans.zh_CN = public/language/zh-CN/admin/settings/user.json +trans.hr = public/language/hr/admin/settings/user.json +trans.id = public/language/id/admin/settings/user.json +trans.it = public/language/it/admin/settings/user.json +trans.sk = public/language/sk/admin/settings/user.json +trans.sl = public/language/sl/admin/settings/user.json +trans.sr = public/language/sr/admin/settings/user.json +trans.tr = public/language/tr/admin/settings/user.json +trans.vi = public/language/vi/admin/settings/user.json +trans.de = public/language/de/admin/settings/user.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/user.json +trans.hy = public/language/hy/admin/settings/user.json +trans.pt_PT = public/language/pt-PT/admin/settings/user.json +trans.th = public/language/th/admin/settings/user.json +trans.zh_TW = public/language/zh-TW/admin/settings/user.json +trans.bn = public/language/bn/admin/settings/user.json +trans.nl = public/language/nl/admin/settings/user.json +trans.pt_BR = public/language/pt-BR/admin/settings/user.json +trans.rw = public/language/rw/admin/settings/user.json +trans.bg = public/language/bg/admin/settings/user.json +trans.fr = public/language/fr/admin/settings/user.json +trans.ko = public/language/ko/admin/settings/user.json +trans.ar = public/language/ar/admin/settings/user.json +trans.es = public/language/es/admin/settings/user.json +trans.et = public/language/et/admin/settings/user.json +trans.ja = public/language/ja/admin/settings/user.json +trans.lt = public/language/lt/admin/settings/user.json +trans.sc = public/language/sc/admin/settings/user.json + +[o:nodebb:p:nodebb:r:admin-settings-web-crawler] +file_filter = public/language//admin/settings/web-crawler.json +source_file = public/language/en-GB/admin/settings/web-crawler.json +source_lang = en_GB +type = KEYVALUEJSON +trans.cs = public/language/cs/admin/settings/web-crawler.json +trans.es = public/language/es/admin/settings/web-crawler.json +trans.fr = public/language/fr/admin/settings/web-crawler.json +trans.ko = public/language/ko/admin/settings/web-crawler.json +trans.pl = public/language/pl/admin/settings/web-crawler.json +trans.tr = public/language/tr/admin/settings/web-crawler.json +trans.uk = public/language/uk/admin/settings/web-crawler.json +trans.bg = public/language/bg/admin/settings/web-crawler.json +trans.el = public/language/el/admin/settings/web-crawler.json +trans.en@pirate = public/language/en-x-pirate/admin/settings/web-crawler.json +trans.fa_IR = public/language/fa-IR/admin/settings/web-crawler.json +trans.ms = public/language/ms/admin/settings/web-crawler.json +trans.th = public/language/th/admin/settings/web-crawler.json +trans.gl = public/language/gl/admin/settings/web-crawler.json +trans.id = public/language/id/admin/settings/web-crawler.json +trans.sk = public/language/sk/admin/settings/web-crawler.json +trans.rw = public/language/rw/admin/settings/web-crawler.json +trans.da = public/language/da/admin/settings/web-crawler.json +trans.hr = public/language/hr/admin/settings/web-crawler.json +trans.hu = public/language/hu/admin/settings/web-crawler.json +trans.ja = public/language/ja/admin/settings/web-crawler.json +trans.lv = public/language/lv/admin/settings/web-crawler.json +trans.nl = public/language/nl/admin/settings/web-crawler.json +trans.pt_BR = public/language/pt-BR/admin/settings/web-crawler.json +trans.vi = public/language/vi/admin/settings/web-crawler.json +trans.en_US = public/language/en-US/admin/settings/web-crawler.json +trans.et = public/language/et/admin/settings/web-crawler.json +trans.fi = public/language/fi/admin/settings/web-crawler.json +trans.sq_AL = public/language/sq-AL/admin/settings/web-crawler.json +trans.sv = public/language/sv/admin/settings/web-crawler.json +trans.ar = public/language/ar/admin/settings/web-crawler.json +trans.de = public/language/de/admin/settings/web-crawler.json +trans.hy = public/language/hy/admin/settings/web-crawler.json +trans.nb = public/language/nb/admin/settings/web-crawler.json +trans.ro = public/language/ro/admin/settings/web-crawler.json +trans.sr = public/language/sr/admin/settings/web-crawler.json +trans.zh_TW = public/language/zh-TW/admin/settings/web-crawler.json +trans.he = public/language/he/admin/settings/web-crawler.json +trans.it = public/language/it/admin/settings/web-crawler.json +trans.lt = public/language/lt/admin/settings/web-crawler.json +trans.ru = public/language/ru/admin/settings/web-crawler.json +trans.sl = public/language/sl/admin/settings/web-crawler.json +trans.zh_CN = public/language/zh-CN/admin/settings/web-crawler.json +trans.bn = public/language/bn/admin/settings/web-crawler.json +trans.pt_PT = public/language/pt-PT/admin/settings/web-crawler.json +trans.sc = public/language/sc/admin/settings/web-crawler.json + +[o:nodebb:p:nodebb:r:category] +file_filter = public/language//category.json +source_file = public/language/en-GB/category.json +source_lang = en_GB +type = KEYVALUEJSON +trans.th = public/language/th/category.json +trans.bg = public/language/bg/category.json +trans.hr = public/language/hr/category.json +trans.hy = public/language/hy/category.json +trans.sk = public/language/sk/category.json +trans.sl = public/language/sl/category.json +trans.sq_AL = public/language/sq-AL/category.json +trans.sv = public/language/sv/category.json +trans.vi = public/language/vi/category.json +trans.da = public/language/da/category.json +trans.en_US = public/language/en-US/category.json +trans.gl = public/language/gl/category.json +trans.ko = public/language/ko/category.json +trans.lt = public/language/lt/category.json +trans.pt_BR = public/language/pt-BR/category.json +trans.hu = public/language/hu/category.json +trans.lv = public/language/lv/category.json +trans.ro = public/language/ro/category.json +trans.ru = public/language/ru/category.json +trans.sr = public/language/sr/category.json +trans.bn = public/language/bn/category.json +trans.he = public/language/he/category.json +trans.nl = public/language/nl/category.json +trans.sc = public/language/sc/category.json +trans.zh_CN = public/language/zh-CN/category.json +trans.fi = public/language/fi/category.json +trans.ja = public/language/ja/category.json +trans.nb = public/language/nb/category.json +trans.pl = public/language/pl/category.json +trans.zh_TW = public/language/zh-TW/category.json +trans.ar = public/language/ar/category.json +trans.cs = public/language/cs/category.json +trans.fa_IR = public/language/fa-IR/category.json +trans.ms = public/language/ms/category.json +trans.pt_PT = public/language/pt-PT/category.json +trans.tr = public/language/tr/category.json +trans.en@pirate = public/language/en-x-pirate/category.json +trans.fr = public/language/fr/category.json +trans.id = public/language/id/category.json +trans.uk = public/language/uk/category.json +trans.de = public/language/de/category.json +trans.el = public/language/el/category.json +trans.es = public/language/es/category.json +trans.et = public/language/et/category.json +trans.it = public/language/it/category.json +trans.rw = public/language/rw/category.json + +[o:nodebb:p:nodebb:r:email] +file_filter = public/language//email.json +source_file = public/language/en-GB/email.json +source_lang = en_GB +type = KEYVALUEJSON +trans.sk = public/language/sk/email.json +trans.zh_TW = public/language/zh-TW/email.json +trans.el = public/language/el/email.json +trans.fa_IR = public/language/fa-IR/email.json +trans.fi = public/language/fi/email.json +trans.id = public/language/id/email.json +trans.ko = public/language/ko/email.json +trans.en@pirate = public/language/en-x-pirate/email.json +trans.it = public/language/it/email.json +trans.lv = public/language/lv/email.json +trans.uk = public/language/uk/email.json +trans.zh_CN = public/language/zh-CN/email.json +trans.sv = public/language/sv/email.json +trans.bn = public/language/bn/email.json +trans.cs = public/language/cs/email.json +trans.ms = public/language/ms/email.json +trans.ro = public/language/ro/email.json +trans.ru = public/language/ru/email.json +trans.de = public/language/de/email.json +trans.hu = public/language/hu/email.json +trans.hy = public/language/hy/email.json +trans.sl = public/language/sl/email.json +trans.th = public/language/th/email.json +trans.ar = public/language/ar/email.json +trans.es = public/language/es/email.json +trans.gl = public/language/gl/email.json +trans.he = public/language/he/email.json +trans.ja = public/language/ja/email.json +trans.bg = public/language/bg/email.json +trans.et = public/language/et/email.json +trans.hr = public/language/hr/email.json +trans.pl = public/language/pl/email.json +trans.da = public/language/da/email.json +trans.fr = public/language/fr/email.json +trans.lt = public/language/lt/email.json +trans.pt_PT = public/language/pt-PT/email.json +trans.sc = public/language/sc/email.json +trans.sq_AL = public/language/sq-AL/email.json +trans.sr = public/language/sr/email.json +trans.tr = public/language/tr/email.json +trans.en_US = public/language/en-US/email.json +trans.nb = public/language/nb/email.json +trans.nl = public/language/nl/email.json +trans.pt_BR = public/language/pt-BR/email.json +trans.rw = public/language/rw/email.json +trans.vi = public/language/vi/email.json + +[o:nodebb:p:nodebb:r:error] +file_filter = public/language//error.json +source_file = public/language/en-GB/error.json +source_lang = en_GB +type = KEYVALUEJSON +trans.de = public/language/de/error.json +trans.ko = public/language/ko/error.json +trans.lv = public/language/lv/error.json +trans.sk = public/language/sk/error.json +trans.cs = public/language/cs/error.json +trans.it = public/language/it/error.json +trans.nl = public/language/nl/error.json +trans.sc = public/language/sc/error.json +trans.sl = public/language/sl/error.json +trans.sq_AL = public/language/sq-AL/error.json +trans.tr = public/language/tr/error.json +trans.hu = public/language/hu/error.json +trans.fr = public/language/fr/error.json +trans.hy = public/language/hy/error.json +trans.zh_CN = public/language/zh-CN/error.json +trans.ar = public/language/ar/error.json +trans.et = public/language/et/error.json +trans.fi = public/language/fi/error.json +trans.he = public/language/he/error.json +trans.hr = public/language/hr/error.json +trans.lt = public/language/lt/error.json +trans.ru = public/language/ru/error.json +trans.rw = public/language/rw/error.json +trans.bn = public/language/bn/error.json +trans.vi = public/language/vi/error.json +trans.fa_IR = public/language/fa-IR/error.json +trans.gl = public/language/gl/error.json +trans.nb = public/language/nb/error.json +trans.pl = public/language/pl/error.json +trans.ro = public/language/ro/error.json +trans.uk = public/language/uk/error.json +trans.es = public/language/es/error.json +trans.el = public/language/el/error.json +trans.en@pirate = public/language/en-x-pirate/error.json +trans.en_US = public/language/en-US/error.json +trans.ms = public/language/ms/error.json +trans.pt_PT = public/language/pt-PT/error.json +trans.bg = public/language/bg/error.json +trans.pt_BR = public/language/pt-BR/error.json +trans.sv = public/language/sv/error.json +trans.zh_TW = public/language/zh-TW/error.json +trans.da = public/language/da/error.json +trans.ja = public/language/ja/error.json +trans.sr = public/language/sr/error.json +trans.th = public/language/th/error.json +trans.id = public/language/id/error.json + +[o:nodebb:p:nodebb:r:flags] +file_filter = public/language//flags.json +source_file = public/language/en-GB/flags.json +source_lang = en_GB +type = KEYVALUEJSON +trans.nb = public/language/nb/flags.json +trans.ru = public/language/ru/flags.json +trans.sc = public/language/sc/flags.json +trans.fi = public/language/fi/flags.json +trans.hr = public/language/hr/flags.json +trans.lv = public/language/lv/flags.json +trans.ms = public/language/ms/flags.json +trans.ja = public/language/ja/flags.json +trans.nl = public/language/nl/flags.json +trans.pt_PT = public/language/pt-PT/flags.json +trans.th = public/language/th/flags.json +trans.el = public/language/el/flags.json +trans.en_US = public/language/en-US/flags.json +trans.gl = public/language/gl/flags.json +trans.hy = public/language/hy/flags.json +trans.vi = public/language/vi/flags.json +trans.rw = public/language/rw/flags.json +trans.sr = public/language/sr/flags.json +trans.zh_TW = public/language/zh-TW/flags.json +trans.sq_AL = public/language/sq-AL/flags.json +trans.sv = public/language/sv/flags.json +trans.fa_IR = public/language/fa-IR/flags.json +trans.id = public/language/id/flags.json +trans.ko = public/language/ko/flags.json +trans.pl = public/language/pl/flags.json +trans.de = public/language/de/flags.json +trans.en@pirate = public/language/en-x-pirate/flags.json +trans.he = public/language/he/flags.json +trans.zh_CN = public/language/zh-CN/flags.json +trans.lt = public/language/lt/flags.json +trans.da = public/language/da/flags.json +trans.es = public/language/es/flags.json +trans.et = public/language/et/flags.json +trans.hu = public/language/hu/flags.json +trans.tr = public/language/tr/flags.json +trans.bn = public/language/bn/flags.json +trans.it = public/language/it/flags.json +trans.pt_BR = public/language/pt-BR/flags.json +trans.sk = public/language/sk/flags.json +trans.ro = public/language/ro/flags.json +trans.sl = public/language/sl/flags.json +trans.ar = public/language/ar/flags.json +trans.bg = public/language/bg/flags.json +trans.cs = public/language/cs/flags.json +trans.fr = public/language/fr/flags.json + +[o:nodebb:p:nodebb:r:global] +file_filter = public/language//global.json +source_file = public/language/en-GB/global.json +source_lang = en_GB +type = KEYVALUEJSON +trans.ms = public/language/ms/global.json +trans.pl = public/language/pl/global.json +trans.ru = public/language/ru/global.json +trans.bn = public/language/bn/global.json +trans.fr = public/language/fr/global.json +trans.hr = public/language/hr/global.json +trans.hy = public/language/hy/global.json +trans.lv = public/language/lv/global.json +trans.fa_IR = public/language/fa-IR/global.json +trans.sl = public/language/sl/global.json +trans.uk = public/language/uk/global.json +trans.sc = public/language/sc/global.json +trans.sv = public/language/sv/global.json +trans.th = public/language/th/global.json +trans.zh_TW = public/language/zh-TW/global.json +trans.hu = public/language/hu/global.json +trans.sk = public/language/sk/global.json +trans.sr = public/language/sr/global.json +trans.tr = public/language/tr/global.json +trans.nb = public/language/nb/global.json +trans.pt_BR = public/language/pt-BR/global.json +trans.pt_PT = public/language/pt-PT/global.json +trans.bg = public/language/bg/global.json +trans.da = public/language/da/global.json +trans.fi = public/language/fi/global.json +trans.id = public/language/id/global.json +trans.lt = public/language/lt/global.json +trans.ro = public/language/ro/global.json +trans.de = public/language/de/global.json +trans.el = public/language/el/global.json +trans.vi = public/language/vi/global.json +trans.zh_CN = public/language/zh-CN/global.json +trans.en_US = public/language/en-US/global.json +trans.et = public/language/et/global.json +trans.gl = public/language/gl/global.json +trans.he = public/language/he/global.json +trans.ko = public/language/ko/global.json +trans.ja = public/language/ja/global.json +trans.nl = public/language/nl/global.json +trans.rw = public/language/rw/global.json +trans.ar = public/language/ar/global.json +trans.cs = public/language/cs/global.json +trans.en@pirate = public/language/en-x-pirate/global.json +trans.es = public/language/es/global.json +trans.it = public/language/it/global.json +trans.sq_AL = public/language/sq-AL/global.json + +[o:nodebb:p:nodebb:r:groups] +file_filter = public/language//groups.json +source_file = public/language/en-GB/groups.json +source_lang = en_GB +type = KEYVALUEJSON +trans.zh_TW = public/language/zh-TW/groups.json +trans.de = public/language/de/groups.json +trans.es = public/language/es/groups.json +trans.sc = public/language/sc/groups.json +trans.sr = public/language/sr/groups.json +trans.da = public/language/da/groups.json +trans.en@pirate = public/language/en-x-pirate/groups.json +trans.hy = public/language/hy/groups.json +trans.pt_PT = public/language/pt-PT/groups.json +trans.ms = public/language/ms/groups.json +trans.nb = public/language/nb/groups.json +trans.ro = public/language/ro/groups.json +trans.vi = public/language/vi/groups.json +trans.fa_IR = public/language/fa-IR/groups.json +trans.he = public/language/he/groups.json +trans.hr = public/language/hr/groups.json +trans.lv = public/language/lv/groups.json +trans.bg = public/language/bg/groups.json +trans.bn = public/language/bn/groups.json +trans.ja = public/language/ja/groups.json +trans.tr = public/language/tr/groups.json +trans.zh_CN = public/language/zh-CN/groups.json +trans.ar = public/language/ar/groups.json +trans.cs = public/language/cs/groups.json +trans.it = public/language/it/groups.json +trans.sk = public/language/sk/groups.json +trans.fi = public/language/fi/groups.json +trans.fr = public/language/fr/groups.json +trans.sq_AL = public/language/sq-AL/groups.json +trans.th = public/language/th/groups.json +trans.id = public/language/id/groups.json +trans.sl = public/language/sl/groups.json +trans.sv = public/language/sv/groups.json +trans.uk = public/language/uk/groups.json +trans.el = public/language/el/groups.json +trans.et = public/language/et/groups.json +trans.gl = public/language/gl/groups.json +trans.hu = public/language/hu/groups.json +trans.pl = public/language/pl/groups.json +trans.pt_BR = public/language/pt-BR/groups.json +trans.ru = public/language/ru/groups.json +trans.rw = public/language/rw/groups.json +trans.en_US = public/language/en-US/groups.json +trans.ko = public/language/ko/groups.json +trans.lt = public/language/lt/groups.json +trans.nl = public/language/nl/groups.json + +[o:nodebb:p:nodebb:r:ip-blacklist] +file_filter = public/language//ip-blacklist.json +source_file = public/language/en-GB/ip-blacklist.json +source_lang = en_GB +type = KEYVALUEJSON +trans.sr = public/language/sr/ip-blacklist.json +trans.et = public/language/et/ip-blacklist.json +trans.fi = public/language/fi/ip-blacklist.json +trans.hr = public/language/hr/ip-blacklist.json +trans.hu = public/language/hu/ip-blacklist.json +trans.ru = public/language/ru/ip-blacklist.json +trans.sk = public/language/sk/ip-blacklist.json +trans.sq_AL = public/language/sq-AL/ip-blacklist.json +trans.zh_CN = public/language/zh-CN/ip-blacklist.json +trans.da = public/language/da/ip-blacklist.json +trans.en@pirate = public/language/en-x-pirate/ip-blacklist.json +trans.he = public/language/he/ip-blacklist.json +trans.hy = public/language/hy/ip-blacklist.json +trans.lv = public/language/lv/ip-blacklist.json +trans.pt_BR = public/language/pt-BR/ip-blacklist.json +trans.sc = public/language/sc/ip-blacklist.json +trans.ar = public/language/ar/ip-blacklist.json +trans.fa_IR = public/language/fa-IR/ip-blacklist.json +trans.fr = public/language/fr/ip-blacklist.json +trans.gl = public/language/gl/ip-blacklist.json +trans.nb = public/language/nb/ip-blacklist.json +trans.sv = public/language/sv/ip-blacklist.json +trans.th = public/language/th/ip-blacklist.json +trans.bn = public/language/bn/ip-blacklist.json +trans.en_US = public/language/en-US/ip-blacklist.json +trans.ja = public/language/ja/ip-blacklist.json +trans.ms = public/language/ms/ip-blacklist.json +trans.nl = public/language/nl/ip-blacklist.json +trans.pt_PT = public/language/pt-PT/ip-blacklist.json +trans.ro = public/language/ro/ip-blacklist.json +trans.es = public/language/es/ip-blacklist.json +trans.id = public/language/id/ip-blacklist.json +trans.it = public/language/it/ip-blacklist.json +trans.uk = public/language/uk/ip-blacklist.json +trans.vi = public/language/vi/ip-blacklist.json +trans.zh_TW = public/language/zh-TW/ip-blacklist.json +trans.bg = public/language/bg/ip-blacklist.json +trans.de = public/language/de/ip-blacklist.json +trans.sl = public/language/sl/ip-blacklist.json +trans.pl = public/language/pl/ip-blacklist.json +trans.rw = public/language/rw/ip-blacklist.json +trans.cs = public/language/cs/ip-blacklist.json +trans.el = public/language/el/ip-blacklist.json +trans.ko = public/language/ko/ip-blacklist.json +trans.lt = public/language/lt/ip-blacklist.json +trans.tr = public/language/tr/ip-blacklist.json + +[o:nodebb:p:nodebb:r:language-1] +file_filter = public/language//language.json +source_file = public/language/en-GB/language.json +source_lang = en_GB +type = KEYVALUEJSON +trans.lt = public/language/lt/language.json +trans.vi = public/language/vi/language.json +trans.sr = public/language/sr/language.json +trans.tr = public/language/tr/language.json +trans.uk = public/language/uk/language.json +trans.bg = public/language/bg/language.json +trans.da = public/language/da/language.json +trans.en@pirate = public/language/en-x-pirate/language.json +trans.hr = public/language/hr/language.json +trans.rw = public/language/rw/language.json +trans.en_US = public/language/en-US/language.json +trans.et = public/language/et/language.json +trans.ja = public/language/ja/language.json +trans.nb = public/language/nb/language.json +trans.sk = public/language/sk/language.json +trans.el = public/language/el/language.json +trans.es = public/language/es/language.json +trans.fi = public/language/fi/language.json +trans.it = public/language/it/language.json +trans.pt_PT = public/language/pt-PT/language.json +trans.ro = public/language/ro/language.json +trans.th = public/language/th/language.json +trans.ar = public/language/ar/language.json +trans.bn = public/language/bn/language.json +trans.de = public/language/de/language.json +trans.ko = public/language/ko/language.json +trans.pl = public/language/pl/language.json +trans.gl = public/language/gl/language.json +trans.sq_AL = public/language/sq-AL/language.json +trans.zh_TW = public/language/zh-TW/language.json +trans.nl = public/language/nl/language.json +trans.ru = public/language/ru/language.json +trans.sc = public/language/sc/language.json +trans.cs = public/language/cs/language.json +trans.fr = public/language/fr/language.json +trans.he = public/language/he/language.json +trans.id = public/language/id/language.json +trans.lv = public/language/lv/language.json +trans.sl = public/language/sl/language.json +trans.sv = public/language/sv/language.json +trans.zh_CN = public/language/zh-CN/language.json +trans.fa_IR = public/language/fa-IR/language.json +trans.hu = public/language/hu/language.json +trans.hy = public/language/hy/language.json +trans.ms = public/language/ms/language.json +trans.pt_BR = public/language/pt-BR/language.json + +[o:nodebb:p:nodebb:r:login] +file_filter = public/language//login.json +source_file = public/language/en-GB/login.json +source_lang = en_GB +type = KEYVALUEJSON +trans.bn = public/language/bn/login.json +trans.cs = public/language/cs/login.json +trans.el = public/language/el/login.json +trans.ja = public/language/ja/login.json +trans.pt_BR = public/language/pt-BR/login.json +trans.ro = public/language/ro/login.json +trans.zh_TW = public/language/zh-TW/login.json +trans.bg = public/language/bg/login.json +trans.pt_PT = public/language/pt-PT/login.json +trans.sr = public/language/sr/login.json +trans.vi = public/language/vi/login.json +trans.zh_CN = public/language/zh-CN/login.json +trans.pl = public/language/pl/login.json +trans.gl = public/language/gl/login.json +trans.ko = public/language/ko/login.json +trans.lv = public/language/lv/login.json +trans.sl = public/language/sl/login.json +trans.sq_AL = public/language/sq-AL/login.json +trans.sv = public/language/sv/login.json +trans.tr = public/language/tr/login.json +trans.es = public/language/es/login.json +trans.sk = public/language/sk/login.json +trans.uk = public/language/uk/login.json +trans.it = public/language/it/login.json +trans.da = public/language/da/login.json +trans.fa_IR = public/language/fa-IR/login.json +trans.fi = public/language/fi/login.json +trans.fr = public/language/fr/login.json +trans.he = public/language/he/login.json +trans.hr = public/language/hr/login.json +trans.ar = public/language/ar/login.json +trans.en_US = public/language/en-US/login.json +trans.hu = public/language/hu/login.json +trans.ms = public/language/ms/login.json +trans.en@pirate = public/language/en-x-pirate/login.json +trans.hy = public/language/hy/login.json +trans.id = public/language/id/login.json +trans.nb = public/language/nb/login.json +trans.ru = public/language/ru/login.json +trans.rw = public/language/rw/login.json +trans.th = public/language/th/login.json +trans.et = public/language/et/login.json +trans.lt = public/language/lt/login.json +trans.nl = public/language/nl/login.json +trans.sc = public/language/sc/login.json +trans.de = public/language/de/login.json + +[o:nodebb:p:nodebb:r:modules] +file_filter = public/language//modules.json +source_file = public/language/en-GB/modules.json +source_lang = en_GB +type = KEYVALUEJSON +trans.sl = public/language/sl/modules.json +trans.sq_AL = public/language/sq-AL/modules.json +trans.da = public/language/da/modules.json +trans.et = public/language/et/modules.json +trans.fr = public/language/fr/modules.json +trans.lt = public/language/lt/modules.json +trans.ms = public/language/ms/modules.json +trans.sk = public/language/sk/modules.json +trans.vi = public/language/vi/modules.json +trans.fa_IR = public/language/fa-IR/modules.json +trans.hr = public/language/hr/modules.json +trans.lv = public/language/lv/modules.json +trans.nb = public/language/nb/modules.json +trans.ro = public/language/ro/modules.json +trans.sv = public/language/sv/modules.json +trans.en@pirate = public/language/en-x-pirate/modules.json +trans.tr = public/language/tr/modules.json +trans.cs = public/language/cs/modules.json +trans.de = public/language/de/modules.json +trans.fi = public/language/fi/modules.json +trans.he = public/language/he/modules.json +trans.hy = public/language/hy/modules.json +trans.sr = public/language/sr/modules.json +trans.el = public/language/el/modules.json +trans.hu = public/language/hu/modules.json +trans.ko = public/language/ko/modules.json +trans.es = public/language/es/modules.json +trans.id = public/language/id/modules.json +trans.nl = public/language/nl/modules.json +trans.sc = public/language/sc/modules.json +trans.th = public/language/th/modules.json +trans.zh_TW = public/language/zh-TW/modules.json +trans.bg = public/language/bg/modules.json +trans.bn = public/language/bn/modules.json +trans.en_US = public/language/en-US/modules.json +trans.it = public/language/it/modules.json +trans.pl = public/language/pl/modules.json +trans.uk = public/language/uk/modules.json +trans.rw = public/language/rw/modules.json +trans.zh_CN = public/language/zh-CN/modules.json +trans.ar = public/language/ar/modules.json +trans.gl = public/language/gl/modules.json +trans.ja = public/language/ja/modules.json +trans.pt_BR = public/language/pt-BR/modules.json +trans.pt_PT = public/language/pt-PT/modules.json +trans.ru = public/language/ru/modules.json + +[o:nodebb:p:nodebb:r:notifications] +file_filter = public/language//notifications.json +source_file = public/language/en-GB/notifications.json +source_lang = en_GB +type = KEYVALUEJSON +trans.ru = public/language/ru/notifications.json +trans.sq_AL = public/language/sq-AL/notifications.json +trans.el = public/language/el/notifications.json +trans.en_US = public/language/en-US/notifications.json +trans.ja = public/language/ja/notifications.json +trans.pl = public/language/pl/notifications.json +trans.sr = public/language/sr/notifications.json +trans.th = public/language/th/notifications.json +trans.tr = public/language/tr/notifications.json +trans.zh_CN = public/language/zh-CN/notifications.json +trans.cs = public/language/cs/notifications.json +trans.de = public/language/de/notifications.json +trans.fa_IR = public/language/fa-IR/notifications.json +trans.sl = public/language/sl/notifications.json +trans.sc = public/language/sc/notifications.json +trans.uk = public/language/uk/notifications.json +trans.bn = public/language/bn/notifications.json +trans.fi = public/language/fi/notifications.json +trans.lt = public/language/lt/notifications.json +trans.pt_PT = public/language/pt-PT/notifications.json +trans.es = public/language/es/notifications.json +trans.gl = public/language/gl/notifications.json +trans.sv = public/language/sv/notifications.json +trans.zh_TW = public/language/zh-TW/notifications.json +trans.pt_BR = public/language/pt-BR/notifications.json +trans.rw = public/language/rw/notifications.json +trans.lv = public/language/lv/notifications.json +trans.bg = public/language/bg/notifications.json +trans.he = public/language/he/notifications.json +trans.hu = public/language/hu/notifications.json +trans.it = public/language/it/notifications.json +trans.nl = public/language/nl/notifications.json +trans.ro = public/language/ro/notifications.json +trans.sk = public/language/sk/notifications.json +trans.vi = public/language/vi/notifications.json +trans.et = public/language/et/notifications.json +trans.hy = public/language/hy/notifications.json +trans.ko = public/language/ko/notifications.json +trans.ms = public/language/ms/notifications.json +trans.hr = public/language/hr/notifications.json +trans.id = public/language/id/notifications.json +trans.nb = public/language/nb/notifications.json +trans.ar = public/language/ar/notifications.json +trans.da = public/language/da/notifications.json +trans.en@pirate = public/language/en-x-pirate/notifications.json +trans.fr = public/language/fr/notifications.json + +[o:nodebb:p:nodebb:r:pages] +file_filter = public/language//pages.json +source_file = public/language/en-GB/pages.json +source_lang = en_GB +type = KEYVALUEJSON +trans.he = public/language/he/pages.json +trans.nb = public/language/nb/pages.json +trans.sv = public/language/sv/pages.json +trans.pt_BR = public/language/pt-BR/pages.json +trans.tr = public/language/tr/pages.json +trans.zh_TW = public/language/zh-TW/pages.json +trans.bn = public/language/bn/pages.json +trans.gl = public/language/gl/pages.json +trans.hr = public/language/hr/pages.json +trans.id = public/language/id/pages.json +trans.lt = public/language/lt/pages.json +trans.zh_CN = public/language/zh-CN/pages.json +trans.bg = public/language/bg/pages.json +trans.et = public/language/et/pages.json +trans.it = public/language/it/pages.json +trans.ro = public/language/ro/pages.json +trans.sl = public/language/sl/pages.json +trans.sk = public/language/sk/pages.json +trans.sr = public/language/sr/pages.json +trans.uk = public/language/uk/pages.json +trans.de = public/language/de/pages.json +trans.en@pirate = public/language/en-x-pirate/pages.json +trans.en_US = public/language/en-US/pages.json +trans.pt_PT = public/language/pt-PT/pages.json +trans.rw = public/language/rw/pages.json +trans.th = public/language/th/pages.json +trans.vi = public/language/vi/pages.json +trans.hu = public/language/hu/pages.json +trans.hy = public/language/hy/pages.json +trans.nl = public/language/nl/pages.json +trans.ru = public/language/ru/pages.json +trans.sc = public/language/sc/pages.json +trans.cs = public/language/cs/pages.json +trans.fi = public/language/fi/pages.json +trans.ko = public/language/ko/pages.json +trans.lv = public/language/lv/pages.json +trans.sq_AL = public/language/sq-AL/pages.json +trans.ar = public/language/ar/pages.json +trans.da = public/language/da/pages.json +trans.es = public/language/es/pages.json +trans.pl = public/language/pl/pages.json +trans.el = public/language/el/pages.json +trans.fa_IR = public/language/fa-IR/pages.json +trans.fr = public/language/fr/pages.json +trans.ja = public/language/ja/pages.json +trans.ms = public/language/ms/pages.json + +[o:nodebb:p:nodebb:r:post-queue] +file_filter = public/language//post-queue.json +source_file = public/language/en-GB/post-queue.json +source_lang = en_GB +type = KEYVALUEJSON +trans.it = public/language/it/post-queue.json +trans.ko = public/language/ko/post-queue.json +trans.lv = public/language/lv/post-queue.json +trans.nl = public/language/nl/post-queue.json +trans.rw = public/language/rw/post-queue.json +trans.da = public/language/da/post-queue.json +trans.de = public/language/de/post-queue.json +trans.el = public/language/el/post-queue.json +trans.sk = public/language/sk/post-queue.json +trans.sc = public/language/sc/post-queue.json +trans.sr = public/language/sr/post-queue.json +trans.tr = public/language/tr/post-queue.json +trans.uk = public/language/uk/post-queue.json +trans.ja = public/language/ja/post-queue.json +trans.ms = public/language/ms/post-queue.json +trans.ru = public/language/ru/post-queue.json +trans.fr = public/language/fr/post-queue.json +trans.hu = public/language/hu/post-queue.json +trans.lt = public/language/lt/post-queue.json +trans.pl = public/language/pl/post-queue.json +trans.ro = public/language/ro/post-queue.json +trans.bn = public/language/bn/post-queue.json +trans.en@pirate = public/language/en-x-pirate/post-queue.json +trans.fa_IR = public/language/fa-IR/post-queue.json +trans.sl = public/language/sl/post-queue.json +trans.vi = public/language/vi/post-queue.json +trans.zh_CN = public/language/zh-CN/post-queue.json +trans.id = public/language/id/post-queue.json +trans.en_US = public/language/en-US/post-queue.json +trans.sq_AL = public/language/sq-AL/post-queue.json +trans.sv = public/language/sv/post-queue.json +trans.zh_TW = public/language/zh-TW/post-queue.json +trans.ar = public/language/ar/post-queue.json +trans.bg = public/language/bg/post-queue.json +trans.cs = public/language/cs/post-queue.json +trans.hr = public/language/hr/post-queue.json +trans.pt_BR = public/language/pt-BR/post-queue.json +trans.th = public/language/th/post-queue.json +trans.es = public/language/es/post-queue.json +trans.et = public/language/et/post-queue.json +trans.gl = public/language/gl/post-queue.json +trans.hy = public/language/hy/post-queue.json +trans.pt_PT = public/language/pt-PT/post-queue.json +trans.fi = public/language/fi/post-queue.json +trans.he = public/language/he/post-queue.json +trans.nb = public/language/nb/post-queue.json + +[o:nodebb:p:nodebb:r:recent] +file_filter = public/language//recent.json +source_file = public/language/en-GB/recent.json +source_lang = en_GB +type = KEYVALUEJSON +trans.sq_AL = public/language/sq-AL/recent.json +trans.sr = public/language/sr/recent.json +trans.sk = public/language/sk/recent.json +trans.uk = public/language/uk/recent.json +trans.bg = public/language/bg/recent.json +trans.cs = public/language/cs/recent.json +trans.da = public/language/da/recent.json +trans.hy = public/language/hy/recent.json +trans.id = public/language/id/recent.json +trans.lv = public/language/lv/recent.json +trans.ar = public/language/ar/recent.json +trans.de = public/language/de/recent.json +trans.es = public/language/es/recent.json +trans.fa_IR = public/language/fa-IR/recent.json +trans.gl = public/language/gl/recent.json +trans.hu = public/language/hu/recent.json +trans.lt = public/language/lt/recent.json +trans.pt_BR = public/language/pt-BR/recent.json +trans.ru = public/language/ru/recent.json +trans.vi = public/language/vi/recent.json +trans.rw = public/language/rw/recent.json +trans.sl = public/language/sl/recent.json +trans.el = public/language/el/recent.json +trans.en_US = public/language/en-US/recent.json +trans.he = public/language/he/recent.json +trans.hr = public/language/hr/recent.json +trans.ro = public/language/ro/recent.json +trans.tr = public/language/tr/recent.json +trans.zh_CN = public/language/zh-CN/recent.json +trans.bn = public/language/bn/recent.json +trans.en@pirate = public/language/en-x-pirate/recent.json +trans.ja = public/language/ja/recent.json +trans.nb = public/language/nb/recent.json +trans.nl = public/language/nl/recent.json +trans.sv = public/language/sv/recent.json +trans.th = public/language/th/recent.json +trans.fr = public/language/fr/recent.json +trans.it = public/language/it/recent.json +trans.ms = public/language/ms/recent.json +trans.pl = public/language/pl/recent.json +trans.pt_PT = public/language/pt-PT/recent.json +trans.et = public/language/et/recent.json +trans.fi = public/language/fi/recent.json +trans.ko = public/language/ko/recent.json +trans.sc = public/language/sc/recent.json +trans.zh_TW = public/language/zh-TW/recent.json + +[o:nodebb:p:nodebb:r:register] +file_filter = public/language//register.json +source_file = public/language/en-GB/register.json +source_lang = en_GB +type = KEYVALUEJSON +trans.sq_AL = public/language/sq-AL/register.json +trans.tr = public/language/tr/register.json +trans.et = public/language/et/register.json +trans.he = public/language/he/register.json +trans.lv = public/language/lv/register.json +trans.nl = public/language/nl/register.json +trans.sc = public/language/sc/register.json +trans.en@pirate = public/language/en-x-pirate/register.json +trans.es = public/language/es/register.json +trans.pl = public/language/pl/register.json +trans.sl = public/language/sl/register.json +trans.uk = public/language/uk/register.json +trans.pt_PT = public/language/pt-PT/register.json +trans.ar = public/language/ar/register.json +trans.bg = public/language/bg/register.json +trans.de = public/language/de/register.json +trans.hr = public/language/hr/register.json +trans.nb = public/language/nb/register.json +trans.gl = public/language/gl/register.json +trans.sk = public/language/sk/register.json +trans.hy = public/language/hy/register.json +trans.ko = public/language/ko/register.json +trans.ms = public/language/ms/register.json +trans.ro = public/language/ro/register.json +trans.rw = public/language/rw/register.json +trans.zh_CN = public/language/zh-CN/register.json +trans.fi = public/language/fi/register.json +trans.it = public/language/it/register.json +trans.ru = public/language/ru/register.json +trans.sr = public/language/sr/register.json +trans.vi = public/language/vi/register.json +trans.sv = public/language/sv/register.json +trans.zh_TW = public/language/zh-TW/register.json +trans.bn = public/language/bn/register.json +trans.cs = public/language/cs/register.json +trans.fa_IR = public/language/fa-IR/register.json +trans.hu = public/language/hu/register.json +trans.lt = public/language/lt/register.json +trans.ja = public/language/ja/register.json +trans.pt_BR = public/language/pt-BR/register.json +trans.th = public/language/th/register.json +trans.da = public/language/da/register.json +trans.el = public/language/el/register.json +trans.en_US = public/language/en-US/register.json +trans.fr = public/language/fr/register.json +trans.id = public/language/id/register.json + +[o:nodebb:p:nodebb:r:reset_password] +file_filter = public/language//reset_password.json +source_file = public/language/en-GB/reset_password.json +source_lang = en_GB +type = KEYVALUEJSON +trans.bg = public/language/bg/reset_password.json +trans.fr = public/language/fr/reset_password.json +trans.hr = public/language/hr/reset_password.json +trans.hy = public/language/hy/reset_password.json +trans.ja = public/language/ja/reset_password.json +trans.pt_PT = public/language/pt-PT/reset_password.json +trans.zh_CN = public/language/zh-CN/reset_password.json +trans.sv = public/language/sv/reset_password.json +trans.de = public/language/de/reset_password.json +trans.fa_IR = public/language/fa-IR/reset_password.json +trans.gl = public/language/gl/reset_password.json +trans.hu = public/language/hu/reset_password.json +trans.id = public/language/id/reset_password.json +trans.rw = public/language/rw/reset_password.json +trans.sc = public/language/sc/reset_password.json +trans.vi = public/language/vi/reset_password.json +trans.bn = public/language/bn/reset_password.json +trans.he = public/language/he/reset_password.json +trans.ro = public/language/ro/reset_password.json +trans.sq_AL = public/language/sq-AL/reset_password.json +trans.ar = public/language/ar/reset_password.json +trans.cs = public/language/cs/reset_password.json +trans.ko = public/language/ko/reset_password.json +trans.ms = public/language/ms/reset_password.json +trans.pt_BR = public/language/pt-BR/reset_password.json +trans.sr = public/language/sr/reset_password.json +trans.tr = public/language/tr/reset_password.json +trans.ru = public/language/ru/reset_password.json +trans.zh_TW = public/language/zh-TW/reset_password.json +trans.da = public/language/da/reset_password.json +trans.en@pirate = public/language/en-x-pirate/reset_password.json +trans.en_US = public/language/en-US/reset_password.json +trans.lt = public/language/lt/reset_password.json +trans.lv = public/language/lv/reset_password.json +trans.nb = public/language/nb/reset_password.json +trans.sk = public/language/sk/reset_password.json +trans.el = public/language/el/reset_password.json +trans.es = public/language/es/reset_password.json +trans.et = public/language/et/reset_password.json +trans.uk = public/language/uk/reset_password.json +trans.fi = public/language/fi/reset_password.json +trans.it = public/language/it/reset_password.json +trans.nl = public/language/nl/reset_password.json +trans.pl = public/language/pl/reset_password.json +trans.sl = public/language/sl/reset_password.json +trans.th = public/language/th/reset_password.json + +[o:nodebb:p:nodebb:r:search] +file_filter = public/language//search.json +source_file = public/language/en-GB/search.json +source_lang = en_GB +type = KEYVALUEJSON +trans.da = public/language/da/search.json +trans.en_US = public/language/en-US/search.json +trans.ms = public/language/ms/search.json +trans.hr = public/language/hr/search.json +trans.hu = public/language/hu/search.json +trans.id = public/language/id/search.json +trans.bg = public/language/bg/search.json +trans.de = public/language/de/search.json +trans.en@pirate = public/language/en-x-pirate/search.json +trans.fa_IR = public/language/fa-IR/search.json +trans.fi = public/language/fi/search.json +trans.sc = public/language/sc/search.json +trans.sk = public/language/sk/search.json +trans.sl = public/language/sl/search.json +trans.sq_AL = public/language/sq-AL/search.json +trans.sr = public/language/sr/search.json +trans.bn = public/language/bn/search.json +trans.ja = public/language/ja/search.json +trans.ko = public/language/ko/search.json +trans.pl = public/language/pl/search.json +trans.ro = public/language/ro/search.json +trans.zh_TW = public/language/zh-TW/search.json +trans.cs = public/language/cs/search.json +trans.he = public/language/he/search.json +trans.nb = public/language/nb/search.json +trans.zh_CN = public/language/zh-CN/search.json +trans.lv = public/language/lv/search.json +trans.rw = public/language/rw/search.json +trans.sv = public/language/sv/search.json +trans.ru = public/language/ru/search.json +trans.tr = public/language/tr/search.json +trans.uk = public/language/uk/search.json +trans.el = public/language/el/search.json +trans.fr = public/language/fr/search.json +trans.gl = public/language/gl/search.json +trans.it = public/language/it/search.json +trans.pt_BR = public/language/pt-BR/search.json +trans.nl = public/language/nl/search.json +trans.pt_PT = public/language/pt-PT/search.json +trans.th = public/language/th/search.json +trans.vi = public/language/vi/search.json +trans.ar = public/language/ar/search.json +trans.es = public/language/es/search.json +trans.et = public/language/et/search.json +trans.hy = public/language/hy/search.json +trans.lt = public/language/lt/search.json + +[o:nodebb:p:nodebb:r:success] +file_filter = public/language//success.json +source_file = public/language/en-GB/success.json +source_lang = en_GB +type = KEYVALUEJSON +trans.pt_BR = public/language/pt-BR/success.json +trans.en@pirate = public/language/en-x-pirate/success.json +trans.es = public/language/es/success.json +trans.he = public/language/he/success.json +trans.hy = public/language/hy/success.json +trans.ja = public/language/ja/success.json +trans.ko = public/language/ko/success.json +trans.pl = public/language/pl/success.json +trans.de = public/language/de/success.json +trans.fa_IR = public/language/fa-IR/success.json +trans.ro = public/language/ro/success.json +trans.en_US = public/language/en-US/success.json +trans.lt = public/language/lt/success.json +trans.ru = public/language/ru/success.json +trans.sq_AL = public/language/sq-AL/success.json +trans.vi = public/language/vi/success.json +trans.bg = public/language/bg/success.json +trans.hr = public/language/hr/success.json +trans.ms = public/language/ms/success.json +trans.th = public/language/th/success.json +trans.zh_CN = public/language/zh-CN/success.json +trans.bn = public/language/bn/success.json +trans.fr = public/language/fr/success.json +trans.hu = public/language/hu/success.json +trans.id = public/language/id/success.json +trans.rw = public/language/rw/success.json +trans.sl = public/language/sl/success.json +trans.zh_TW = public/language/zh-TW/success.json +trans.ar = public/language/ar/success.json +trans.et = public/language/et/success.json +trans.it = public/language/it/success.json +trans.pt_PT = public/language/pt-PT/success.json +trans.sk = public/language/sk/success.json +trans.sv = public/language/sv/success.json +trans.tr = public/language/tr/success.json +trans.cs = public/language/cs/success.json +trans.fi = public/language/fi/success.json +trans.lv = public/language/lv/success.json +trans.nl = public/language/nl/success.json +trans.sc = public/language/sc/success.json +trans.da = public/language/da/success.json +trans.el = public/language/el/success.json +trans.gl = public/language/gl/success.json +trans.nb = public/language/nb/success.json +trans.sr = public/language/sr/success.json +trans.uk = public/language/uk/success.json + +[o:nodebb:p:nodebb:r:tags] +file_filter = public/language//tags.json +source_file = public/language/en-GB/tags.json +source_lang = en_GB +type = KEYVALUEJSON +trans.et = public/language/et/tags.json +trans.nl = public/language/nl/tags.json +trans.pt_BR = public/language/pt-BR/tags.json +trans.uk = public/language/uk/tags.json +trans.el = public/language/el/tags.json +trans.fa_IR = public/language/fa-IR/tags.json +trans.he = public/language/he/tags.json +trans.hr = public/language/hr/tags.json +trans.th = public/language/th/tags.json +trans.sl = public/language/sl/tags.json +trans.bg = public/language/bg/tags.json +trans.en_US = public/language/en-US/tags.json +trans.fi = public/language/fi/tags.json +trans.rw = public/language/rw/tags.json +trans.sc = public/language/sc/tags.json +trans.tr = public/language/tr/tags.json +trans.vi = public/language/vi/tags.json +trans.ar = public/language/ar/tags.json +trans.de = public/language/de/tags.json +trans.es = public/language/es/tags.json +trans.pt_PT = public/language/pt-PT/tags.json +trans.ro = public/language/ro/tags.json +trans.ru = public/language/ru/tags.json +trans.sk = public/language/sk/tags.json +trans.sr = public/language/sr/tags.json +trans.cs = public/language/cs/tags.json +trans.da = public/language/da/tags.json +trans.en@pirate = public/language/en-x-pirate/tags.json +trans.hu = public/language/hu/tags.json +trans.ja = public/language/ja/tags.json +trans.zh_CN = public/language/zh-CN/tags.json +trans.gl = public/language/gl/tags.json +trans.lv = public/language/lv/tags.json +trans.ms = public/language/ms/tags.json +trans.nb = public/language/nb/tags.json +trans.sv = public/language/sv/tags.json +trans.sq_AL = public/language/sq-AL/tags.json +trans.zh_TW = public/language/zh-TW/tags.json +trans.bn = public/language/bn/tags.json +trans.fr = public/language/fr/tags.json +trans.id = public/language/id/tags.json +trans.ko = public/language/ko/tags.json +trans.lt = public/language/lt/tags.json +trans.hy = public/language/hy/tags.json +trans.it = public/language/it/tags.json +trans.pl = public/language/pl/tags.json + +[o:nodebb:p:nodebb:r:top] +file_filter = public/language//top.json +source_file = public/language/en-GB/top.json +source_lang = en_GB +type = KEYVALUEJSON +trans.hy = public/language/hy/top.json +trans.el = public/language/el/top.json +trans.fa_IR = public/language/fa-IR/top.json +trans.nl = public/language/nl/top.json +trans.cs = public/language/cs/top.json +trans.en_US = public/language/en-US/top.json +trans.fi = public/language/fi/top.json +trans.he = public/language/he/top.json +trans.lt = public/language/lt/top.json +trans.ms = public/language/ms/top.json +trans.sk = public/language/sk/top.json +trans.vi = public/language/vi/top.json +trans.bg = public/language/bg/top.json +trans.de = public/language/de/top.json +trans.hu = public/language/hu/top.json +trans.pl = public/language/pl/top.json +trans.pt_PT = public/language/pt-PT/top.json +trans.sl = public/language/sl/top.json +trans.en@pirate = public/language/en-x-pirate/top.json +trans.gl = public/language/gl/top.json +trans.rw = public/language/rw/top.json +trans.sq_AL = public/language/sq-AL/top.json +trans.zh_CN = public/language/zh-CN/top.json +trans.ko = public/language/ko/top.json +trans.ro = public/language/ro/top.json +trans.pt_BR = public/language/pt-BR/top.json +trans.bn = public/language/bn/top.json +trans.fr = public/language/fr/top.json +trans.et = public/language/et/top.json +trans.id = public/language/id/top.json +trans.ja = public/language/ja/top.json +trans.lv = public/language/lv/top.json +trans.ru = public/language/ru/top.json +trans.sc = public/language/sc/top.json +trans.ar = public/language/ar/top.json +trans.da = public/language/da/top.json +trans.uk = public/language/uk/top.json +trans.sv = public/language/sv/top.json +trans.th = public/language/th/top.json +trans.it = public/language/it/top.json +trans.nb = public/language/nb/top.json +trans.sr = public/language/sr/top.json +trans.tr = public/language/tr/top.json +trans.zh_TW = public/language/zh-TW/top.json +trans.es = public/language/es/top.json +trans.hr = public/language/hr/top.json + +[o:nodebb:p:nodebb:r:topic] +file_filter = public/language//topic.json +source_file = public/language/en-GB/topic.json +source_lang = en_GB +type = KEYVALUEJSON +trans.et = public/language/et/topic.json +trans.hu = public/language/hu/topic.json +trans.nb = public/language/nb/topic.json +trans.nl = public/language/nl/topic.json +trans.sk = public/language/sk/topic.json +trans.ar = public/language/ar/topic.json +trans.es = public/language/es/topic.json +trans.fr = public/language/fr/topic.json +trans.lv = public/language/lv/topic.json +trans.ms = public/language/ms/topic.json +trans.pl = public/language/pl/topic.json +trans.pt_PT = public/language/pt-PT/topic.json +trans.uk = public/language/uk/topic.json +trans.ru = public/language/ru/topic.json +trans.bg = public/language/bg/topic.json +trans.en@pirate = public/language/en-x-pirate/topic.json +trans.fa_IR = public/language/fa-IR/topic.json +trans.fi = public/language/fi/topic.json +trans.he = public/language/he/topic.json +trans.ja = public/language/ja/topic.json +trans.pt_BR = public/language/pt-BR/topic.json +trans.tr = public/language/tr/topic.json +trans.zh_TW = public/language/zh-TW/topic.json +trans.bn = public/language/bn/topic.json +trans.da = public/language/da/topic.json +trans.en_US = public/language/en-US/topic.json +trans.hr = public/language/hr/topic.json +trans.it = public/language/it/topic.json +trans.ro = public/language/ro/topic.json +trans.cs = public/language/cs/topic.json +trans.de = public/language/de/topic.json +trans.sr = public/language/sr/topic.json +trans.sv = public/language/sv/topic.json +trans.vi = public/language/vi/topic.json +trans.ko = public/language/ko/topic.json +trans.sl = public/language/sl/topic.json +trans.el = public/language/el/topic.json +trans.gl = public/language/gl/topic.json +trans.id = public/language/id/topic.json +trans.lt = public/language/lt/topic.json +trans.sq_AL = public/language/sq-AL/topic.json +trans.th = public/language/th/topic.json +trans.hy = public/language/hy/topic.json +trans.rw = public/language/rw/topic.json +trans.sc = public/language/sc/topic.json +trans.zh_CN = public/language/zh-CN/topic.json + +[o:nodebb:p:nodebb:r:unread] +file_filter = public/language//unread.json +source_file = public/language/en-GB/unread.json +source_lang = en_GB +type = KEYVALUEJSON +trans.pt_BR = public/language/pt-BR/unread.json +trans.zh_TW = public/language/zh-TW/unread.json +trans.fa_IR = public/language/fa-IR/unread.json +trans.fr = public/language/fr/unread.json +trans.es = public/language/es/unread.json +trans.it = public/language/it/unread.json +trans.ms = public/language/ms/unread.json +trans.ro = public/language/ro/unread.json +trans.de = public/language/de/unread.json +trans.en@pirate = public/language/en-x-pirate/unread.json +trans.hr = public/language/hr/unread.json +trans.hu = public/language/hu/unread.json +trans.lt = public/language/lt/unread.json +trans.ru = public/language/ru/unread.json +trans.sl = public/language/sl/unread.json +trans.th = public/language/th/unread.json +trans.bg = public/language/bg/unread.json +trans.gl = public/language/gl/unread.json +trans.uk = public/language/uk/unread.json +trans.vi = public/language/vi/unread.json +trans.ja = public/language/ja/unread.json +trans.lv = public/language/lv/unread.json +trans.nl = public/language/nl/unread.json +trans.sr = public/language/sr/unread.json +trans.zh_CN = public/language/zh-CN/unread.json +trans.hy = public/language/hy/unread.json +trans.id = public/language/id/unread.json +trans.da = public/language/da/unread.json +trans.en_US = public/language/en-US/unread.json +trans.sk = public/language/sk/unread.json +trans.bn = public/language/bn/unread.json +trans.cs = public/language/cs/unread.json +trans.nb = public/language/nb/unread.json +trans.rw = public/language/rw/unread.json +trans.sq_AL = public/language/sq-AL/unread.json +trans.tr = public/language/tr/unread.json +trans.ar = public/language/ar/unread.json +trans.el = public/language/el/unread.json +trans.he = public/language/he/unread.json +trans.pt_PT = public/language/pt-PT/unread.json +trans.et = public/language/et/unread.json +trans.fi = public/language/fi/unread.json +trans.sc = public/language/sc/unread.json +trans.sv = public/language/sv/unread.json +trans.ko = public/language/ko/unread.json +trans.pl = public/language/pl/unread.json + +[o:nodebb:p:nodebb:r:uploads] +file_filter = public/language//uploads.json +source_file = public/language/en-GB/uploads.json +source_lang = en_GB +type = KEYVALUEJSON +trans.sv = public/language/sv/uploads.json +trans.cs = public/language/cs/uploads.json +trans.el = public/language/el/uploads.json +trans.hu = public/language/hu/uploads.json +trans.hy = public/language/hy/uploads.json +trans.it = public/language/it/uploads.json +trans.tr = public/language/tr/uploads.json +trans.uk = public/language/uk/uploads.json +trans.zh_CN = public/language/zh-CN/uploads.json +trans.en@pirate = public/language/en-x-pirate/uploads.json +trans.lt = public/language/lt/uploads.json +trans.lv = public/language/lv/uploads.json +trans.pt_BR = public/language/pt-BR/uploads.json +trans.sk = public/language/sk/uploads.json +trans.bn = public/language/bn/uploads.json +trans.hr = public/language/hr/uploads.json +trans.pl = public/language/pl/uploads.json +trans.zh_TW = public/language/zh-TW/uploads.json +trans.ru = public/language/ru/uploads.json +trans.sl = public/language/sl/uploads.json +trans.sq_AL = public/language/sq-AL/uploads.json +trans.et = public/language/et/uploads.json +trans.id = public/language/id/uploads.json +trans.ms = public/language/ms/uploads.json +trans.nb = public/language/nb/uploads.json +trans.pt_PT = public/language/pt-PT/uploads.json +trans.da = public/language/da/uploads.json +trans.es = public/language/es/uploads.json +trans.fr = public/language/fr/uploads.json +trans.th = public/language/th/uploads.json +trans.ar = public/language/ar/uploads.json +trans.en_US = public/language/en-US/uploads.json +trans.fi = public/language/fi/uploads.json +trans.gl = public/language/gl/uploads.json +trans.rw = public/language/rw/uploads.json +trans.ro = public/language/ro/uploads.json +trans.sr = public/language/sr/uploads.json +trans.vi = public/language/vi/uploads.json +trans.bg = public/language/bg/uploads.json +trans.de = public/language/de/uploads.json +trans.fa_IR = public/language/fa-IR/uploads.json +trans.ja = public/language/ja/uploads.json +trans.nl = public/language/nl/uploads.json +trans.he = public/language/he/uploads.json +trans.ko = public/language/ko/uploads.json +trans.sc = public/language/sc/uploads.json + +[o:nodebb:p:nodebb:r:user] +file_filter = public/language//user.json +source_file = public/language/en-GB/user.json +source_lang = en_GB +type = KEYVALUEJSON +trans.ms = public/language/ms/user.json +trans.sr = public/language/sr/user.json +trans.lt = public/language/lt/user.json +trans.da = public/language/da/user.json +trans.it = public/language/it/user.json +trans.ru = public/language/ru/user.json +trans.sk = public/language/sk/user.json +trans.ar = public/language/ar/user.json +trans.fr = public/language/fr/user.json +trans.he = public/language/he/user.json +trans.id = public/language/id/user.json +trans.es = public/language/es/user.json +trans.cs = public/language/cs/user.json +trans.et = public/language/et/user.json +trans.pt_BR = public/language/pt-BR/user.json +trans.zh_CN = public/language/zh-CN/user.json +trans.zh_TW = public/language/zh-TW/user.json +trans.bn = public/language/bn/user.json +trans.de = public/language/de/user.json +trans.el = public/language/el/user.json +trans.en@pirate = public/language/en-x-pirate/user.json +trans.en_US = public/language/en-US/user.json +trans.fa_IR = public/language/fa-IR/user.json +trans.gl = public/language/gl/user.json +trans.pl = public/language/pl/user.json +trans.bg = public/language/bg/user.json +trans.sv = public/language/sv/user.json +trans.th = public/language/th/user.json +trans.tr = public/language/tr/user.json +trans.uk = public/language/uk/user.json +trans.vi = public/language/vi/user.json +trans.fi = public/language/fi/user.json +trans.ko = public/language/ko/user.json +trans.lv = public/language/lv/user.json +trans.pt_PT = public/language/pt-PT/user.json +trans.rw = public/language/rw/user.json +trans.sl = public/language/sl/user.json +trans.sq_AL = public/language/sq-AL/user.json +trans.hr = public/language/hr/user.json +trans.hy = public/language/hy/user.json +trans.ja = public/language/ja/user.json +trans.nb = public/language/nb/user.json +trans.nl = public/language/nl/user.json +trans.ro = public/language/ro/user.json +trans.sc = public/language/sc/user.json +trans.hu = public/language/hu/user.json + +[o:nodebb:p:nodebb:r:users] +file_filter = public/language//users.json +source_file = public/language/en-GB/users.json +source_lang = en_GB +type = KEYVALUEJSON +trans.zh_TW = public/language/zh-TW/users.json +trans.de = public/language/de/users.json +trans.en@pirate = public/language/en-x-pirate/users.json +trans.ru = public/language/ru/users.json +trans.sc = public/language/sc/users.json +trans.en_US = public/language/en-US/users.json +trans.bn = public/language/bn/users.json +trans.hy = public/language/hy/users.json +trans.ro = public/language/ro/users.json +trans.fi = public/language/fi/users.json +trans.it = public/language/it/users.json +trans.pl = public/language/pl/users.json +trans.sk = public/language/sk/users.json +trans.ar = public/language/ar/users.json +trans.bg = public/language/bg/users.json +trans.el = public/language/el/users.json +trans.fa_IR = public/language/fa-IR/users.json +trans.sq_AL = public/language/sq-AL/users.json +trans.cs = public/language/cs/users.json +trans.he = public/language/he/users.json +trans.ja = public/language/ja/users.json +trans.ko = public/language/ko/users.json +trans.nb = public/language/nb/users.json +trans.pt_PT = public/language/pt-PT/users.json +trans.sr = public/language/sr/users.json +trans.zh_CN = public/language/zh-CN/users.json +trans.da = public/language/da/users.json +trans.id = public/language/id/users.json +trans.lt = public/language/lt/users.json +trans.ms = public/language/ms/users.json +trans.nl = public/language/nl/users.json +trans.rw = public/language/rw/users.json +trans.sl = public/language/sl/users.json +trans.th = public/language/th/users.json +trans.es = public/language/es/users.json +trans.fr = public/language/fr/users.json +trans.gl = public/language/gl/users.json +trans.hr = public/language/hr/users.json +trans.uk = public/language/uk/users.json +trans.vi = public/language/vi/users.json +trans.sv = public/language/sv/users.json +trans.tr = public/language/tr/users.json +trans.et = public/language/et/users.json +trans.hu = public/language/hu/users.json +trans.lv = public/language/lv/users.json +trans.pt_BR = public/language/pt-BR/users.json + diff --git a/Dockerfile b/Dockerfile index 8a5b7ae..06e9e99 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,25 +1,25 @@ -FROM node:lts - -RUN mkdir -p /usr/src/app && \ - chown -R node:node /usr/src/app -WORKDIR /usr/src/app - -ARG NODE_ENV -ENV NODE_ENV $NODE_ENV - -COPY --chown=node:node install/package.json /usr/src/app/package.json - -USER node - -RUN npm install --only=prod && \ - npm cache clean --force - -COPY --chown=node:node . /usr/src/app - -ENV NODE_ENV=production \ - daemon=false \ - silent=false - -EXPOSE 4567 - -CMD test -n "${SETUP}" && ./nodebb setup || node ./nodebb build; node ./nodebb start +FROM node:lts + +RUN mkdir -p /usr/src/app && \ + chown -R node:node /usr/src/app +WORKDIR /usr/src/app + +ARG NODE_ENV +ENV NODE_ENV $NODE_ENV + +COPY --chown=node:node install/package.json /usr/src/app/package.json + +USER node + +RUN npm install --only=prod && \ + npm cache clean --force + +COPY --chown=node:node . /usr/src/app + +ENV NODE_ENV=production \ + daemon=false \ + silent=false + +EXPOSE 4567 + +CMD test -n "${SETUP}" && ./nodebb setup || node ./nodebb build; node ./nodebb start diff --git a/LICENSE b/LICENSE index 94a9ed0..818433e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,674 +1,674 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/build/.gitignore b/build/.gitignore index 9addbff..77e6d1d 100644 --- a/build/.gitignore +++ b/build/.gitignore @@ -1,4 +1,4 @@ -* -*/ -!export -!.gitignore +* +*/ +!export +!.gitignore diff --git a/build/export/.gitignore b/build/export/.gitignore index f8d55e0..cc90f3b 100644 --- a/build/export/.gitignore +++ b/build/export/.gitignore @@ -1,3 +1,3 @@ -. -!.gitignore +. +!.gitignore !README \ No newline at end of file diff --git a/build/export/README b/build/export/README index a901503..a1d9773 100644 --- a/build/export/README +++ b/build/export/README @@ -1,5 +1,5 @@ -This directory contains archives of user uploads that are prepared on-demand -when a user wants to retrieve a copy of their uploaded content. - -You can delete the files in here at will. They will just be regenerated if +This directory contains archives of user uploads that are prepared on-demand +when a user wants to retrieve a copy of their uploaded content. + +You can delete the files in here at will. They will just be regenerated if requested again. \ No newline at end of file diff --git a/dev.Dockerfile b/dev.Dockerfile index b023845..c5cac1e 100644 --- a/dev.Dockerfile +++ b/dev.Dockerfile @@ -1,78 +1,78 @@ -FROM node:lts AS git - -ENV USER=nodebb \ - UID=1001 \ - GID=1001 - -WORKDIR /usr/src/app/ - -RUN groupadd --gid ${GID} ${USER} \ - && useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \ - && chown -R ${USER}:${USER} /usr/src/app/ - -RUN apt-get update \ - && apt-get -y --no-install-recommends install tini - -USER ${USER} - -# Change to the git branch you want to test -RUN git clone --recurse-submodules -j8 --depth 1 https://github.com/NodeBB/NodeBB.git . - -RUN find . -mindepth 1 -maxdepth 1 -name '.*' ! -name '.' ! -name '..' -exec bash -c 'echo "Deleting {}"; rm -rf {}' \; - -FROM node:lts AS node_modules_touch - -ENV NODE_ENV=development \ - USER=nodebb \ - UID=1001 \ - GID=1001 - -WORKDIR /usr/src/app/ - -RUN corepack enable \ - && groupadd --gid ${GID} ${USER} \ - && useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \ - && chown -R ${USER}:${USER} /usr/src/app/ - -COPY --from=git --chown=${USER}:${USER} /usr/src/app/install/package.json /usr/src/app/ - -USER ${USER} - -RUN npm install \ - && rm -rf .npm - -FROM node:lts-slim AS final - -ENV NODE_ENV=development \ - DAEMON=false \ - SILENT=false \ - USER=nodebb \ - UID=1001 \ - GID=1001 - -WORKDIR /usr/src/app/ - -RUN corepack enable \ - && groupadd --gid ${GID} ${USER} \ - && useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \ - && mkdir -p /usr/src/app/logs/ /opt/config/ \ - && chown -R ${USER}:${USER} /usr/src/app/ /opt/config/ - -COPY --from=git --chown=${USER}:${USER} /usr/src/app/ /usr/src/app/install/docker/setup.json /usr/src/app/ -COPY --from=git --chown=${USER}:${USER} /usr/bin/tini /usr/src/app/install/docker/entrypoint.sh /usr/local/bin/ -COPY --from=node_modules_touch --chown=${USER}:${USER} /usr/src/app/ /usr/src/app/ -COPY --from=git --chown=${USER}:${USER} /usr/src/app/ /usr/src/app/ - -RUN chmod +x /usr/local/bin/entrypoint.sh \ - && chmod +x /usr/local/bin/tini - -# TODO: Have docker-compose use environment variables to create files like setup.json and config.json. -# COPY --from=hairyhenderson/gomplate:stable /gomplate /usr/local/bin/gomplate - -USER ${USER} - -EXPOSE 4567 - -VOLUME ["/usr/src/app/node_modules", "/usr/src/app/build", "/usr/src/app/public/uploads", "/opt/config/"] - +FROM node:lts AS git + +ENV USER=nodebb \ + UID=1001 \ + GID=1001 + +WORKDIR /usr/src/app/ + +RUN groupadd --gid ${GID} ${USER} \ + && useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \ + && chown -R ${USER}:${USER} /usr/src/app/ + +RUN apt-get update \ + && apt-get -y --no-install-recommends install tini + +USER ${USER} + +# Change to the git branch you want to test +RUN git clone --recurse-submodules -j8 --depth 1 https://github.com/NodeBB/NodeBB.git . + +RUN find . -mindepth 1 -maxdepth 1 -name '.*' ! -name '.' ! -name '..' -exec bash -c 'echo "Deleting {}"; rm -rf {}' \; + +FROM node:lts AS node_modules_touch + +ENV NODE_ENV=development \ + USER=nodebb \ + UID=1001 \ + GID=1001 + +WORKDIR /usr/src/app/ + +RUN corepack enable \ + && groupadd --gid ${GID} ${USER} \ + && useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \ + && chown -R ${USER}:${USER} /usr/src/app/ + +COPY --from=git --chown=${USER}:${USER} /usr/src/app/install/package.json /usr/src/app/ + +USER ${USER} + +RUN npm install \ + && rm -rf .npm + +FROM node:lts-slim AS final + +ENV NODE_ENV=development \ + DAEMON=false \ + SILENT=false \ + USER=nodebb \ + UID=1001 \ + GID=1001 + +WORKDIR /usr/src/app/ + +RUN corepack enable \ + && groupadd --gid ${GID} ${USER} \ + && useradd --uid ${UID} --gid ${GID} --home-dir /usr/src/app/ --shell /bin/bash ${USER} \ + && mkdir -p /usr/src/app/logs/ /opt/config/ \ + && chown -R ${USER}:${USER} /usr/src/app/ /opt/config/ + +COPY --from=git --chown=${USER}:${USER} /usr/src/app/ /usr/src/app/install/docker/setup.json /usr/src/app/ +COPY --from=git --chown=${USER}:${USER} /usr/bin/tini /usr/src/app/install/docker/entrypoint.sh /usr/local/bin/ +COPY --from=node_modules_touch --chown=${USER}:${USER} /usr/src/app/ /usr/src/app/ +COPY --from=git --chown=${USER}:${USER} /usr/src/app/ /usr/src/app/ + +RUN chmod +x /usr/local/bin/entrypoint.sh \ + && chmod +x /usr/local/bin/tini + +# TODO: Have docker-compose use environment variables to create files like setup.json and config.json. +# COPY --from=hairyhenderson/gomplate:stable /gomplate /usr/local/bin/gomplate + +USER ${USER} + +EXPOSE 4567 + +VOLUME ["/usr/src/app/node_modules", "/usr/src/app/build", "/usr/src/app/public/uploads", "/opt/config/"] + ENTRYPOINT ["tini", "--", "entrypoint.sh"] \ No newline at end of file diff --git a/docker-compose copy.yml b/docker-compose copy.yml index 637cecb..a03ce4d 100644 --- a/docker-compose copy.yml +++ b/docker-compose copy.yml @@ -1,89 +1,89 @@ -services: - nodebb: - build: . - # image: ghcr.io/nodebb/nodebb:latest - restart: unless-stopped - ports: - - '4567:4567' # comment this out if you don't want to expose NodeBB to the host, or change the first number to any port you want - volumes: - - nodebb-build:/usr/src/app/build - - nodebb-uploads:/usr/src/app/public/uploads - - nodebb-config:/opt/config - - ./install/docker/setup.json:/usr/src/app/setup.json - - mongo: - image: 'mongo:7-jammy' - restart: unless-stopped - ports: - - '27017:27017' - environment: - MONGO_INITDB_ROOT_USERNAME: nodebb - MONGO_INITDB_ROOT_PASSWORD: nodebb - MONGO_INITDB_DATABASE: nodebb - volumes: - - mongo-data:/data/db - - ./install/docker/mongodb-user-init.js:/docker-entrypoint-initdb.d/user-init.js - redis: - image: redis:8.0.1-alpine - restart: unless-stopped - command: ['redis-server', '--appendonly', 'yes', '--loglevel', 'warning'] - # command: ['redis-server', '--save', '60', '1', '--loglevel', 'warning'] # uncomment if you want to use snapshotting instead of AOF - volumes: - - redis-data:/data - profiles: - - redis - - postgres: - image: postgres:17.5-alpine - restart: unless-stopped - environment: - POSTGRES_USER: nodebb - POSTGRES_PASSWORD: nodebb - POSTGRES_DB: nodebb - volumes: - - postgres-data:/var/lib/postgresql/data - profiles: - - postgres - -volumes: - mongo-data: - driver: local - driver_opts: - o: bind - type: none - device: ./.docker/database/mongo/data - - redis-data: - driver: local - driver_opts: - o: bind - type: none - device: ./.docker/database/redis - - postgres-data: - driver: local - driver_opts: - o: bind - type: none - device: ./.docker/database/postgresql/data - - nodebb-build: - driver: local - driver_opts: - o: bind - type: none - device: ./.docker/build - - nodebb-uploads: - driver: local - driver_opts: - o: bind - type: none - device: ./.docker/public/uploads - - nodebb-config: - driver: local - driver_opts: - o: bind - type: none - device: ./.docker/config +services: + nodebb: + build: . + # image: ghcr.io/nodebb/nodebb:latest + restart: unless-stopped + ports: + - '4567:4567' # comment this out if you don't want to expose NodeBB to the host, or change the first number to any port you want + volumes: + - nodebb-build:/usr/src/app/build + - nodebb-uploads:/usr/src/app/public/uploads + - nodebb-config:/opt/config + - ./install/docker/setup.json:/usr/src/app/setup.json + + mongo: + image: 'mongo:7-jammy' + restart: unless-stopped + ports: + - '27017:27017' + environment: + MONGO_INITDB_ROOT_USERNAME: nodebb + MONGO_INITDB_ROOT_PASSWORD: nodebb + MONGO_INITDB_DATABASE: nodebb + volumes: + - mongo-data:/data/db + - ./install/docker/mongodb-user-init.js:/docker-entrypoint-initdb.d/user-init.js + redis: + image: redis:8.0.1-alpine + restart: unless-stopped + command: ['redis-server', '--appendonly', 'yes', '--loglevel', 'warning'] + # command: ['redis-server', '--save', '60', '1', '--loglevel', 'warning'] # uncomment if you want to use snapshotting instead of AOF + volumes: + - redis-data:/data + profiles: + - redis + + postgres: + image: postgres:17.5-alpine + restart: unless-stopped + environment: + POSTGRES_USER: nodebb + POSTGRES_PASSWORD: nodebb + POSTGRES_DB: nodebb + volumes: + - postgres-data:/var/lib/postgresql/data + profiles: + - postgres + +volumes: + mongo-data: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/database/mongo/data + + redis-data: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/database/redis + + postgres-data: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/database/postgresql/data + + nodebb-build: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/build + + nodebb-uploads: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/public/uploads + + nodebb-config: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/config diff --git a/docker-compose-pgsql.yml b/docker-compose-pgsql.yml index 9011d0f..119172f 100644 --- a/docker-compose-pgsql.yml +++ b/docker-compose-pgsql.yml @@ -1,70 +1,70 @@ -version: '3.8' - -services: - nodebb: - build: . - # image: ghcr.io/nodebb/nodebb:latest - restart: unless-stopped - ports: - - '4567:4567' # comment this out if you don't want to expose NodeBB to the host, or change the first number to any port you want - volumes: - - nodebb-build:/usr/src/app/build - - nodebb-uploads:/usr/src/app/public/uploads - - nodebb-config:/opt/config - - ./install/docker/setup.json:/usr/src/app/setup.json - - postgres: - image: postgres:17.5-alpine - restart: unless-stopped - environment: - POSTGRES_USER: nodebb - POSTGRES_PASSWORD: nodebb - POSTGRES_DB: nodebb - volumes: - - postgres-data:/var/lib/postgresql/data - - redis: - image: redis:8.0.1-alpine - restart: unless-stopped - command: ['redis-server', '--appendonly', 'yes', '--loglevel', 'warning'] - # command: ["redis-server", "--save", "60", "1", "--loglevel", "warning"] # uncomment if you want to use snapshotting instead of AOF - volumes: - - redis-data:/data - profiles: - - redis - -volumes: - postgres-data: - driver: local - driver_opts: - o: bind - type: none - device: ./.docker/database/postgresql/data - - redis-data: - driver: local - driver_opts: - o: bind - type: none - device: ./.docker/database/redis - - nodebb-build: - driver: local - driver_opts: - o: bind - type: none - device: ./.docker/build - - nodebb-uploads: - driver: local - driver_opts: - o: bind - type: none - device: ./.docker/public/uploads - - nodebb-config: - driver: local - driver_opts: - o: bind - type: none - device: ./.docker/config +version: '3.8' + +services: + nodebb: + build: . + # image: ghcr.io/nodebb/nodebb:latest + restart: unless-stopped + ports: + - '4567:4567' # comment this out if you don't want to expose NodeBB to the host, or change the first number to any port you want + volumes: + - nodebb-build:/usr/src/app/build + - nodebb-uploads:/usr/src/app/public/uploads + - nodebb-config:/opt/config + - ./install/docker/setup.json:/usr/src/app/setup.json + + postgres: + image: postgres:17.5-alpine + restart: unless-stopped + environment: + POSTGRES_USER: nodebb + POSTGRES_PASSWORD: nodebb + POSTGRES_DB: nodebb + volumes: + - postgres-data:/var/lib/postgresql/data + + redis: + image: redis:8.0.1-alpine + restart: unless-stopped + command: ['redis-server', '--appendonly', 'yes', '--loglevel', 'warning'] + # command: ["redis-server", "--save", "60", "1", "--loglevel", "warning"] # uncomment if you want to use snapshotting instead of AOF + volumes: + - redis-data:/data + profiles: + - redis + +volumes: + postgres-data: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/database/postgresql/data + + redis-data: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/database/redis + + nodebb-build: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/build + + nodebb-uploads: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/public/uploads + + nodebb-config: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/config diff --git a/docker-compose-redis.yml b/docker-compose-redis.yml index da31cd6..a11011b 100644 --- a/docker-compose-redis.yml +++ b/docker-compose-redis.yml @@ -1,51 +1,51 @@ -version: '3.8' - -services: - nodebb: - build: . - # image: ghcr.io/nodebb/nodebb:latest - restart: unless-stopped - ports: - - '4567:4567' # comment this out if you don't want to expose NodeBB to the host, or change the first number to any port you want - volumes: - - nodebb-build:/usr/src/app/build - - nodebb-uploads:/usr/src/app/public/uploads - - nodebb-config:/opt/config - - ./install/docker/setup.json:/usr/src/app/setup.json - - redis: - image: redis:8.0.1-alpine - restart: unless-stopped - command: ['redis-server', '--appendonly', 'yes', '--loglevel', 'warning'] - # command: ["redis-server", "--save", "60", "1", "--loglevel", "warning"] # uncomment if you want to use snapshotting instead of AOF - volumes: - - redis-data:/data - -volumes: - redis-data: - driver: local - driver_opts: - o: bind - type: none - device: ./.docker/database/redis - - nodebb-build: - driver: local - driver_opts: - o: bind - type: none - device: ./.docker/build - - nodebb-uploads: - driver: local - driver_opts: - o: bind - type: none - device: ./.docker/public/uploads - - nodebb-config: - driver: local - driver_opts: - o: bind - type: none - device: ./.docker/config +version: '3.8' + +services: + nodebb: + build: . + # image: ghcr.io/nodebb/nodebb:latest + restart: unless-stopped + ports: + - '4567:4567' # comment this out if you don't want to expose NodeBB to the host, or change the first number to any port you want + volumes: + - nodebb-build:/usr/src/app/build + - nodebb-uploads:/usr/src/app/public/uploads + - nodebb-config:/opt/config + - ./install/docker/setup.json:/usr/src/app/setup.json + + redis: + image: redis:8.0.1-alpine + restart: unless-stopped + command: ['redis-server', '--appendonly', 'yes', '--loglevel', 'warning'] + # command: ["redis-server", "--save", "60", "1", "--loglevel", "warning"] # uncomment if you want to use snapshotting instead of AOF + volumes: + - redis-data:/data + +volumes: + redis-data: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/database/redis + + nodebb-build: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/build + + nodebb-uploads: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/public/uploads + + nodebb-config: + driver: local + driver_opts: + o: bind + type: none + device: ./.docker/config diff --git a/docker-compose.yml b/docker-compose.yml index 5e382f4..5a207fa 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,24 +1,24 @@ -version: '3.5' - -services: - node: - build: . - restart: unless-stopped - depends_on: - - db - expose: - - 4567 # use a reverse proxy like Traefik - - db: - image: mongo:bionic - restart: unless-stopped - expose: - - 27017 - environment: - MONGO_INITDB_ROOT_USERNAME: root - MONGO_INITDB_ROOT_PASSWORD: root - volumes: - - mongo:/data/db - -volumes: - mongo: +version: '3.5' + +services: + node: + build: . + restart: unless-stopped + depends_on: + - db + expose: + - 4567 # use a reverse proxy like Traefik + + db: + image: mongo:bionic + restart: unless-stopped + expose: + - 27017 + environment: + MONGO_INITDB_ROOT_USERNAME: root + MONGO_INITDB_ROOT_PASSWORD: root + volumes: + - mongo:/data/db + +volumes: + mongo: diff --git a/nodebb.bat b/nodebb.bat index f7f4589..21fdb14 100644 --- a/nodebb.bat +++ b/nodebb.bat @@ -1 +1 @@ -@echo off && cd %~dp0 && node ./nodebb %* +@echo off && cd %~dp0 && node ./nodebb %* diff --git a/public/.eslintrc b/public/.eslintrc index a3ce829..c25d4c6 100644 --- a/public/.eslintrc +++ b/public/.eslintrc @@ -1,3 +1,3 @@ -{ - "extends": "nodebb/public" -} +{ + "extends": "nodebb/public" +} diff --git a/public/images/logo.svg b/public/images/logo.svg index cc1c56f..fc34b82 100644 --- a/public/images/logo.svg +++ b/public/images/logo.svg @@ -1,16 +1,16 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/public/language/en-US/error.json b/public/language/en-US/error.json index 4191fad..6fd761f 100644 --- a/public/language/en-US/error.json +++ b/public/language/en-US/error.json @@ -31,7 +31,7 @@ "invalid-path": "Invalid path", "folder-exists": "Folder exists", "invalid-pagination-value": "Invalid pagination value, must be at least %1 and at most %2", - "username-taken": "Username taken", + "username-taken": "Username taken. Maybe try %1", "email-taken": "Email taken", "email-nochange": "The email entered is the same as the email already on file.", "email-invited": "Email was already invited", diff --git a/public/openapi/components/responses/400.yaml b/public/openapi/components/responses/400.yaml index 19ad248..e7635ba 100644 --- a/public/openapi/components/responses/400.yaml +++ b/public/openapi/components/responses/400.yaml @@ -1,6 +1,6 @@ -'400': - description: Bad Request - content: - application/json: - schema: +'400': + description: Bad Request + content: + application/json: + schema: $ref: ../../components/schemas/Error.yaml#/Error \ No newline at end of file diff --git a/public/openapi/components/responses/401.yaml b/public/openapi/components/responses/401.yaml index 982e0b5..957b0e6 100644 --- a/public/openapi/components/responses/401.yaml +++ b/public/openapi/components/responses/401.yaml @@ -1,6 +1,6 @@ -'401': - description: Not Authorized - content: - application/json: - schema: +'401': + description: Not Authorized + content: + application/json: + schema: $ref: ../../components/schemas/Error.yaml#/Error \ No newline at end of file diff --git a/public/openapi/components/responses/403.yaml b/public/openapi/components/responses/403.yaml index 3fdf549..82d8be2 100644 --- a/public/openapi/components/responses/403.yaml +++ b/public/openapi/components/responses/403.yaml @@ -1,6 +1,6 @@ -'403': - description: Forbidden - content: - application/json: - schema: +'403': + description: Forbidden + content: + application/json: + schema: $ref: ../../components/schemas/Error.yaml#/Error \ No newline at end of file diff --git a/public/openapi/components/responses/404.yaml b/public/openapi/components/responses/404.yaml index f5a8a84..71c33e9 100644 --- a/public/openapi/components/responses/404.yaml +++ b/public/openapi/components/responses/404.yaml @@ -1,6 +1,6 @@ -'404': - description: Not Found - content: - application/json: - schema: +'404': + description: Not Found + content: + application/json: + schema: $ref: ../../components/schemas/Error.yaml#/Error \ No newline at end of file diff --git a/public/openapi/components/responses/426.yaml b/public/openapi/components/responses/426.yaml index 534da85..f98ef3a 100644 --- a/public/openapi/components/responses/426.yaml +++ b/public/openapi/components/responses/426.yaml @@ -1,6 +1,6 @@ -'426': - description: Upgrade Required - content: - application/json: - schema: +'426': + description: Upgrade Required + content: + application/json: + schema: $ref: ../../components/schemas/Error.yaml#/Error \ No newline at end of file diff --git a/public/openapi/components/responses/500.yaml b/public/openapi/components/responses/500.yaml index 950a79f..1c82b7f 100644 --- a/public/openapi/components/responses/500.yaml +++ b/public/openapi/components/responses/500.yaml @@ -1,6 +1,6 @@ -'500': - description: Internal Server Error - content: - application/json: - schema: +'500': + description: Internal Server Error + content: + application/json: + schema: $ref: ../../components/schemas/Error.yaml#/Error \ No newline at end of file diff --git a/public/openapi/components/schemas/Breadcrumbs.yaml b/public/openapi/components/schemas/Breadcrumbs.yaml index 986e354..8a3c2c0 100644 --- a/public/openapi/components/schemas/Breadcrumbs.yaml +++ b/public/openapi/components/schemas/Breadcrumbs.yaml @@ -1,16 +1,16 @@ -Breadcrumbs: - type: object - properties: - breadcrumbs: - type: array - items: - type: object - properties: - text: - type: string - url: - type: string - cid: - type: number - required: +Breadcrumbs: + type: object + properties: + breadcrumbs: + type: array + items: + type: object + properties: + text: + type: string + url: + type: string + cid: + type: number + required: - text \ No newline at end of file diff --git a/public/openapi/components/schemas/CategoryObject.yaml b/public/openapi/components/schemas/CategoryObject.yaml index 4d6cb0c..f811ad2 100644 --- a/public/openapi/components/schemas/CategoryObject.yaml +++ b/public/openapi/components/schemas/CategoryObject.yaml @@ -1,88 +1,88 @@ -CategoryObject: - allOf: - - type: object - properties: - cid: - type: number - description: A category identifier assigned upon category creation (this value cannot be changed) - name: - type: string - description: The category's name/title - description: - type: string - description: A variable-length description of the category (usually displayed underneath the category name) - descriptionParsed: - type: string - description: A variable-length description of the category (usually displayed underneath the category name). Unlike `description`, this value here will have been run through any parsers installed on the forum (e.g. Markdown) - icon: - type: string - description: A FontAwesome icon string - example: fa-comments-o - bgColor: - type: string - description: Theme-related, a six-character hexadecimal string representing the background colour of the category - color: - type: string - description: Theme-related, a six-character hexadecimal string representing the foreground/text colour of the category - slug: - type: string - description: An URL-safe variant of the category title. This value is automatically generated. - readOnly: true - parentCid: - type: number - description: The category identifier for the category that is the immediate ancestor of the current category - topic_count: - type: number - description: The number of topics in the category - post_count: - type: number - description: The number of posts in the category - disabled: - type: number - description: Whether or not this category is disabled. - order: - type: number - description: A number representing the category's place in the hierarchy - link: - type: string - description: If set, attempting to access the forum will go to this external link instead (theme-specific) - numRecentReplies: - type: number - description: The number of posts to render in the API response (this is mostly used at the theme level) - class: - type: string - description: Values that are appended to the `class` attribute of the category's parent/root element - imageClass: - type: string - enum: [auto, cover, contain] - description: The `background-position` of the category background image, if one is set - isSection: - type: number - minTags: - type: number - description: Minimum tags per topic in this category - maxTags: - type: number - description: Maximum tags per topic in this category - postQueue: - type: number - totalPostCount: - type: number - description: The number of posts in the category - totalTopicCount: - type: number - description: The number of topics in the category - subCategoriesPerPage: - type: number - description: The number of subcategories to display on the categories and category page - - type: object - description: Optional properties that may or may not be present (except for `cid`, which is always present, and is only here as a hack to pass validation) - properties: - cid: - type: number - description: A category identifier - backgroundImage: - type: string - description: Relative URL to the category's background image - required: +CategoryObject: + allOf: + - type: object + properties: + cid: + type: number + description: A category identifier assigned upon category creation (this value cannot be changed) + name: + type: string + description: The category's name/title + description: + type: string + description: A variable-length description of the category (usually displayed underneath the category name) + descriptionParsed: + type: string + description: A variable-length description of the category (usually displayed underneath the category name). Unlike `description`, this value here will have been run through any parsers installed on the forum (e.g. Markdown) + icon: + type: string + description: A FontAwesome icon string + example: fa-comments-o + bgColor: + type: string + description: Theme-related, a six-character hexadecimal string representing the background colour of the category + color: + type: string + description: Theme-related, a six-character hexadecimal string representing the foreground/text colour of the category + slug: + type: string + description: An URL-safe variant of the category title. This value is automatically generated. + readOnly: true + parentCid: + type: number + description: The category identifier for the category that is the immediate ancestor of the current category + topic_count: + type: number + description: The number of topics in the category + post_count: + type: number + description: The number of posts in the category + disabled: + type: number + description: Whether or not this category is disabled. + order: + type: number + description: A number representing the category's place in the hierarchy + link: + type: string + description: If set, attempting to access the forum will go to this external link instead (theme-specific) + numRecentReplies: + type: number + description: The number of posts to render in the API response (this is mostly used at the theme level) + class: + type: string + description: Values that are appended to the `class` attribute of the category's parent/root element + imageClass: + type: string + enum: [auto, cover, contain] + description: The `background-position` of the category background image, if one is set + isSection: + type: number + minTags: + type: number + description: Minimum tags per topic in this category + maxTags: + type: number + description: Maximum tags per topic in this category + postQueue: + type: number + totalPostCount: + type: number + description: The number of posts in the category + totalTopicCount: + type: number + description: The number of topics in the category + subCategoriesPerPage: + type: number + description: The number of subcategories to display on the categories and category page + - type: object + description: Optional properties that may or may not be present (except for `cid`, which is always present, and is only here as a hack to pass validation) + properties: + cid: + type: number + description: A category identifier + backgroundImage: + type: string + description: Relative URL to the category's background image + required: - cid \ No newline at end of file diff --git a/public/openapi/components/schemas/Chats.yaml b/public/openapi/components/schemas/Chats.yaml index 91c41f7..b0c25ad 100644 --- a/public/openapi/components/schemas/Chats.yaml +++ b/public/openapi/components/schemas/Chats.yaml @@ -1,191 +1,191 @@ -RoomObject: - type: object - properties: - owner: - type: number - description: the uid of the chat room owner (usually the user who created the room initially) - roomId: - type: number - description: unique identifier for the chat room - roomName: - type: string - groupChat: - type: boolean - description: whether the chat room is a group chat or not -MessageObject: - type: object - properties: - content: - type: string - description: A chat message's content, parsed like a post (so probably outputs html) - timestamp: - type: number - fromuid: - type: number - roomId: - type: number - deleted: - type: boolean - system: - type: boolean - edited: - type: number - timestampISO: - type: string - editedISO: - type: string - messageId: - type: number - fromUser: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - example: Dragon Fruit - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces removed, etc.) - example: dragon-fruit - picture: - type: string - nullable: true - description: A URL pointing to a picture to be used as the user's avatar - example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80' - status: - type: string - enum: - - online - - offline - - dnd - - away - banned: - type: boolean - description: Whether a user is banned or not - example: false - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - example: Dragon Fruit - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users - without an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's - auto-generated icon - example: "#f44336" - banned_until_readable: - type: string - description: An ISO 8601 formatted date string representing the moment a ban will be lifted, or the words "Not Banned" - example: Not Banned - deleted: - type: boolean - self: - type: number - newSet: - type: boolean - cleanedContent: - type: string -RoomUserList: - type: object - properties: - users: - type: array - items: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - picture: - nullable: true - type: string - status: - type: string - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users - without an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's - auto-generated icon - example: "#f44336" - isOwner: - type: boolean - canKick: - type: boolean -RoomObjectFull: - # Messaging.loadRoom - allOf: - - $ref: '#/RoomObject' - - $ref: '#/MessageObject' - - type: object - properties: - isOwner: - type: boolean - users: - type: array - items: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - picture: - nullable: true - type: string - status: - type: string - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users - without an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's - auto-generated icon - example: "#f44336" - isOwner: - type: boolean - canReply: - type: boolean - groupChat: - type: boolean - usernames: - type: string - description: User-friendly depiction of the users within the chat room - maximumUsersInChatRoom: - type: number - maximumChatMessageLength: - type: number - showUserInput: - type: boolean - isAdminOrGlobalMod: +RoomObject: + type: object + properties: + owner: + type: number + description: the uid of the chat room owner (usually the user who created the room initially) + roomId: + type: number + description: unique identifier for the chat room + roomName: + type: string + groupChat: + type: boolean + description: whether the chat room is a group chat or not +MessageObject: + type: object + properties: + content: + type: string + description: A chat message's content, parsed like a post (so probably outputs html) + timestamp: + type: number + fromuid: + type: number + roomId: + type: number + deleted: + type: boolean + system: + type: boolean + edited: + type: number + timestampISO: + type: string + editedISO: + type: string + messageId: + type: number + fromUser: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + example: Dragon Fruit + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces removed, etc.) + example: dragon-fruit + picture: + type: string + nullable: true + description: A URL pointing to a picture to be used as the user's avatar + example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80' + status: + type: string + enum: + - online + - offline + - dnd + - away + banned: + type: boolean + description: Whether a user is banned or not + example: false + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + example: Dragon Fruit + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users + without an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's + auto-generated icon + example: "#f44336" + banned_until_readable: + type: string + description: An ISO 8601 formatted date string representing the moment a ban will be lifted, or the words "Not Banned" + example: Not Banned + deleted: + type: boolean + self: + type: number + newSet: + type: boolean + cleanedContent: + type: string +RoomUserList: + type: object + properties: + users: + type: array + items: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + picture: + nullable: true + type: string + status: + type: string + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users + without an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's + auto-generated icon + example: "#f44336" + isOwner: + type: boolean + canKick: + type: boolean +RoomObjectFull: + # Messaging.loadRoom + allOf: + - $ref: '#/RoomObject' + - $ref: '#/MessageObject' + - type: object + properties: + isOwner: + type: boolean + users: + type: array + items: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + picture: + nullable: true + type: string + status: + type: string + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users + without an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's + auto-generated icon + example: "#f44336" + isOwner: + type: boolean + canReply: + type: boolean + groupChat: + type: boolean + usernames: + type: string + description: User-friendly depiction of the users within the chat room + maximumUsersInChatRoom: + type: number + maximumChatMessageLength: + type: number + showUserInput: + type: boolean + isAdminOrGlobalMod: type: boolean \ No newline at end of file diff --git a/public/openapi/components/schemas/CommonProps.yaml b/public/openapi/components/schemas/CommonProps.yaml index 8428791..044e476 100644 --- a/public/openapi/components/schemas/CommonProps.yaml +++ b/public/openapi/components/schemas/CommonProps.yaml @@ -1,81 +1,81 @@ -CommonProps: - type: object - properties: - loggedIn: - type: boolean - description: True if user is logged in, false otherwise - relative_path: - type: string - description: | - If NodeBB is installed in a subfolder this becomes the path to the forum. For example if your forum url is - `example.org/community` then relative_path will be `/community`. If your forum url is `example.com` then relative path will be an empty string. - template: - type: object - properties: - name: - type: string - description: The path to the template, which acts as a unique name - example: admin/settings/general - additionalProperties: - description: There will be one additional property added to all routes here. It is a boolean value whose key is the path to the current template. It is used on the client-side to verify the current page inside of a conditional (e.g. `if (ajaxify.data.template.topic)` to ensure a script is run only on the topic page) - type: boolean - enum: [true] - url: - type: string - description: Base url of the current page, does not include query params - bodyClass: - type: string - description: The css class string that is appended to the body element - _header: - type: object - description: List of meta and link tags that are added to the head element - properties: - tags: - type: object - properties: - meta: - type: array - items: - type: object - properties: - name: - type: string - content: - type: string - noEscape: - type: boolean - property: - type: string - required: - - content - link: - type: array - items: - type: object - properties: - rel: - type: string - type: - type: string - href: - type: string - title: - type: string - sizes: - type: string - as: - type: string - required: - - rel - - href - widgets: - type: object - description: Each widget area will have its own property in this object - additionalProperties: - type: array - description: A collection of HTML snippets that are appended to each widget area - items: - type: object - properties: - html: +CommonProps: + type: object + properties: + loggedIn: + type: boolean + description: True if user is logged in, false otherwise + relative_path: + type: string + description: | + If NodeBB is installed in a subfolder this becomes the path to the forum. For example if your forum url is + `example.org/community` then relative_path will be `/community`. If your forum url is `example.com` then relative path will be an empty string. + template: + type: object + properties: + name: + type: string + description: The path to the template, which acts as a unique name + example: admin/settings/general + additionalProperties: + description: There will be one additional property added to all routes here. It is a boolean value whose key is the path to the current template. It is used on the client-side to verify the current page inside of a conditional (e.g. `if (ajaxify.data.template.topic)` to ensure a script is run only on the topic page) + type: boolean + enum: [true] + url: + type: string + description: Base url of the current page, does not include query params + bodyClass: + type: string + description: The css class string that is appended to the body element + _header: + type: object + description: List of meta and link tags that are added to the head element + properties: + tags: + type: object + properties: + meta: + type: array + items: + type: object + properties: + name: + type: string + content: + type: string + noEscape: + type: boolean + property: + type: string + required: + - content + link: + type: array + items: + type: object + properties: + rel: + type: string + type: + type: string + href: + type: string + title: + type: string + sizes: + type: string + as: + type: string + required: + - rel + - href + widgets: + type: object + description: Each widget area will have its own property in this object + additionalProperties: + type: array + description: A collection of HTML snippets that are appended to each widget area + items: + type: object + properties: + html: type: string \ No newline at end of file diff --git a/public/openapi/components/schemas/Error.yaml b/public/openapi/components/schemas/Error.yaml index f6b3a54..0526b4c 100644 --- a/public/openapi/components/schemas/Error.yaml +++ b/public/openapi/components/schemas/Error.yaml @@ -1,12 +1,12 @@ -Error: - type: object - properties: - status: - type: object - properties: - code: - type: string - message: - type: string - response: +Error: + type: object + properties: + status: + type: object + properties: + code: + type: string + message: + type: string + response: type: object \ No newline at end of file diff --git a/public/openapi/components/schemas/FlagObject.yaml b/public/openapi/components/schemas/FlagObject.yaml index 388ae7f..7db76ad 100644 --- a/public/openapi/components/schemas/FlagObject.yaml +++ b/public/openapi/components/schemas/FlagObject.yaml @@ -1,184 +1,184 @@ -FlagObject: - description: The resulting object of a call to `Flags.get()` - allOf: - - type: object - properties: - state: - type: string - flagId: - type: number - type: - type: string - targetId: - type: number - targetUid: - type: number - datetime: - type: number - datetimeISO: - type: string - target_readable: - type: string - target: - type: object - properties: {} - additionalProperties: - description: Properties change depending on the target type (user, post, etc.) - assignee: - type: number - nullable: true - reports: - type: array - items: - type: object - properties: - value: - type: string - timestamp: - type: number - timestampISO: - type: string - reporter: - type: object - properties: - username: - type: string - description: A friendly name for a given user account - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - nullable: true - reputation: - type: number - uid: - type: number - description: A user identifier - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without an - avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with `icon:text` for - the user's auto-generated icon - example: "#f44336" - - $ref: '#/FlagHistoryObject' - - $ref: '#/FlagNotesObject' -FlagHistoryObject: - type: object - properties: - history: - type: array - nullable: true - items: - type: object - properties: - uid: - type: number - description: A user identifier - fields: - type: object - additionalProperties: {} - meta: - type: array - items: - type: object - properties: - key: - type: string - value: - type: string - labelClass: - type: string - enum: ['default', 'primary', 'success', 'info', 'danger'] - required: - - key - datetime: - type: number - datetimeISO: - type: string - user: - type: object - properties: - username: - type: string - description: A friendly name for a given user account - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - nullable: true - uid: - type: number - description: A user identifier - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without - an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's auto-generated - icon - example: "#f44336" - required: - - uid - - datetime - - datetimeISO - - user -FlagNotesObject: - type: object - properties: - notes: - type: array - items: - type: object - properties: - uid: - type: number - content: - type: string - datetime: - type: number - datetimeISO: - type: string - user: - type: object - properties: - username: - type: string - description: A friendly name for a given user account - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - type: string - uid: - type: number - description: A user identifier - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without - an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's auto-generated - icon +FlagObject: + description: The resulting object of a call to `Flags.get()` + allOf: + - type: object + properties: + state: + type: string + flagId: + type: number + type: + type: string + targetId: + type: number + targetUid: + type: number + datetime: + type: number + datetimeISO: + type: string + target_readable: + type: string + target: + type: object + properties: {} + additionalProperties: + description: Properties change depending on the target type (user, post, etc.) + assignee: + type: number + nullable: true + reports: + type: array + items: + type: object + properties: + value: + type: string + timestamp: + type: number + timestampISO: + type: string + reporter: + type: object + properties: + username: + type: string + description: A friendly name for a given user account + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + nullable: true + reputation: + type: number + uid: + type: number + description: A user identifier + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without an + avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with `icon:text` for + the user's auto-generated icon + example: "#f44336" + - $ref: '#/FlagHistoryObject' + - $ref: '#/FlagNotesObject' +FlagHistoryObject: + type: object + properties: + history: + type: array + nullable: true + items: + type: object + properties: + uid: + type: number + description: A user identifier + fields: + type: object + additionalProperties: {} + meta: + type: array + items: + type: object + properties: + key: + type: string + value: + type: string + labelClass: + type: string + enum: ['default', 'primary', 'success', 'info', 'danger'] + required: + - key + datetime: + type: number + datetimeISO: + type: string + user: + type: object + properties: + username: + type: string + description: A friendly name for a given user account + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + nullable: true + uid: + type: number + description: A user identifier + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without + an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's auto-generated + icon + example: "#f44336" + required: + - uid + - datetime + - datetimeISO + - user +FlagNotesObject: + type: object + properties: + notes: + type: array + items: + type: object + properties: + uid: + type: number + content: + type: string + datetime: + type: number + datetimeISO: + type: string + user: + type: object + properties: + username: + type: string + description: A friendly name for a given user account + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + type: string + uid: + type: number + description: A user identifier + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without + an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's auto-generated + icon example: "#f44336" \ No newline at end of file diff --git a/public/openapi/components/schemas/GroupObject.yaml b/public/openapi/components/schemas/GroupObject.yaml index c1b2847..cf680b8 100644 --- a/public/openapi/components/schemas/GroupObject.yaml +++ b/public/openapi/components/schemas/GroupObject.yaml @@ -1,153 +1,153 @@ -GroupFullObject: - type: object - description: The response from an internal call to `Groups.get()` - properties: - name: - type: string - description: The group name - slug: - type: string - description: URL-safe slug of the group name - createtime: - type: number - description: UNIX timestamp of the group's creation - userTitle: - type: number - description: Label text for the user badge - userTitleEscaped: - type: number - description: Same as userTitle but with translation tokens escaped, used to display raw userTitle in group management - userTitleEnabled: - type: number - description: - type: string - description: The group description - memberCount: - type: number - hidden: - type: number - system: - type: number - private: - type: number - disableJoinRequests: - type: number - disableLeave: - type: number - nameEncoded: - type: string - displayName: - type: string - description: A custom override of the group's name, a friendly name - labelColor: - type: string - description: A six-character hexadecimal colour code - textColor: - type: string - description: A six-character hexadecimal colour code - memberPostCids: - type: string - memberPostCidsArray: - type: array - items: - type: number - example: [1, 2, 3] - icon: - type: string - description: A FontAwesome icon string - createtimeISO: - type: string - description: "`createtime` rendered as an ISO 8601 format" - cover:thumb:url: - type: string - cover:url: - type: string - cover:position: - type: string - descriptionParsed: - type: string - members: - type: array - items: - $ref: UserObject.yaml#/UserObjectSlim - membersNextStart: - type: number - pending: - type: array - invited: - type: array - isMember: - type: boolean - isPending: - type: boolean - isInvited: - type: boolean - isOwner: - type: boolean - nullable: true -GroupDataObject: - type: object - description: The response from an internal call to `Groups.getGroupsFields(, [])` with **explicitly** no fields passed in - properties: - name: - type: string - description: The group name - slug: - type: string - description: URL-safe slug of the group name - createtime: - type: number - description: UNIX timestamp of the group's creation - userTitle: - type: number - description: Label text for the user badge - userTitleEscaped: - type: number - description: Same as userTitle but with translation tokens escaped, used to display raw userTitle in group management - userTitleEnabled: - type: number - description: - type: string - description: The group description - memberCount: - type: number - hidden: - type: number - system: - type: number - private: - type: number - disableJoinRequests: - type: number - disableLeave: - type: number - cover:url: - type: string - cover:thumb:url: - type: string - nameEncoded: - type: string - displayName: - type: string - description: A custom override of the group's name, a friendly name - labelColor: - type: string - description: A six-character hexadecimal colour code - textColor: - type: string - description: A six-character hexadecimal colour code - icon: - type: string - description: A FontAwesome icon string - createtimeISO: - type: string - description: "`createtime` rendered as an ISO 8601 format" - cover:position: - type: string - memberPostCids: - type: string - memberPostCidsArray: - type: array - items: - type: number +GroupFullObject: + type: object + description: The response from an internal call to `Groups.get()` + properties: + name: + type: string + description: The group name + slug: + type: string + description: URL-safe slug of the group name + createtime: + type: number + description: UNIX timestamp of the group's creation + userTitle: + type: number + description: Label text for the user badge + userTitleEscaped: + type: number + description: Same as userTitle but with translation tokens escaped, used to display raw userTitle in group management + userTitleEnabled: + type: number + description: + type: string + description: The group description + memberCount: + type: number + hidden: + type: number + system: + type: number + private: + type: number + disableJoinRequests: + type: number + disableLeave: + type: number + nameEncoded: + type: string + displayName: + type: string + description: A custom override of the group's name, a friendly name + labelColor: + type: string + description: A six-character hexadecimal colour code + textColor: + type: string + description: A six-character hexadecimal colour code + memberPostCids: + type: string + memberPostCidsArray: + type: array + items: + type: number + example: [1, 2, 3] + icon: + type: string + description: A FontAwesome icon string + createtimeISO: + type: string + description: "`createtime` rendered as an ISO 8601 format" + cover:thumb:url: + type: string + cover:url: + type: string + cover:position: + type: string + descriptionParsed: + type: string + members: + type: array + items: + $ref: UserObject.yaml#/UserObjectSlim + membersNextStart: + type: number + pending: + type: array + invited: + type: array + isMember: + type: boolean + isPending: + type: boolean + isInvited: + type: boolean + isOwner: + type: boolean + nullable: true +GroupDataObject: + type: object + description: The response from an internal call to `Groups.getGroupsFields(, [])` with **explicitly** no fields passed in + properties: + name: + type: string + description: The group name + slug: + type: string + description: URL-safe slug of the group name + createtime: + type: number + description: UNIX timestamp of the group's creation + userTitle: + type: number + description: Label text for the user badge + userTitleEscaped: + type: number + description: Same as userTitle but with translation tokens escaped, used to display raw userTitle in group management + userTitleEnabled: + type: number + description: + type: string + description: The group description + memberCount: + type: number + hidden: + type: number + system: + type: number + private: + type: number + disableJoinRequests: + type: number + disableLeave: + type: number + cover:url: + type: string + cover:thumb:url: + type: string + nameEncoded: + type: string + displayName: + type: string + description: A custom override of the group's name, a friendly name + labelColor: + type: string + description: A six-character hexadecimal colour code + textColor: + type: string + description: A six-character hexadecimal colour code + icon: + type: string + description: A FontAwesome icon string + createtimeISO: + type: string + description: "`createtime` rendered as an ISO 8601 format" + cover:position: + type: string + memberPostCids: + type: string + memberPostCidsArray: + type: array + items: + type: number example: [1, 2, 3] \ No newline at end of file diff --git a/public/openapi/components/schemas/Pagination.yaml b/public/openapi/components/schemas/Pagination.yaml index 290eb95..6a221cc 100644 --- a/public/openapi/components/schemas/Pagination.yaml +++ b/public/openapi/components/schemas/Pagination.yaml @@ -1,64 +1,64 @@ -Pagination: - type: object - properties: - pagination: - type: object - properties: - prev: - type: object - properties: - page: - type: number - active: - type: boolean - next: - type: object - properties: - page: - type: number - active: - type: boolean - first: - type: object - properties: - page: - type: number - active: - type: boolean - last: - type: object - properties: - page: - type: number - active: - type: boolean - rel: - type: array - description: A collection of objects used to build the link tags pointing to adjacent pages, if any. - items: - type: object - properties: - rel: - type: string - enum: [prev, next] - href: - type: string - description: A query string that points to the previous or next page - pages: - type: array - items: - type: object - properties: - page: - type: number - description: The current page - active: - type: boolean - description: If the page noted in this array is the current page - qs: - type: string - description: A query string that points to the page noted in this array - currentPage: - type: number - pageCount: +Pagination: + type: object + properties: + pagination: + type: object + properties: + prev: + type: object + properties: + page: + type: number + active: + type: boolean + next: + type: object + properties: + page: + type: number + active: + type: boolean + first: + type: object + properties: + page: + type: number + active: + type: boolean + last: + type: object + properties: + page: + type: number + active: + type: boolean + rel: + type: array + description: A collection of objects used to build the link tags pointing to adjacent pages, if any. + items: + type: object + properties: + rel: + type: string + enum: [prev, next] + href: + type: string + description: A query string that points to the previous or next page + pages: + type: array + items: + type: object + properties: + page: + type: number + description: The current page + active: + type: boolean + description: If the page noted in this array is the current page + qs: + type: string + description: A query string that points to the page noted in this array + currentPage: + type: number + pageCount: type: number \ No newline at end of file diff --git a/public/openapi/components/schemas/PostObject.yaml b/public/openapi/components/schemas/PostObject.yaml index ea91579..c8eed34 100644 --- a/public/openapi/components/schemas/PostObject.yaml +++ b/public/openapi/components/schemas/PostObject.yaml @@ -1,142 +1,142 @@ -PostObject: - description: A single post in the array returned from `Posts.getPostSummaryByPids` - type: object - properties: - pid: - type: number - tid: - type: number - description: A topic identifier - content: - type: string - uid: - type: number - description: A user identifier - timestamp: - type: number - deleted: - type: boolean - upvotes: - type: number - downvotes: - type: number - votes: - type: number - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - user: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - type: string - nullable: true - status: - type: string - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without - an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's auto-generated - icon - example: "#f44336" - topic: - type: object - properties: - uid: - type: number - description: A user identifier - tid: - type: number - description: A topic identifier - title: - type: string - cid: - type: number - description: A category identifier - slug: - type: string - deleted: - type: number - scheduled: - type: number - timestamp: - type: number - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - postcount: - type: number - mainPid: - type: number - description: The post id of the first post in this topic (also called the - "original post") - teaserPid: - type: number - description: The post id of the teaser (the most recent post, depending on settings) - nullable: true - titleRaw: - type: string - oldTitle: - type: string - isMainPost: - type: boolean - renamed: - type: boolean - tags: - type: array - items: - $ref: ../../components/schemas/TagObject.yaml#/TagObject - required: - - uid - - tid - - cid - - title - - slug - category: - type: object - properties: - cid: - type: number - description: A category identifier - name: - type: string - icon: - type: string - slug: - type: string - parentCid: - type: number - description: The category identifier for the category that is the immediate - ancestor of the current category - bgColor: - type: string - color: - type: string - backgroundImage: - nullable: true - imageClass: - nullable: true - type: string - isMainPost: - type: boolean - replies: +PostObject: + description: A single post in the array returned from `Posts.getPostSummaryByPids` + type: object + properties: + pid: + type: number + tid: + type: number + description: A topic identifier + content: + type: string + uid: + type: number + description: A user identifier + timestamp: + type: number + deleted: + type: boolean + upvotes: + type: number + downvotes: + type: number + votes: + type: number + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + user: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + type: string + nullable: true + status: + type: string + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without + an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's auto-generated + icon + example: "#f44336" + topic: + type: object + properties: + uid: + type: number + description: A user identifier + tid: + type: number + description: A topic identifier + title: + type: string + cid: + type: number + description: A category identifier + slug: + type: string + deleted: + type: number + scheduled: + type: number + timestamp: + type: number + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + postcount: + type: number + mainPid: + type: number + description: The post id of the first post in this topic (also called the + "original post") + teaserPid: + type: number + description: The post id of the teaser (the most recent post, depending on settings) + nullable: true + titleRaw: + type: string + oldTitle: + type: string + isMainPost: + type: boolean + renamed: + type: boolean + tags: + type: array + items: + $ref: ../../components/schemas/TagObject.yaml#/TagObject + required: + - uid + - tid + - cid + - title + - slug + category: + type: object + properties: + cid: + type: number + description: A category identifier + name: + type: string + icon: + type: string + slug: + type: string + parentCid: + type: number + description: The category identifier for the category that is the immediate + ancestor of the current category + bgColor: + type: string + color: + type: string + backgroundImage: + nullable: true + imageClass: + nullable: true + type: string + isMainPost: + type: boolean + replies: type: number \ No newline at end of file diff --git a/public/openapi/components/schemas/PostsObject.yaml b/public/openapi/components/schemas/PostsObject.yaml index b43d965..a3265a0 100644 --- a/public/openapi/components/schemas/PostsObject.yaml +++ b/public/openapi/components/schemas/PostsObject.yaml @@ -1,5 +1,5 @@ -PostsObject: - description: One of the objects in the array returned from `Posts.getPostSummaryByPids` - type: array - items: +PostsObject: + description: One of the objects in the array returned from `Posts.getPostSummaryByPids` + type: array + items: $ref: ./PostObject.yaml#/PostObject \ No newline at end of file diff --git a/public/openapi/components/schemas/SettingsObj.yaml b/public/openapi/components/schemas/SettingsObj.yaml index eb2362b..87acab8 100644 --- a/public/openapi/components/schemas/SettingsObj.yaml +++ b/public/openapi/components/schemas/SettingsObj.yaml @@ -1,152 +1,152 @@ -Settings: - type: object - properties: - showemail: - type: boolean - description: Show user email in profile page - usePagination: - type: boolean - description: Toggles between pagination (when enabled), or infinite scrolling (when disabled) - topicsPerPage: - type: number - description: Number of topics displayed on a category page - postsPerPage: - type: number - description: Number of posts displayed on a topic page - topicPostSort: - type: string - description: Default sorting strategy of the posts in of a topic - openOutgoingLinksInNewTab: - type: boolean - description: Whether to automatically open all external links in a new tab - dailyDigestFreq: - type: string - description: How often to receive the scheduled digest from this forum - showfullname: - type: boolean - description: Show user full name in profile page - followTopicsOnCreate: - type: boolean - description: Automatically be notified of new posts in a topic, when you create a topic - followTopicsOnReply: - type: boolean - description: Automatically be notified of new posts in a topic, when you reply to that topic - restrictChat: - type: boolean - description: Do not allow other users to start chats with you (or add you to other chat rooms) - topicSearchEnabled: - type: boolean - description: Enable keyword searching within topics - updateUrlWithPostIndex: - type: boolean - description: Update url with post index while browsing topics - categoryTopicSort: - type: string - description: Default sorting strategy of the topics in a category - userLang: - type: string - description: Override the system localised language in favour of the language defined here - bootswatchSkin: - type: string - description: Set a custom bootswatch skin - homePageRoute: - type: string - description: Override the behaviour of the home page route (`/`) to go to a specific page - scrollToMyPost: - type: boolean - description: Automatically center the viewport to you new post after posting - notificationType_new-chat: - type: string - description: Notification type for new chat messages - notificationType_new-group-chat: - type: string - description: Notification type for new group chat messages - notificationType_new-reply: - type: string - description: Notification type for new topic replies - notificationType_post-edit: - type: string - description: Notification type for post edits - sendChatNotifications: - nullable: true - sendPostNotifications: - nullable: true - notificationType_upvote: - type: string - description: Notification type for upvotes - notificationType_new-topic: - type: string - description: Notification type for new topics - notificationType_follow: - type: string - description: Notification type for another user following you - notificationType_group-invite: - type: string - description: Notification type for group invitations - notificationType_group-leave: - type: string - description: Notification type for when users leave your group - upvoteNotifFreq: - type: string - description: How often to notify you when your posts are upvoted - notificationType_mention: - type: string - description: Notification type for mentions in a post - acpLang: - type: string - description: Language localisation for the admin control panel - notificationType_new-register: - type: string - description: Notification type for new registration in queue - notificationType_post-queue: - type: string - description: Notification type for new post in post queue - notificationType_new-post-flag: - type: string - description: Notification type for post flagged - notificationType_new-user-flag: - type: string - description: Notification type for user flagged - categoryWatchState: - type: string - description: Default watch state for categories - notificationType_group-request-membership: - type: string - description: Notification type for group membership requests - uid: - type: number - description: A user identifier - required: - - showemail - - usePagination - - topicsPerPage - - postsPerPage - - topicPostSort - - openOutgoingLinksInNewTab - - dailyDigestFreq - - showfullname - - followTopicsOnCreate - - followTopicsOnReply - - restrictChat - - topicSearchEnabled - - categoryTopicSort - - userLang - - bootswatchSkin - - homePageRoute - - scrollToMyPost - - notificationType_new-chat - - notificationType_new-reply - - notificationType_upvote - - notificationType_new-topic - - notificationType_follow - - notificationType_group-invite - - notificationType_group-leave - - upvoteNotifFreq - - acpLang - - notificationType_new-register - - notificationType_post-queue - - notificationType_new-post-flag - - notificationType_new-user-flag - - categoryWatchState - - notificationType_group-request-membership +Settings: + type: object + properties: + showemail: + type: boolean + description: Show user email in profile page + usePagination: + type: boolean + description: Toggles between pagination (when enabled), or infinite scrolling (when disabled) + topicsPerPage: + type: number + description: Number of topics displayed on a category page + postsPerPage: + type: number + description: Number of posts displayed on a topic page + topicPostSort: + type: string + description: Default sorting strategy of the posts in of a topic + openOutgoingLinksInNewTab: + type: boolean + description: Whether to automatically open all external links in a new tab + dailyDigestFreq: + type: string + description: How often to receive the scheduled digest from this forum + showfullname: + type: boolean + description: Show user full name in profile page + followTopicsOnCreate: + type: boolean + description: Automatically be notified of new posts in a topic, when you create a topic + followTopicsOnReply: + type: boolean + description: Automatically be notified of new posts in a topic, when you reply to that topic + restrictChat: + type: boolean + description: Do not allow other users to start chats with you (or add you to other chat rooms) + topicSearchEnabled: + type: boolean + description: Enable keyword searching within topics + updateUrlWithPostIndex: + type: boolean + description: Update url with post index while browsing topics + categoryTopicSort: + type: string + description: Default sorting strategy of the topics in a category + userLang: + type: string + description: Override the system localised language in favour of the language defined here + bootswatchSkin: + type: string + description: Set a custom bootswatch skin + homePageRoute: + type: string + description: Override the behaviour of the home page route (`/`) to go to a specific page + scrollToMyPost: + type: boolean + description: Automatically center the viewport to you new post after posting + notificationType_new-chat: + type: string + description: Notification type for new chat messages + notificationType_new-group-chat: + type: string + description: Notification type for new group chat messages + notificationType_new-reply: + type: string + description: Notification type for new topic replies + notificationType_post-edit: + type: string + description: Notification type for post edits + sendChatNotifications: + nullable: true + sendPostNotifications: + nullable: true + notificationType_upvote: + type: string + description: Notification type for upvotes + notificationType_new-topic: + type: string + description: Notification type for new topics + notificationType_follow: + type: string + description: Notification type for another user following you + notificationType_group-invite: + type: string + description: Notification type for group invitations + notificationType_group-leave: + type: string + description: Notification type for when users leave your group + upvoteNotifFreq: + type: string + description: How often to notify you when your posts are upvoted + notificationType_mention: + type: string + description: Notification type for mentions in a post + acpLang: + type: string + description: Language localisation for the admin control panel + notificationType_new-register: + type: string + description: Notification type for new registration in queue + notificationType_post-queue: + type: string + description: Notification type for new post in post queue + notificationType_new-post-flag: + type: string + description: Notification type for post flagged + notificationType_new-user-flag: + type: string + description: Notification type for user flagged + categoryWatchState: + type: string + description: Default watch state for categories + notificationType_group-request-membership: + type: string + description: Notification type for group membership requests + uid: + type: number + description: A user identifier + required: + - showemail + - usePagination + - topicsPerPage + - postsPerPage + - topicPostSort + - openOutgoingLinksInNewTab + - dailyDigestFreq + - showfullname + - followTopicsOnCreate + - followTopicsOnReply + - restrictChat + - topicSearchEnabled + - categoryTopicSort + - userLang + - bootswatchSkin + - homePageRoute + - scrollToMyPost + - notificationType_new-chat + - notificationType_new-reply + - notificationType_upvote + - notificationType_new-topic + - notificationType_follow + - notificationType_group-invite + - notificationType_group-leave + - upvoteNotifFreq + - acpLang + - notificationType_new-register + - notificationType_post-queue + - notificationType_new-post-flag + - notificationType_new-user-flag + - categoryWatchState + - notificationType_group-request-membership - uid \ No newline at end of file diff --git a/public/openapi/components/schemas/Status.yaml b/public/openapi/components/schemas/Status.yaml index 07d32b2..645c0e7 100644 --- a/public/openapi/components/schemas/Status.yaml +++ b/public/openapi/components/schemas/Status.yaml @@ -1,9 +1,9 @@ -Status: - type: object - properties: - code: - type: string - example: ok - message: - type: string +Status: + type: object + properties: + code: + type: string + example: ok + message: + type: string example: OK \ No newline at end of file diff --git a/public/openapi/components/schemas/TagObject.yaml b/public/openapi/components/schemas/TagObject.yaml index 2b72c5a..1c8e7f5 100644 --- a/public/openapi/components/schemas/TagObject.yaml +++ b/public/openapi/components/schemas/TagObject.yaml @@ -1,19 +1,19 @@ -TagObject: - type: object - properties: - value: - type: string - description: The tag name - score: - type: number - description: The number of topics containing this tag - valueEscaped: - type: string - color: - type: string - description: Six-character hexadecimal string (with `#` prepended) - example: "#ff0000" - bgColor: - type: string - description: Six-character hexadecimal string (with `#` prepended) +TagObject: + type: object + properties: + value: + type: string + description: The tag name + score: + type: number + description: The number of topics containing this tag + valueEscaped: + type: string + color: + type: string + description: Six-character hexadecimal string (with `#` prepended) + example: "#ff0000" + bgColor: + type: string + description: Six-character hexadecimal string (with `#` prepended) example: "#ff0000" \ No newline at end of file diff --git a/public/openapi/components/schemas/TopicObject.yaml b/public/openapi/components/schemas/TopicObject.yaml index 64de19a..ac7df04 100644 --- a/public/openapi/components/schemas/TopicObject.yaml +++ b/public/openapi/components/schemas/TopicObject.yaml @@ -1,281 +1,281 @@ -TopicObject: - allOf: - - $ref: '#/TopicObjectSlim' - - type: object - properties: - lastposttime: - type: number - category: - type: object - properties: - cid: - type: number - description: A category identifier - name: - type: string - slug: - type: string - icon: - type: string - backgroundImage: - nullable: true - type: string - imageClass: - nullable: true - type: string - bgColor: - type: string - color: - type: string - disabled: - type: number - user: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - fullname: - type: string - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - reputation: - type: number - postcount: - type: number - picture: - type: string - nullable: true - signature: - type: string - nullable: true - banned: - type: number - status: - type: string - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without - an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's auto-generated - icon - example: "#f44336" - banned_until_readable: - type: string - required: - - uid - - username - - userslug - - reputation - - postcount - - picture - - signature - - banned - - status - - icon:text - - icon:bgColor - - banned_until_readable - teaser: - type: object - properties: - pid: - type: number - uid: - type: number - description: A user identifier - timestamp: - type: number - tid: - type: number - description: A topic identifier - content: - type: string - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - user: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - nullable: true - type: string - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users - without an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's - auto-generated icon - example: "#f44336" - index: - type: number - nullable: true - tags: - type: array - items: - type: object - properties: - value: - type: string - valueEscaped: - type: string - color: - type: string - bgColor: - type: string - score: - type: number - isOwner: - type: boolean - ignored: - type: boolean - unread: - type: boolean - bookmark: - nullable: true - type: number - unreplied: - type: boolean - icons: - type: array - items: - type: string - description: HTML injected into the theme - - type: object - description: Optional properties that may or may not be present (except for `tid`, which is always present, and is only here as a hack to pass validation) - properties: - tid: - type: number - description: A topic identifier - thumb: - type: string - pinExpiry: - type: number - description: A UNIX timestamp indicating when a pinned topic will no longer be pinned (i.e. the pin has expired) - pinExpiryISO: - type: string - description: "`pinExpiry` rendered as an ISO 8601 format" - index: - type: number - required: - - tid -TopicObjectSlim: - description: The output of a call to `Topics.getTopicField`, these properties are always present no matter the fields passed in - allOf: - - type: object - properties: - tid: - type: number - description: A topic identifier - uid: - type: number - description: A user identifier - cid: - type: number - description: A category identifier - title: - type: string - slug: - type: string - mainPid: - type: number - description: The post id of the first post in this topic (also called the "original post") - postcount: - type: number - viewcount: - type: number - postercount: - type: number - scheduled: - type: number - deleted: - type: number - deleterUid: - type: number - titleRaw: - type: string - locked: - type: number - pinned: - type: number - description: Whether or not this particular topic is pinned to the top of the - category - timestamp: - type: number - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - lastposttime: - type: number - lastposttimeISO: - type: string - description: An ISO 8601 formatted date string (complementing `lastposttime`) - pinExpiry: - type: number - description: A UNIX timestamp indicating when a pinned topic will no longer be pinned (i.e. the pin has expired) - pinExpiryISO: - type: string - description: "`pinExpiry` rendered as an ISO 8601 format" - upvotes: - type: number - downvotes: - type: number - votes: - type: number - teaserPid: - oneOf: - - type: number - - type: string - nullable: true - thumbs: - type: array - items: - type: object - properties: - id: - type: number - description: The topic id - name: - type: string - description: The topic thumbnail filename - url: - type: string - description: Relative path to the topic thumbnail - - type: object - description: Optional properties that may or may not be present (except for `tid`, which is always present, and is only here as a hack to pass validation) - properties: - tid: - type: number - description: A topic identifier - numThumbs: - type: number - description: The number of thumbnails associated with this topic - required: +TopicObject: + allOf: + - $ref: '#/TopicObjectSlim' + - type: object + properties: + lastposttime: + type: number + category: + type: object + properties: + cid: + type: number + description: A category identifier + name: + type: string + slug: + type: string + icon: + type: string + backgroundImage: + nullable: true + type: string + imageClass: + nullable: true + type: string + bgColor: + type: string + color: + type: string + disabled: + type: number + user: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + fullname: + type: string + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + reputation: + type: number + postcount: + type: number + picture: + type: string + nullable: true + signature: + type: string + nullable: true + banned: + type: number + status: + type: string + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without + an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's auto-generated + icon + example: "#f44336" + banned_until_readable: + type: string + required: + - uid + - username + - userslug + - reputation + - postcount + - picture + - signature + - banned + - status + - icon:text + - icon:bgColor + - banned_until_readable + teaser: + type: object + properties: + pid: + type: number + uid: + type: number + description: A user identifier + timestamp: + type: number + tid: + type: number + description: A topic identifier + content: + type: string + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + user: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + nullable: true + type: string + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users + without an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's + auto-generated icon + example: "#f44336" + index: + type: number + nullable: true + tags: + type: array + items: + type: object + properties: + value: + type: string + valueEscaped: + type: string + color: + type: string + bgColor: + type: string + score: + type: number + isOwner: + type: boolean + ignored: + type: boolean + unread: + type: boolean + bookmark: + nullable: true + type: number + unreplied: + type: boolean + icons: + type: array + items: + type: string + description: HTML injected into the theme + - type: object + description: Optional properties that may or may not be present (except for `tid`, which is always present, and is only here as a hack to pass validation) + properties: + tid: + type: number + description: A topic identifier + thumb: + type: string + pinExpiry: + type: number + description: A UNIX timestamp indicating when a pinned topic will no longer be pinned (i.e. the pin has expired) + pinExpiryISO: + type: string + description: "`pinExpiry` rendered as an ISO 8601 format" + index: + type: number + required: + - tid +TopicObjectSlim: + description: The output of a call to `Topics.getTopicField`, these properties are always present no matter the fields passed in + allOf: + - type: object + properties: + tid: + type: number + description: A topic identifier + uid: + type: number + description: A user identifier + cid: + type: number + description: A category identifier + title: + type: string + slug: + type: string + mainPid: + type: number + description: The post id of the first post in this topic (also called the "original post") + postcount: + type: number + viewcount: + type: number + postercount: + type: number + scheduled: + type: number + deleted: + type: number + deleterUid: + type: number + titleRaw: + type: string + locked: + type: number + pinned: + type: number + description: Whether or not this particular topic is pinned to the top of the + category + timestamp: + type: number + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + lastposttime: + type: number + lastposttimeISO: + type: string + description: An ISO 8601 formatted date string (complementing `lastposttime`) + pinExpiry: + type: number + description: A UNIX timestamp indicating when a pinned topic will no longer be pinned (i.e. the pin has expired) + pinExpiryISO: + type: string + description: "`pinExpiry` rendered as an ISO 8601 format" + upvotes: + type: number + downvotes: + type: number + votes: + type: number + teaserPid: + oneOf: + - type: number + - type: string + nullable: true + thumbs: + type: array + items: + type: object + properties: + id: + type: number + description: The topic id + name: + type: string + description: The topic thumbnail filename + url: + type: string + description: Relative path to the topic thumbnail + - type: object + description: Optional properties that may or may not be present (except for `tid`, which is always present, and is only here as a hack to pass validation) + properties: + tid: + type: number + description: A topic identifier + numThumbs: + type: number + description: The number of thumbnails associated with this topic + required: - tid \ No newline at end of file diff --git a/public/openapi/components/schemas/UserObj.yaml b/public/openapi/components/schemas/UserObj.yaml index fc2837b..df143d3 100644 --- a/public/openapi/components/schemas/UserObj.yaml +++ b/public/openapi/components/schemas/UserObj.yaml @@ -1,123 +1,123 @@ -UserObj: - properties: - uid: - type: number - example: 1 - username: - type: string - example: Dragon Fruit - userslug: - type: string - example: dragon-fruit - email: - type: string - example: dragonfruit@example.org - 'email:confirmed': - type: number - example: 1 - joindate: - type: number - example: 1585337827953 - lastonline: - type: number - example: 1585337827953 - picture: - type: string - example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80' - fullname: - type: string - example: Mr. Dragon Fruit Jr. - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - example: Dragon Fruit - location: - type: string - example: 'Toronto, Canada' - birthday: - type: string - description: A birthdate given in an ISO format parseable by the Date object - example: 03/27/2020 - website: - type: string - example: 'https://example.org' - aboutme: - type: string - example: | - This is a paragraph all about how my life got twist-turned upside-down - and I'd like to take a minute and sit right here, - to tell you all about how I because the administrator of NodeBB - signature: - type: string - example: | - This is an example signature - It can span multiple lines. - uploadedpicture: - type: string - example: /assets/profile/1-profileimg.png - description: 'In almost all cases, defer to "picture" instead. Use this if you need to specifically reference the picture uploaded to the forum.' - profileviews: - type: number - example: 1000 - reputation: - type: number - example: 100 - postcount: - type: number - example: 1000 - topiccount: - type: number - example: 50 - lastposttime: - type: number - example: 1585337827953 - banned: - type: number - example: 0 - 'banned:expire': - type: number - example: 1585337827953 - status: - type: string - example: online - flags: - type: number - example: 0 - followercount: - type: number - example: 2 - followingcount: - type: number - example: 5 - 'cover:url': - type: string - example: /assets/profile/1-cover.png - 'cover:position': - type: string - example: 50.0301% 19.2464% - groupTitle: - type: string - example: '["administrators","Staff"]' - groupTitleArray: - type: array - example: - - administrators - - Staff - 'icon:text': - type: string - example: D - 'icon:bgColor': - type: string - example: '#9c27b0' - joindateISO: - type: string - example: '2020-03-27T20:30:36.590Z' - lastonlineISO: - type: string - example: '2020-03-27T20:30:36.590Z' - banned_until: - type: number - example: 0 - banned_until_readable: - type: string +UserObj: + properties: + uid: + type: number + example: 1 + username: + type: string + example: Dragon Fruit + userslug: + type: string + example: dragon-fruit + email: + type: string + example: dragonfruit@example.org + 'email:confirmed': + type: number + example: 1 + joindate: + type: number + example: 1585337827953 + lastonline: + type: number + example: 1585337827953 + picture: + type: string + example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80' + fullname: + type: string + example: Mr. Dragon Fruit Jr. + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + example: Dragon Fruit + location: + type: string + example: 'Toronto, Canada' + birthday: + type: string + description: A birthdate given in an ISO format parseable by the Date object + example: 03/27/2020 + website: + type: string + example: 'https://example.org' + aboutme: + type: string + example: | + This is a paragraph all about how my life got twist-turned upside-down + and I'd like to take a minute and sit right here, + to tell you all about how I because the administrator of NodeBB + signature: + type: string + example: | + This is an example signature + It can span multiple lines. + uploadedpicture: + type: string + example: /assets/profile/1-profileimg.png + description: 'In almost all cases, defer to "picture" instead. Use this if you need to specifically reference the picture uploaded to the forum.' + profileviews: + type: number + example: 1000 + reputation: + type: number + example: 100 + postcount: + type: number + example: 1000 + topiccount: + type: number + example: 50 + lastposttime: + type: number + example: 1585337827953 + banned: + type: number + example: 0 + 'banned:expire': + type: number + example: 1585337827953 + status: + type: string + example: online + flags: + type: number + example: 0 + followercount: + type: number + example: 2 + followingcount: + type: number + example: 5 + 'cover:url': + type: string + example: /assets/profile/1-cover.png + 'cover:position': + type: string + example: 50.0301% 19.2464% + groupTitle: + type: string + example: '["administrators","Staff"]' + groupTitleArray: + type: array + example: + - administrators + - Staff + 'icon:text': + type: string + example: D + 'icon:bgColor': + type: string + example: '#9c27b0' + joindateISO: + type: string + example: '2020-03-27T20:30:36.590Z' + lastonlineISO: + type: string + example: '2020-03-27T20:30:36.590Z' + banned_until: + type: number + example: 0 + banned_until_readable: + type: string example: Not Banned \ No newline at end of file diff --git a/public/openapi/components/schemas/UserObject.yaml b/public/openapi/components/schemas/UserObject.yaml index 979e5db..cbda772 100644 --- a/public/openapi/components/schemas/UserObject.yaml +++ b/public/openapi/components/schemas/UserObject.yaml @@ -1,677 +1,677 @@ -UserObject: - type: object - properties: - uid: - type: number - description: A user identifier - example: 1 - username: - type: string - description: A friendly name for a given user account - example: Dragon Fruit - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces removed, etc.) - example: dragon-fruit - email: - type: string - description: Email address associated with the user account - example: dragonfruit@example.org - 'email:confirmed': - type: number - description: Whether the user has confirmed their email address or not - example: 1 - joindate: - type: number - description: A UNIX timestamp representing the moment the user's account was created - example: 1585337827953 - accounttype: - type: string - description: Type of the user account - example: student - lastonline: - type: number - description: A UNIX timestamp representing the moment the user was last recorded online on this site - example: 1585337827953 - picture: - type: string - description: A URL pointing to a picture to be used as the user's avatar - example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80' - nullable: true - fullname: - type: string - example: Mr. Dragon Fruit Jr. - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - example: Dragon Fruit - location: - type: string - example: 'Toronto, Canada' - nullable: true - birthday: - type: string - description: A birthdate given in an ISO format parseable by the Date object - example: 03/27/2020 - nullable: true - website: - type: string - example: 'https://example.org' - nullable: true - aboutme: - type: string - example: | - This is a paragraph all about how my life got twist-turned upside-down - and I'd like to take a minute and sit right here, - to tell you all about how I became the administrator of NodeBB - nullable: true - signature: - type: string - example: | - This is an example signature - It can span multiple lines. - nullable: true - uploadedpicture: - type: string - example: /assets/profile/1-profileimg.png - description: 'In almost all cases, defer to "picture" instead. Use this if you need to specifically reference the picture uploaded to the forum.' - nullable: true - profileviews: - type: number - description: The number of times this user's profile has been viewed - example: 1000 - reputation: - type: number - description: The user's reputation score on the forum. Out-of-the-box, users gain/lose reputation points based on upvotes/downvotes, though plugins can alter the logic and criterion for awarding reputation points - example: 100 - postcount: - type: number - example: 1000 - topiccount: - type: number - example: 50 - lastposttime: - type: number - description: A UNIX timestamp representing the moment the user posted last - example: 1585337827953 - banned: - type: number - description: A Boolean representing whether a user is banned or not - example: 0 - 'banned:expire': - type: number - description: A UNIX timestamp representing the moment the ban will be lifted - example: 1585337827953 - status: - type: string - enum: - - online - - offline - - dnd - - away - example: online - flags: - type: number - example: 0 - nullable: true - followerCount: - type: number - example: 2 - followingCount: - type: number - example: 5 - 'cover:url': - type: string - example: /assets/profile/1-cover.png - nullable: true - 'cover:position': - type: string - example: 50.0301% 19.2464% - nullable: true - groupTitle: - type: string - example: '["administrators","Staff"]' - nullable: true - groupTitleArray: - type: array - example: - - administrators - - Staff - 'icon:text': - type: string - description: A single-letter representation of a username. This is used in the auto-generated icon given to users without an avatar - example: D - 'icon:bgColor': - type: string - description: A six-character hexadecimal colour code assigned to the user. This value is used in conjunction with `icon:text` for the user's auto-generated icon - example: '#9c27b0' - joindateISO: - type: string - example: '2020-03-27T20:30:36.590Z' - lastonlineISO: - type: string - example: '2020-03-27T20:30:36.590Z' - banned_until: - type: number - description: A UNIX timestamp representing the moment a ban will be lifted - example: 0 - banned_until_readable: - type: string - description: An ISO 8601 formatted date string representing the moment a ban will be lifted, or the words "Not Banned" - example: Not Banned - required: - - uid - - username - - userslug - - 'email:confirmed' - - joindate - - lastonline - - picture - - location - - birthday - - website - - aboutme - - signature - - uploadedpicture - - profileviews - - reputation - - postcount - - topiccount - - lastposttime - - banned - - 'banned:expire' - - status - - enum - - flags - - followerCount - - followingCount - - 'cover:url' - - 'cover:position' - - groupTitle - - groupTitleArray - - example - - 'icon:text' - - 'icon:bgColor' - - joindateISO - - lastonlineISO - - banned_until - - banned_until_readable -UserObjectFull: - # accountHelpers.getUserDataByUserSlug - type: object - properties: - uid: - type: number - description: A user identifier - example: 1 - username: - type: string - description: A friendly name for a given user account - example: Dragon Fruit - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces removed, etc.) - example: dragon-fruit - email: - type: string - description: Email address associated with the user account - example: dragonfruit@example.org - 'email:confirmed': - type: number - description: Whether the user has confirmed their email address or not - example: 1 - joindate: - type: number - description: A UNIX timestamp representing the moment the user's account was created - example: 1585337827953 - accounttype: - type: string - description: Type of the user account - example: student - lastonline: - type: number - description: A UNIX timestamp representing the moment the user was last recorded online on this site - example: 1585337827953 - picture: - type: string - description: A URL pointing to a picture to be used as the user's avatar - example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80' - nullable: true - fullname: - type: string - example: Mr. Dragon Fruit Jr. - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - example: Dragon Fruit - location: - type: string - example: 'Toronto, Canada' - birthday: - type: string - description: A birthdate given in an ISO format parseable by the Date object - example: 03/27/2020 - website: - type: string - example: 'https://example.org' - aboutme: - type: string - example: | - This is a paragraph all about how my life got twist-turned upside-down - and I'd like to take a minute and sit right here, - to tell you all about how I became the administrator of NodeBB - signature: - type: string - example: | - This is an example signature - It can span multiple lines. - uploadedpicture: - type: string - example: /assets/profile/1-profileimg.png - description: 'In almost all cases, defer to "picture" instead. Use this if you need to specifically reference the picture uploaded to the forum.' - nullable: true - profileviews: - type: number - description: The number of times this user's profile has been viewed - example: 1000 - reputation: - type: number - description: The user's reputation score on the forum. Out-of-the-box, users gain/lose reputation points based on upvotes/downvotes, though plugins can alter the logic and criterion for awarding reputation points - example: 100 - postcount: - type: number - example: 1000 - topiccount: - type: number - example: 50 - lastposttime: - type: number - description: A UNIX timestamp representing the moment the user posted last - example: 1585337827953 - banned: - type: number - description: A Boolean representing whether a user is banned or not - example: 0 - 'banned:expire': - type: number - description: A UNIX timestamp representing the moment the ban will be lifted - example: 1585337827953 - status: - type: string - enum: - - online - - offline - - dnd - - away - example: online - flags: - type: number - example: 0 - nullable: true - followerCount: - type: number - example: 2 - followingCount: - type: number - example: 5 - 'cover:url': - type: string - example: /assets/profile/1-cover.png - nullable: true - 'cover:position': - type: string - example: 50.0301% 19.2464% - nullable: true - groupTitle: - type: string - example: '["administrators","Staff"]' - groupTitleArray: - type: array - example: - - administrators - - Staff - 'icon:text': - type: string - description: A single-letter representation of a username. This is used in the auto-generated icon given to users without an avatar - example: D - 'icon:bgColor': - type: string - description: A six-character hexadecimal colour code assigned to the user. This value is used in conjunction with `icon:text` for the user's auto-generated icon - example: '#9c27b0' - joindateISO: - type: string - example: '2020-03-27T20:30:36.590Z' - lastonlineISO: - type: string - example: '2020-03-27T20:30:36.590Z' - banned_until: - type: number - description: A UNIX timestamp representing the moment a ban will be lifted - example: 0 - banned_until_readable: - type: string - description: An ISO 8601 formatted date string representing the moment a ban will be lifted, or the words "Not Banned" - example: Not Banned - aboutmeParsed: - type: string - age: - type: number - emailClass: - type: string - ips: - type: array - items: - type: string - moderationNote: - type: string - counts: - type: object - properties: - best: - type: number - blocks: - type: number - bookmarks: - type: number - categoriesWatched: - type: number - downvoted: - type: number - followers: - type: number - following: - type: number - groups: - type: number - ignored: - type: number - posts: - type: number - topics: - type: number - uploaded: - type: number - upvoted: - type: number - watched: - type: number - isBlocked: - type: boolean - blocksCount: - type: number - yourid: - type: number - theirid: - type: number - isTargetAdmin: - type: boolean - isAdmin: - type: boolean - isGlobalModerator: - type: boolean - isModerator: - type: boolean - isAdminOrGlobalModerator: - type: boolean - isAdminOrGlobalModeratorOrModerator: - type: boolean - isSelfOrAdminOrGlobalModerator: - type: boolean - canEdit: - type: boolean - canBan: - type: boolean - canFlag: - type: boolean - canChangePassword: - type: boolean - isSelf: - type: boolean - isFollowing: - type: boolean - hasPrivateChat: - type: number - showHidden: - type: boolean - groups: - type: array - items: - $ref: ./GroupObject.yaml#/GroupFullObject - disableSignatures: - type: boolean - reputation:disabled: - type: boolean - downvote:disabled: - type: boolean - profile_links: - type: array - items: - type: object - properties: - id: - type: string - route: - type: string - name: - type: string - visibility: - type: object - properties: - self: - type: boolean - other: - type: boolean - moderator: - type: boolean - globalMod: - type: boolean - admin: - type: boolean - canViewInfo: - type: boolean - public: - type: boolean - icon: - type: string - required: - - id - - route - - name - - visibility - - public - sso: - type: array - items: - type: object - properties: - associated: - type: boolean - url: - type: string - name: - type: string - icon: - type: string - deauthUrl: - type: string - websiteLink: - type: string - websiteName: - type: string - username:disableEdit: - type: number - email:disableEdit: - type: number -UserObjectSlim: - type: object - properties: - uid: - type: number - description: A user identifier - example: 1 - username: - type: string - description: A friendly name for a given user account - example: Dragon Fruit - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - example: Dragon Fruit - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces removed, etc.) - example: dragon-fruit - picture: - type: string - description: A URL pointing to a picture to be used as the user's avatar - example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80' - nullable: true - status: - type: string - enum: - - online - - offline - - dnd - - away - example: online - postcount: - type: number - example: 1000 - reputation: - type: number - description: The user's reputation score on the forum. Out-of-the-box, users gain/lose reputation points based on upvotes/downvotes, though plugins can alter the logic and criterion for awarding reputation points - example: 100 - 'email:confirmed': - type: number - description: Whether the user has confirmed their email address or not - example: 1 - lastonline: - type: number - description: A UNIX timestamp representing the moment the user was last recorded online on this site - example: 1585337827953 - flags: - type: number - example: 0 - nullable: true - banned: - type: number - description: A Boolean representing whether a user is banned or not - example: 0 - 'banned:expire': - type: number - description: A UNIX timestamp representing the moment the ban will be lifted - example: 1585337827953 - joindate: - type: number - description: A UNIX timestamp representing the moment the user's account was created - example: 1585337827953 - accounttype: - type: string - description: Type of the user account - example: student - 'icon:text': - type: string - description: A single-letter representation of a username. This is used in the auto-generated icon given to users without an avatar - example: D - 'icon:bgColor': - type: string - description: A six-character hexadecimal colour code assigned to the user. This value is used in conjunction with `icon:text` for the user's auto-generated icon - example: '#9c27b0' - joindateISO: - type: string - example: '2020-03-27T20:30:36.590Z' - lastonlineISO: - type: string - example: '2020-03-27T20:30:36.590Z' - banned_until: - type: number - description: A UNIX timestamp representing the moment a ban will be lifted - example: 0 - banned_until_readable: - type: string - description: An ISO 8601 formatted date string representing the moment a ban will be lifted, or the words "Not Banned" - example: Not Banned -UserObjectACP: - type: object - properties: - uid: - type: number - description: A user identifier - example: 1 - username: - type: string - description: A friendly name for a given user account - example: Dragon Fruit - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - example: Dragon Fruit - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces removed, etc.) - example: dragon-fruit - email: - type: string - description: Email address associated with the user account - example: dragonfruit@example.org - postcount: - type: number - example: 1000 - joindate: - type: number - description: A UNIX timestamp representing the moment the user's account was created - example: 1585337827953 - accounttype: - type: string - description: Type of the user account - example: student - banned: - type: number - description: A Boolean representing whether a user is banned or not - example: 0 - reputation: - type: number - description: The user's reputation score on the forum. Out-of-the-box, users gain/lose reputation points based on upvotes/downvotes, though plugins can alter the logic and criterion for awarding reputation points - example: 100 - picture: - type: string - description: A URL pointing to a picture to be used as the user's avatar - example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80' - nullable: true - flags: - type: number - example: 0 - nullable: true - lastonline: - type: number - description: A UNIX timestamp representing the moment the user was last recorded online on this site - example: 1585337827953 - 'email:confirmed': - type: number - description: Whether the user has confirmed their email address or not - example: 1 - 'icon:text': - type: string - description: A single-letter representation of a username. This is used in the auto-generated icon given to users without an avatar - example: D - 'icon:bgColor': - type: string - description: A six-character hexadecimal colour code assigned to the user. This value is used in conjunction with `icon:text` for the user's auto-generated icon - example: '#9c27b0' - joindateISO: - type: string - example: '2020-03-27T20:30:36.590Z' - lastonlineISO: - type: string - example: '2020-03-27T20:30:36.590Z' - banned_until_readable: - type: string - description: An ISO 8601 formatted date string representing the moment a ban will be lifted, or the words "Not Banned" - example: Not Banned - administrator: - type: boolean - ip: - type: string - nullable: true - ips: - type: array +UserObject: + type: object + properties: + uid: + type: number + description: A user identifier + example: 1 + username: + type: string + description: A friendly name for a given user account + example: Dragon Fruit + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces removed, etc.) + example: dragon-fruit + email: + type: string + description: Email address associated with the user account + example: dragonfruit@example.org + 'email:confirmed': + type: number + description: Whether the user has confirmed their email address or not + example: 1 + joindate: + type: number + description: A UNIX timestamp representing the moment the user's account was created + example: 1585337827953 + accounttype: + type: string + description: Type of the user account + example: student + lastonline: + type: number + description: A UNIX timestamp representing the moment the user was last recorded online on this site + example: 1585337827953 + picture: + type: string + description: A URL pointing to a picture to be used as the user's avatar + example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80' + nullable: true + fullname: + type: string + example: Mr. Dragon Fruit Jr. + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + example: Dragon Fruit + location: + type: string + example: 'Toronto, Canada' + nullable: true + birthday: + type: string + description: A birthdate given in an ISO format parseable by the Date object + example: 03/27/2020 + nullable: true + website: + type: string + example: 'https://example.org' + nullable: true + aboutme: + type: string + example: | + This is a paragraph all about how my life got twist-turned upside-down + and I'd like to take a minute and sit right here, + to tell you all about how I became the administrator of NodeBB + nullable: true + signature: + type: string + example: | + This is an example signature + It can span multiple lines. + nullable: true + uploadedpicture: + type: string + example: /assets/profile/1-profileimg.png + description: 'In almost all cases, defer to "picture" instead. Use this if you need to specifically reference the picture uploaded to the forum.' + nullable: true + profileviews: + type: number + description: The number of times this user's profile has been viewed + example: 1000 + reputation: + type: number + description: The user's reputation score on the forum. Out-of-the-box, users gain/lose reputation points based on upvotes/downvotes, though plugins can alter the logic and criterion for awarding reputation points + example: 100 + postcount: + type: number + example: 1000 + topiccount: + type: number + example: 50 + lastposttime: + type: number + description: A UNIX timestamp representing the moment the user posted last + example: 1585337827953 + banned: + type: number + description: A Boolean representing whether a user is banned or not + example: 0 + 'banned:expire': + type: number + description: A UNIX timestamp representing the moment the ban will be lifted + example: 1585337827953 + status: + type: string + enum: + - online + - offline + - dnd + - away + example: online + flags: + type: number + example: 0 + nullable: true + followerCount: + type: number + example: 2 + followingCount: + type: number + example: 5 + 'cover:url': + type: string + example: /assets/profile/1-cover.png + nullable: true + 'cover:position': + type: string + example: 50.0301% 19.2464% + nullable: true + groupTitle: + type: string + example: '["administrators","Staff"]' + nullable: true + groupTitleArray: + type: array + example: + - administrators + - Staff + 'icon:text': + type: string + description: A single-letter representation of a username. This is used in the auto-generated icon given to users without an avatar + example: D + 'icon:bgColor': + type: string + description: A six-character hexadecimal colour code assigned to the user. This value is used in conjunction with `icon:text` for the user's auto-generated icon + example: '#9c27b0' + joindateISO: + type: string + example: '2020-03-27T20:30:36.590Z' + lastonlineISO: + type: string + example: '2020-03-27T20:30:36.590Z' + banned_until: + type: number + description: A UNIX timestamp representing the moment a ban will be lifted + example: 0 + banned_until_readable: + type: string + description: An ISO 8601 formatted date string representing the moment a ban will be lifted, or the words "Not Banned" + example: Not Banned + required: + - uid + - username + - userslug + - 'email:confirmed' + - joindate + - lastonline + - picture + - location + - birthday + - website + - aboutme + - signature + - uploadedpicture + - profileviews + - reputation + - postcount + - topiccount + - lastposttime + - banned + - 'banned:expire' + - status + - enum + - flags + - followerCount + - followingCount + - 'cover:url' + - 'cover:position' + - groupTitle + - groupTitleArray + - example + - 'icon:text' + - 'icon:bgColor' + - joindateISO + - lastonlineISO + - banned_until + - banned_until_readable +UserObjectFull: + # accountHelpers.getUserDataByUserSlug + type: object + properties: + uid: + type: number + description: A user identifier + example: 1 + username: + type: string + description: A friendly name for a given user account + example: Dragon Fruit + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces removed, etc.) + example: dragon-fruit + email: + type: string + description: Email address associated with the user account + example: dragonfruit@example.org + 'email:confirmed': + type: number + description: Whether the user has confirmed their email address or not + example: 1 + joindate: + type: number + description: A UNIX timestamp representing the moment the user's account was created + example: 1585337827953 + accounttype: + type: string + description: Type of the user account + example: student + lastonline: + type: number + description: A UNIX timestamp representing the moment the user was last recorded online on this site + example: 1585337827953 + picture: + type: string + description: A URL pointing to a picture to be used as the user's avatar + example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80' + nullable: true + fullname: + type: string + example: Mr. Dragon Fruit Jr. + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + example: Dragon Fruit + location: + type: string + example: 'Toronto, Canada' + birthday: + type: string + description: A birthdate given in an ISO format parseable by the Date object + example: 03/27/2020 + website: + type: string + example: 'https://example.org' + aboutme: + type: string + example: | + This is a paragraph all about how my life got twist-turned upside-down + and I'd like to take a minute and sit right here, + to tell you all about how I became the administrator of NodeBB + signature: + type: string + example: | + This is an example signature + It can span multiple lines. + uploadedpicture: + type: string + example: /assets/profile/1-profileimg.png + description: 'In almost all cases, defer to "picture" instead. Use this if you need to specifically reference the picture uploaded to the forum.' + nullable: true + profileviews: + type: number + description: The number of times this user's profile has been viewed + example: 1000 + reputation: + type: number + description: The user's reputation score on the forum. Out-of-the-box, users gain/lose reputation points based on upvotes/downvotes, though plugins can alter the logic and criterion for awarding reputation points + example: 100 + postcount: + type: number + example: 1000 + topiccount: + type: number + example: 50 + lastposttime: + type: number + description: A UNIX timestamp representing the moment the user posted last + example: 1585337827953 + banned: + type: number + description: A Boolean representing whether a user is banned or not + example: 0 + 'banned:expire': + type: number + description: A UNIX timestamp representing the moment the ban will be lifted + example: 1585337827953 + status: + type: string + enum: + - online + - offline + - dnd + - away + example: online + flags: + type: number + example: 0 + nullable: true + followerCount: + type: number + example: 2 + followingCount: + type: number + example: 5 + 'cover:url': + type: string + example: /assets/profile/1-cover.png + nullable: true + 'cover:position': + type: string + example: 50.0301% 19.2464% + nullable: true + groupTitle: + type: string + example: '["administrators","Staff"]' + groupTitleArray: + type: array + example: + - administrators + - Staff + 'icon:text': + type: string + description: A single-letter representation of a username. This is used in the auto-generated icon given to users without an avatar + example: D + 'icon:bgColor': + type: string + description: A six-character hexadecimal colour code assigned to the user. This value is used in conjunction with `icon:text` for the user's auto-generated icon + example: '#9c27b0' + joindateISO: + type: string + example: '2020-03-27T20:30:36.590Z' + lastonlineISO: + type: string + example: '2020-03-27T20:30:36.590Z' + banned_until: + type: number + description: A UNIX timestamp representing the moment a ban will be lifted + example: 0 + banned_until_readable: + type: string + description: An ISO 8601 formatted date string representing the moment a ban will be lifted, or the words "Not Banned" + example: Not Banned + aboutmeParsed: + type: string + age: + type: number + emailClass: + type: string + ips: + type: array + items: + type: string + moderationNote: + type: string + counts: + type: object + properties: + best: + type: number + blocks: + type: number + bookmarks: + type: number + categoriesWatched: + type: number + downvoted: + type: number + followers: + type: number + following: + type: number + groups: + type: number + ignored: + type: number + posts: + type: number + topics: + type: number + uploaded: + type: number + upvoted: + type: number + watched: + type: number + isBlocked: + type: boolean + blocksCount: + type: number + yourid: + type: number + theirid: + type: number + isTargetAdmin: + type: boolean + isAdmin: + type: boolean + isGlobalModerator: + type: boolean + isModerator: + type: boolean + isAdminOrGlobalModerator: + type: boolean + isAdminOrGlobalModeratorOrModerator: + type: boolean + isSelfOrAdminOrGlobalModerator: + type: boolean + canEdit: + type: boolean + canBan: + type: boolean + canFlag: + type: boolean + canChangePassword: + type: boolean + isSelf: + type: boolean + isFollowing: + type: boolean + hasPrivateChat: + type: number + showHidden: + type: boolean + groups: + type: array + items: + $ref: ./GroupObject.yaml#/GroupFullObject + disableSignatures: + type: boolean + reputation:disabled: + type: boolean + downvote:disabled: + type: boolean + profile_links: + type: array + items: + type: object + properties: + id: + type: string + route: + type: string + name: + type: string + visibility: + type: object + properties: + self: + type: boolean + other: + type: boolean + moderator: + type: boolean + globalMod: + type: boolean + admin: + type: boolean + canViewInfo: + type: boolean + public: + type: boolean + icon: + type: string + required: + - id + - route + - name + - visibility + - public + sso: + type: array + items: + type: object + properties: + associated: + type: boolean + url: + type: string + name: + type: string + icon: + type: string + deauthUrl: + type: string + websiteLink: + type: string + websiteName: + type: string + username:disableEdit: + type: number + email:disableEdit: + type: number +UserObjectSlim: + type: object + properties: + uid: + type: number + description: A user identifier + example: 1 + username: + type: string + description: A friendly name for a given user account + example: Dragon Fruit + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + example: Dragon Fruit + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces removed, etc.) + example: dragon-fruit + picture: + type: string + description: A URL pointing to a picture to be used as the user's avatar + example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80' + nullable: true + status: + type: string + enum: + - online + - offline + - dnd + - away + example: online + postcount: + type: number + example: 1000 + reputation: + type: number + description: The user's reputation score on the forum. Out-of-the-box, users gain/lose reputation points based on upvotes/downvotes, though plugins can alter the logic and criterion for awarding reputation points + example: 100 + 'email:confirmed': + type: number + description: Whether the user has confirmed their email address or not + example: 1 + lastonline: + type: number + description: A UNIX timestamp representing the moment the user was last recorded online on this site + example: 1585337827953 + flags: + type: number + example: 0 + nullable: true + banned: + type: number + description: A Boolean representing whether a user is banned or not + example: 0 + 'banned:expire': + type: number + description: A UNIX timestamp representing the moment the ban will be lifted + example: 1585337827953 + joindate: + type: number + description: A UNIX timestamp representing the moment the user's account was created + example: 1585337827953 + accounttype: + type: string + description: Type of the user account + example: student + 'icon:text': + type: string + description: A single-letter representation of a username. This is used in the auto-generated icon given to users without an avatar + example: D + 'icon:bgColor': + type: string + description: A six-character hexadecimal colour code assigned to the user. This value is used in conjunction with `icon:text` for the user's auto-generated icon + example: '#9c27b0' + joindateISO: + type: string + example: '2020-03-27T20:30:36.590Z' + lastonlineISO: + type: string + example: '2020-03-27T20:30:36.590Z' + banned_until: + type: number + description: A UNIX timestamp representing the moment a ban will be lifted + example: 0 + banned_until_readable: + type: string + description: An ISO 8601 formatted date string representing the moment a ban will be lifted, or the words "Not Banned" + example: Not Banned +UserObjectACP: + type: object + properties: + uid: + type: number + description: A user identifier + example: 1 + username: + type: string + description: A friendly name for a given user account + example: Dragon Fruit + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + example: Dragon Fruit + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces removed, etc.) + example: dragon-fruit + email: + type: string + description: Email address associated with the user account + example: dragonfruit@example.org + postcount: + type: number + example: 1000 + joindate: + type: number + description: A UNIX timestamp representing the moment the user's account was created + example: 1585337827953 + accounttype: + type: string + description: Type of the user account + example: student + banned: + type: number + description: A Boolean representing whether a user is banned or not + example: 0 + reputation: + type: number + description: The user's reputation score on the forum. Out-of-the-box, users gain/lose reputation points based on upvotes/downvotes, though plugins can alter the logic and criterion for awarding reputation points + example: 100 + picture: + type: string + description: A URL pointing to a picture to be used as the user's avatar + example: 'https://images.unsplash.com/photo-1560070094-e1f2ddec4337?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=256&h=256&q=80' + nullable: true + flags: + type: number + example: 0 + nullable: true + lastonline: + type: number + description: A UNIX timestamp representing the moment the user was last recorded online on this site + example: 1585337827953 + 'email:confirmed': + type: number + description: Whether the user has confirmed their email address or not + example: 1 + 'icon:text': + type: string + description: A single-letter representation of a username. This is used in the auto-generated icon given to users without an avatar + example: D + 'icon:bgColor': + type: string + description: A six-character hexadecimal colour code assigned to the user. This value is used in conjunction with `icon:text` for the user's auto-generated icon + example: '#9c27b0' + joindateISO: + type: string + example: '2020-03-27T20:30:36.590Z' + lastonlineISO: + type: string + example: '2020-03-27T20:30:36.590Z' + banned_until_readable: + type: string + description: An ISO 8601 formatted date string representing the moment a ban will be lifted, or the words "Not Banned" + example: Not Banned + administrator: + type: boolean + ip: + type: string + nullable: true + ips: + type: array diff --git a/public/openapi/components/schemas/admin/dashboard.yaml b/public/openapi/components/schemas/admin/dashboard.yaml index 54a2b51..cd25ccf 100644 --- a/public/openapi/components/schemas/admin/dashboard.yaml +++ b/public/openapi/components/schemas/admin/dashboard.yaml @@ -1,47 +1,47 @@ -Stats: - type: object - properties: - stats: - type: array - items: - allOf: - - type: object - properties: - yesterday: - type: number - today: - type: number - lastweek: - type: number - thisweek: - type: number - lastmonth: - type: number - thismonth: - type: number - alltime: - type: number - dayIncrease: - type: string - dayTextClass: - type: string - weekIncrease: - type: string - weekTextClass: - type: string - monthIncrease: - type: string - monthTextClass: - type: string - name: - type: string - - type: object - description: Optional properties that may or may not be present (except for `cid`, which is always present, and is only here as a hack to pass validation) - properties: - name: - type: string - href: - type: string - description: Relative path to dashboard analytics sub-page, if applicable. - required: +Stats: + type: object + properties: + stats: + type: array + items: + allOf: + - type: object + properties: + yesterday: + type: number + today: + type: number + lastweek: + type: number + thisweek: + type: number + lastmonth: + type: number + thismonth: + type: number + alltime: + type: number + dayIncrease: + type: string + dayTextClass: + type: string + weekIncrease: + type: string + weekTextClass: + type: string + monthIncrease: + type: string + monthTextClass: + type: string + name: + type: string + - type: object + description: Optional properties that may or may not be present (except for `cid`, which is always present, and is only here as a hack to pass validation) + properties: + name: + type: string + href: + type: string + description: Relative path to dashboard analytics sub-page, if applicable. + required: - name \ No newline at end of file diff --git a/public/openapi/read.yaml b/public/openapi/read.yaml index 20f835b..854b1a3 100644 --- a/public/openapi/read.yaml +++ b/public/openapi/read.yaml @@ -1,334 +1,334 @@ -openapi: 3.0.0 -info: - title: NodeBB Read API - version: 1.15.0 - contact: - email: support@nodebb.org - license: - name: GPL-3.0 - description: >- - # Overview - - The following document outlines every Read API route available via NodeBB. Unlike the write API, the v1.x API was coded organically, and is **not** strictly RESTful. These shortcomings will be addressed in time as the APIs mature. - - ## Shortcomings - - The Read API is named because its primary use is by NodeBB itself when navigating between pages. Therefore, the routes almost universally always follow the same path as actual pages on NodeBB itself. There are also a small number of non-`GET` routes, which do not make sense in a Read API. These will be merged into the Write API in time. - - ## Authentication - - There are a multitude of ways to authenticate with the Read API. - - ### Cookie Authentication - - By default, the API will attempt to find a valid session in the browser's cookies. A valid login session is required for API calls that pertain to operations involving a logged-in user. For example, `/api/unread` is a route showing unread topics, and is not accessible by guest users. - - Most data transfer utilities like cURL will allow you to construct something like a cookie, to be sent alongside the request, to function much like a browser cookie. This should work with the API. - - ### Bearer Authentication - - Both the Read API and Write API offer bearer authentication, as administered through the administration panel. - - * Up until v1.14.3, this is provided by [`nodebb-plugin-write-api`](https://github.com/NodeBB/nodebb-plugin-write-api). The Write API plugin needs to be installed before authentication via bearer token is enabled on routes provided by the Read API. - * From NodeBB v1.15.0 onwards, the Write API is available in core, and bearer authentication is available out-of-the-box - - In both cases, a bearer token is issued in the NodeBB admin panel in order to grant access to the API. - - There are two types of tokens: - * A *user token* is associated with a specific uid, and all calls made are made in the name of that user - * A *master token* is not associated with any specific uid, though a `_uid` parameter is required in the request, and then all calls are made in the name of *that* user. - This is the only difference between the two tokens. A master token with `_uid` set to a non-administrator will not allow you to make administrative calls. -tags: - - name: home - description: Routes used at the forum index only - - name: categories - description: Category hierarchy and navigation - - name: topics - - name: posts - - name: users - - name: authentication - description: User authentication (e.g. login/registration) - - name: groups - description: User groups - - name: admin - description: Administrative Control Panel (ACP) routing - - name: emails - description: Email utilities - - name: flags - description: Reporting of content by users - - name: notifications - description: Real-time notifications - - name: search - - name: tags - description: Disparate method of categorizing topics - - name: shorthand - description: Convenience and utility routes for accessing other part of the API - - name: other - description: Other one-off routes that do not fit in a section of their own -paths: - /api/: - $ref: 'read/index.yaml' - /api/admin: - $ref: 'read/admin.yaml' - /api/admin/dashboard: - $ref: 'read/admin/dashboard.yaml' - /api/admin/dashboard/logins: - $ref: 'read/admin/dashboard/logins.yaml' - /api/admin/dashboard/users: - $ref: 'read/admin/dashboard/users.yaml' - /api/admin/dashboard/topics: - $ref: 'read/admin/dashboard/topics.yaml' - /api/admin/dashboard/searches: - $ref: 'read/admin/dashboard/searches.yaml' - "/api/admin/settings/{term}": - $ref: 'read/admin/settings/term.yaml' - /api/admin/settings/languages: - $ref: 'read/admin/settings/languages.yaml' - /api/admin/settings/navigation: - $ref: 'read/admin/settings/navigation.yaml' - /api/admin/settings/homepage: - $ref: 'read/admin/settings/homepage.yaml' - /api/admin/settings/social: - $ref: 'read/admin/settings/social.yaml' - /api/admin/settings/email: - $ref: 'read/admin/settings/email.yaml' - /api/admin/settings/user: - $ref: 'read/admin/settings/user.yaml' - /api/admin/settings/post: - $ref: 'read/admin/settings/post.yaml' - /api/admin/settings/advanced: - $ref: 'read/admin/settings/advanced.yaml' - /api/admin/manage/categories: - $ref: 'read/admin/manage/categories.yaml' - "/api/admin/manage/categories/{category_id}": - $ref: 'read/admin/manage/categories/category_id.yaml' - "/api/admin/manage/categories/{category_id}/analytics": - $ref: 'read/admin/manage/categories/category_id/analytics.yaml' - "/api/admin/manage/privileges/{cid}": - $ref: 'read/admin/manage/privileges/cid.yaml' - /api/admin/manage/tags: - $ref: 'read/admin/manage/tags.yaml' - /api/admin/manage/users: - $ref: 'read/admin/manage/users.yaml' - /api/admin/manage/registration: - $ref: 'read/admin/manage/registration.yaml' - /api/admin/manage/admins-mods: - $ref: 'read/admin/manage/admins-mods.yaml' - /api/admin/manage/groups: - $ref: 'read/admin/manage/groups.yaml' - "/api/admin/manage/groups/{name}": - $ref: 'read/admin/manage/groups/name.yaml' - /api/admin/manage/uploads: - $ref: 'read/admin/manage/uploads.yaml' - /api/admin/manage/digest: - $ref: 'read/admin/manage/digest.yaml' - "/api/admin/appearance/{term}": - $ref: 'read/admin/appearance/term.yaml' - /api/admin/extend/plugins: - $ref: 'read/admin/extend/plugins.yaml' - /api/admin/extend/widgets: - $ref: 'read/admin/extend/widgets.yaml' - /api/admin/extend/rewards: - $ref: 'read/admin/extend/rewards.yaml' - /api/admin/advanced/database: - $ref: 'read/admin/advanced/database.yaml' - /api/admin/advanced/events: - $ref: 'read/admin/advanced/events.yaml' - /api/admin/advanced/hooks: - $ref: 'read/admin/advanced/hooks.yaml' - /api/admin/advanced/logs: - $ref: 'read/admin/advanced/logs.yaml' - /api/admin/advanced/errors: - $ref: 'read/admin/advanced/errors.yaml' - /api/admin/advanced/errors/export: - $ref: 'read/admin/advanced/errors/export.yaml' - /api/admin/advanced/cache: - $ref: 'read/admin/advanced/cache.yaml' - /api/admin/advanced/cache/dump: - $ref: 'read/admin/advanced/cache/dump.yaml' - /api/admin/development/logger: - $ref: 'read/admin/development/logger.yaml' - /api/admin/development/info: - $ref: 'read/admin/development/info.yaml' - /api/admin/users/csv: - $ref: 'read/admin/users/csv.yaml' - /api/admin/groups/{groupname}/csv: - $ref: 'read/admin/groups/groupname/csv.yaml' - /api/admin/analytics: - $ref: 'read/admin/analytics.yaml' - /api/admin/category/uploadpicture: - $ref: 'read/admin/category/uploadpicture.yaml' - /api/admin/uploadfavicon: - $ref: 'read/admin/uploadfavicon.yaml' - /api/admin/uploadTouchIcon: - $ref: 'read/admin/uploadTouchIcon.yaml' - /api/admin/uploadMaskableIcon: - $ref: 'read/admin/uploadMaskableIcon.yaml' - /api/admin/uploadlogo: - $ref: 'read/admin/uploadlogo.yaml' - /api/admin/uploadOgImage: - $ref: 'read/admin/uploadOgImage.yaml' - /api/admin/upload/file: - $ref: 'read/admin/upload/file.yaml' - /api/admin/uploadDefaultAvatar: - $ref: 'read/admin/uploadDefaultAvatar.yaml' - /api/config: - $ref: 'read/config.yaml' - /api/users: - $ref: 'read/users.yaml' - "/api/user/uid/{uid}": - $ref: 'read/user/uid/uid.yaml' - "/api/user/username/{username}": - $ref: 'read/user/username/username.yaml' - "/api/user/email/{email}": - $ref: 'read/user/email/email.yaml' - "/api/user/{userslug}/export/posts": - $ref: 'read/user/userslug/export/posts.yaml' - "/api/user/{userslug}/export/uploads": - $ref: 'read/user/userslug/export/uploads.yaml' - "/api/user/{userslug}/export/profile": - $ref: 'read/user/userslug/export/profile.yaml' - "/api/user/uid/{userslug}/export/{type}": - $ref: 'read/user/uid/userslug/export/type.yaml' - /api/categories: - $ref: 'read/categories.yaml' - "/api/categories/{cid}/moderators": - $ref: 'read/categories/cid/moderators.yaml' - "/api/topic/{topic_id}/{slug}": - $ref: 'read/topic/topic_id.yaml' - "/api/topic/{topic_id}/{slug}/{post_index}": - $ref: 'read/topic/topic_id.yaml' - /api/recent: - $ref: 'read/recent.yaml' - "/api/recent/posts/{term}": - $ref: 'read/recent/posts/term.yaml' - /api/unread: - $ref: 'read/unread.yaml' - /api/unread/total: - $ref: 'read/unread/total.yaml' - "/api/topic/teaser/{topic_id}": - $ref: 'read/topic/teaser/topic_id.yaml' - "/api/topic/pagination/{topic_id}": - $ref: 'read/topic/pagination/topic_id.yaml' - /api/post/upload: - $ref: 'read/post/upload.yaml' - /api/topic/thumb/upload: - $ref: 'read/topic/thumb/upload.yaml' - /api/login: - $ref: 'read/login.yaml' - /api/register: - $ref: 'read/register.yaml' - /api/register/complete: - $ref: 'read/register/complete.yaml' - "/api/confirm/{code}": - $ref: 'read/confirm/code.yaml' - /api/tos: - $ref: 'read/tos.yaml' - /api/search: - $ref: 'read/search.yaml' - "/api/reset": - $ref: 'read/reset.yaml' - "/api/reset/{code}": - $ref: 'read/reset/code.yaml' - "/api/email/unsubscribe/{token}": - $ref: 'read/email/unsubscribe/token.yaml' - "/api/post/{pid}": - $ref: 'read/post/pid.yaml' - /api/flags: - $ref: 'read/flags.yaml' - "/api/flags/{flagId}": - $ref: 'read/flags/flagId.yaml' - /api/post-queue: - $ref: 'read/post-queue.yaml' - "/api/post-queue/{id}": - $ref: 'read/post-queue.yaml' - /api/ip-blacklist: - $ref: 'read/ip-blacklist.yaml' - /api/registration-queue: - $ref: 'read/registration-queue.yaml' - /api/tags: - $ref: 'read/tags.yaml' - "/api/tags/{tag}": - $ref: 'read/tags/tag.yaml' - /api/popular: - $ref: 'read/popular.yaml' - /api/top: - $ref: 'read/top.yaml' - "/api/category/{category_id}/{slug}": - $ref: 'read/category/category_id.yaml' - "/api/category/{category_id}/{slug}/{topic_index}": - $ref: 'read/category/category_id.yaml' - /api/career: - $ref: 'read/career.yaml' - /api/self: - $ref: 'read/self.yaml' - /api/me: - $ref: 'read/me.yaml' - /api/me/*: - $ref: 'read/me.yaml' - "/api/uid/{uid*}": - $ref: 'read/uid/uid.yaml' - "/api/user/{userslug}": - $ref: 'read/user/userslug.yaml' - "/api/user/{userslug}/following": - $ref: 'read/user/userslug/following.yaml' - "/api/user/{userslug}/followers": - $ref: 'read/user/userslug/followers.yaml' - "/api/user/{userslug}/categories": - $ref: 'read/user/userslug/categories.yaml' - "/api/user/{userslug}/posts": - $ref: 'read/user/userslug/posts.yaml' - "/api/user/{userslug}/topics": - $ref: 'read/user/userslug/topics.yaml' - "/api/user/{userslug}/best": - $ref: 'read/user/userslug/best.yaml' - "/api/user/{userslug}/controversial": - $ref: 'read/user/userslug/controversial.yaml' - "/api/user/{userslug}/groups": - $ref: 'read/user/userslug/groups.yaml' - "/api/user/{userslug}/bookmarks": - $ref: 'read/user/userslug/bookmarks.yaml' - "/api/user/{userslug}/watched": - $ref: 'read/user/userslug/watched.yaml' - "/api/user/{userslug}/ignored": - $ref: 'read/user/userslug/ignored.yaml' - "/api/user/{userslug}/upvoted": - $ref: 'read/user/userslug/upvoted.yaml' - "/api/user/{userslug}/downvoted": - $ref: 'read/user/userslug/downvoted.yaml' - "/api/user/{userslug}/edit": - $ref: 'read/user/userslug/edit.yaml' - "/api/user/{userslug}/edit/username": - $ref: 'read/user/userslug/edit/username.yaml' - "/api/user/{userslug}/edit/email": - $ref: 'read/user/userslug/edit/email.yaml' - "/api/user/{userslug}/edit/password": - $ref: 'read/user/userslug/edit/password.yaml' - "/api/user/{userslug}/info": - $ref: 'read/user/userslug/info.yaml' - "/api/user/{userslug}/settings": - $ref: 'read/user/userslug/settings.yaml' - "/api/user/{userslug}/uploads": - $ref: 'read/user/userslug/uploads.yaml' - "/api/user/{userslug}/consent": - $ref: 'read/user/userslug/consent.yaml' - "/api/user/{userslug}/blocks": - $ref: 'read/user/userslug/blocks.yaml' - "/api/user/{userslug}/sessions": - $ref: 'read/user/userslug/sessions.yaml' - "/api/user/{userslug}/session/{uuid}": - $ref: 'read/user/userslug/session/uuid.yaml' - /api/notifications: - $ref: 'read/notifications.yaml' - "/api/user/{userslug}/chats/{roomid}": - $ref: 'read/user/userslug/chats/roomid.yaml' - "/api/chats/{roomid}": - $ref: 'read/chats/roomid.yaml' - /api/groups: - $ref: 'read/groups.yaml' - "/api/groups/{slug}": - $ref: 'read/groups/slug.yaml' - "/api/groups/{slug}/members": - $ref: 'read/groups/slug/members.yaml' - /api/outgoing: +openapi: 3.0.0 +info: + title: NodeBB Read API + version: 1.15.0 + contact: + email: support@nodebb.org + license: + name: GPL-3.0 + description: >- + # Overview + + The following document outlines every Read API route available via NodeBB. Unlike the write API, the v1.x API was coded organically, and is **not** strictly RESTful. These shortcomings will be addressed in time as the APIs mature. + + ## Shortcomings + + The Read API is named because its primary use is by NodeBB itself when navigating between pages. Therefore, the routes almost universally always follow the same path as actual pages on NodeBB itself. There are also a small number of non-`GET` routes, which do not make sense in a Read API. These will be merged into the Write API in time. + + ## Authentication + + There are a multitude of ways to authenticate with the Read API. + + ### Cookie Authentication + + By default, the API will attempt to find a valid session in the browser's cookies. A valid login session is required for API calls that pertain to operations involving a logged-in user. For example, `/api/unread` is a route showing unread topics, and is not accessible by guest users. + + Most data transfer utilities like cURL will allow you to construct something like a cookie, to be sent alongside the request, to function much like a browser cookie. This should work with the API. + + ### Bearer Authentication + + Both the Read API and Write API offer bearer authentication, as administered through the administration panel. + + * Up until v1.14.3, this is provided by [`nodebb-plugin-write-api`](https://github.com/NodeBB/nodebb-plugin-write-api). The Write API plugin needs to be installed before authentication via bearer token is enabled on routes provided by the Read API. + * From NodeBB v1.15.0 onwards, the Write API is available in core, and bearer authentication is available out-of-the-box + + In both cases, a bearer token is issued in the NodeBB admin panel in order to grant access to the API. + + There are two types of tokens: + * A *user token* is associated with a specific uid, and all calls made are made in the name of that user + * A *master token* is not associated with any specific uid, though a `_uid` parameter is required in the request, and then all calls are made in the name of *that* user. + This is the only difference between the two tokens. A master token with `_uid` set to a non-administrator will not allow you to make administrative calls. +tags: + - name: home + description: Routes used at the forum index only + - name: categories + description: Category hierarchy and navigation + - name: topics + - name: posts + - name: users + - name: authentication + description: User authentication (e.g. login/registration) + - name: groups + description: User groups + - name: admin + description: Administrative Control Panel (ACP) routing + - name: emails + description: Email utilities + - name: flags + description: Reporting of content by users + - name: notifications + description: Real-time notifications + - name: search + - name: tags + description: Disparate method of categorizing topics + - name: shorthand + description: Convenience and utility routes for accessing other part of the API + - name: other + description: Other one-off routes that do not fit in a section of their own +paths: + /api/: + $ref: 'read/index.yaml' + /api/admin: + $ref: 'read/admin.yaml' + /api/admin/dashboard: + $ref: 'read/admin/dashboard.yaml' + /api/admin/dashboard/logins: + $ref: 'read/admin/dashboard/logins.yaml' + /api/admin/dashboard/users: + $ref: 'read/admin/dashboard/users.yaml' + /api/admin/dashboard/topics: + $ref: 'read/admin/dashboard/topics.yaml' + /api/admin/dashboard/searches: + $ref: 'read/admin/dashboard/searches.yaml' + "/api/admin/settings/{term}": + $ref: 'read/admin/settings/term.yaml' + /api/admin/settings/languages: + $ref: 'read/admin/settings/languages.yaml' + /api/admin/settings/navigation: + $ref: 'read/admin/settings/navigation.yaml' + /api/admin/settings/homepage: + $ref: 'read/admin/settings/homepage.yaml' + /api/admin/settings/social: + $ref: 'read/admin/settings/social.yaml' + /api/admin/settings/email: + $ref: 'read/admin/settings/email.yaml' + /api/admin/settings/user: + $ref: 'read/admin/settings/user.yaml' + /api/admin/settings/post: + $ref: 'read/admin/settings/post.yaml' + /api/admin/settings/advanced: + $ref: 'read/admin/settings/advanced.yaml' + /api/admin/manage/categories: + $ref: 'read/admin/manage/categories.yaml' + "/api/admin/manage/categories/{category_id}": + $ref: 'read/admin/manage/categories/category_id.yaml' + "/api/admin/manage/categories/{category_id}/analytics": + $ref: 'read/admin/manage/categories/category_id/analytics.yaml' + "/api/admin/manage/privileges/{cid}": + $ref: 'read/admin/manage/privileges/cid.yaml' + /api/admin/manage/tags: + $ref: 'read/admin/manage/tags.yaml' + /api/admin/manage/users: + $ref: 'read/admin/manage/users.yaml' + /api/admin/manage/registration: + $ref: 'read/admin/manage/registration.yaml' + /api/admin/manage/admins-mods: + $ref: 'read/admin/manage/admins-mods.yaml' + /api/admin/manage/groups: + $ref: 'read/admin/manage/groups.yaml' + "/api/admin/manage/groups/{name}": + $ref: 'read/admin/manage/groups/name.yaml' + /api/admin/manage/uploads: + $ref: 'read/admin/manage/uploads.yaml' + /api/admin/manage/digest: + $ref: 'read/admin/manage/digest.yaml' + "/api/admin/appearance/{term}": + $ref: 'read/admin/appearance/term.yaml' + /api/admin/extend/plugins: + $ref: 'read/admin/extend/plugins.yaml' + /api/admin/extend/widgets: + $ref: 'read/admin/extend/widgets.yaml' + /api/admin/extend/rewards: + $ref: 'read/admin/extend/rewards.yaml' + /api/admin/advanced/database: + $ref: 'read/admin/advanced/database.yaml' + /api/admin/advanced/events: + $ref: 'read/admin/advanced/events.yaml' + /api/admin/advanced/hooks: + $ref: 'read/admin/advanced/hooks.yaml' + /api/admin/advanced/logs: + $ref: 'read/admin/advanced/logs.yaml' + /api/admin/advanced/errors: + $ref: 'read/admin/advanced/errors.yaml' + /api/admin/advanced/errors/export: + $ref: 'read/admin/advanced/errors/export.yaml' + /api/admin/advanced/cache: + $ref: 'read/admin/advanced/cache.yaml' + /api/admin/advanced/cache/dump: + $ref: 'read/admin/advanced/cache/dump.yaml' + /api/admin/development/logger: + $ref: 'read/admin/development/logger.yaml' + /api/admin/development/info: + $ref: 'read/admin/development/info.yaml' + /api/admin/users/csv: + $ref: 'read/admin/users/csv.yaml' + /api/admin/groups/{groupname}/csv: + $ref: 'read/admin/groups/groupname/csv.yaml' + /api/admin/analytics: + $ref: 'read/admin/analytics.yaml' + /api/admin/category/uploadpicture: + $ref: 'read/admin/category/uploadpicture.yaml' + /api/admin/uploadfavicon: + $ref: 'read/admin/uploadfavicon.yaml' + /api/admin/uploadTouchIcon: + $ref: 'read/admin/uploadTouchIcon.yaml' + /api/admin/uploadMaskableIcon: + $ref: 'read/admin/uploadMaskableIcon.yaml' + /api/admin/uploadlogo: + $ref: 'read/admin/uploadlogo.yaml' + /api/admin/uploadOgImage: + $ref: 'read/admin/uploadOgImage.yaml' + /api/admin/upload/file: + $ref: 'read/admin/upload/file.yaml' + /api/admin/uploadDefaultAvatar: + $ref: 'read/admin/uploadDefaultAvatar.yaml' + /api/config: + $ref: 'read/config.yaml' + /api/users: + $ref: 'read/users.yaml' + "/api/user/uid/{uid}": + $ref: 'read/user/uid/uid.yaml' + "/api/user/username/{username}": + $ref: 'read/user/username/username.yaml' + "/api/user/email/{email}": + $ref: 'read/user/email/email.yaml' + "/api/user/{userslug}/export/posts": + $ref: 'read/user/userslug/export/posts.yaml' + "/api/user/{userslug}/export/uploads": + $ref: 'read/user/userslug/export/uploads.yaml' + "/api/user/{userslug}/export/profile": + $ref: 'read/user/userslug/export/profile.yaml' + "/api/user/uid/{userslug}/export/{type}": + $ref: 'read/user/uid/userslug/export/type.yaml' + /api/categories: + $ref: 'read/categories.yaml' + "/api/categories/{cid}/moderators": + $ref: 'read/categories/cid/moderators.yaml' + "/api/topic/{topic_id}/{slug}": + $ref: 'read/topic/topic_id.yaml' + "/api/topic/{topic_id}/{slug}/{post_index}": + $ref: 'read/topic/topic_id.yaml' + /api/recent: + $ref: 'read/recent.yaml' + "/api/recent/posts/{term}": + $ref: 'read/recent/posts/term.yaml' + /api/unread: + $ref: 'read/unread.yaml' + /api/unread/total: + $ref: 'read/unread/total.yaml' + "/api/topic/teaser/{topic_id}": + $ref: 'read/topic/teaser/topic_id.yaml' + "/api/topic/pagination/{topic_id}": + $ref: 'read/topic/pagination/topic_id.yaml' + /api/post/upload: + $ref: 'read/post/upload.yaml' + /api/topic/thumb/upload: + $ref: 'read/topic/thumb/upload.yaml' + /api/login: + $ref: 'read/login.yaml' + /api/register: + $ref: 'read/register.yaml' + /api/register/complete: + $ref: 'read/register/complete.yaml' + "/api/confirm/{code}": + $ref: 'read/confirm/code.yaml' + /api/tos: + $ref: 'read/tos.yaml' + /api/search: + $ref: 'read/search.yaml' + "/api/reset": + $ref: 'read/reset.yaml' + "/api/reset/{code}": + $ref: 'read/reset/code.yaml' + "/api/email/unsubscribe/{token}": + $ref: 'read/email/unsubscribe/token.yaml' + "/api/post/{pid}": + $ref: 'read/post/pid.yaml' + /api/flags: + $ref: 'read/flags.yaml' + "/api/flags/{flagId}": + $ref: 'read/flags/flagId.yaml' + /api/post-queue: + $ref: 'read/post-queue.yaml' + "/api/post-queue/{id}": + $ref: 'read/post-queue.yaml' + /api/ip-blacklist: + $ref: 'read/ip-blacklist.yaml' + /api/registration-queue: + $ref: 'read/registration-queue.yaml' + /api/tags: + $ref: 'read/tags.yaml' + "/api/tags/{tag}": + $ref: 'read/tags/tag.yaml' + /api/popular: + $ref: 'read/popular.yaml' + /api/top: + $ref: 'read/top.yaml' + "/api/category/{category_id}/{slug}": + $ref: 'read/category/category_id.yaml' + "/api/category/{category_id}/{slug}/{topic_index}": + $ref: 'read/category/category_id.yaml' + /api/career: + $ref: 'read/career.yaml' + /api/self: + $ref: 'read/self.yaml' + /api/me: + $ref: 'read/me.yaml' + /api/me/*: + $ref: 'read/me.yaml' + "/api/uid/{uid*}": + $ref: 'read/uid/uid.yaml' + "/api/user/{userslug}": + $ref: 'read/user/userslug.yaml' + "/api/user/{userslug}/following": + $ref: 'read/user/userslug/following.yaml' + "/api/user/{userslug}/followers": + $ref: 'read/user/userslug/followers.yaml' + "/api/user/{userslug}/categories": + $ref: 'read/user/userslug/categories.yaml' + "/api/user/{userslug}/posts": + $ref: 'read/user/userslug/posts.yaml' + "/api/user/{userslug}/topics": + $ref: 'read/user/userslug/topics.yaml' + "/api/user/{userslug}/best": + $ref: 'read/user/userslug/best.yaml' + "/api/user/{userslug}/controversial": + $ref: 'read/user/userslug/controversial.yaml' + "/api/user/{userslug}/groups": + $ref: 'read/user/userslug/groups.yaml' + "/api/user/{userslug}/bookmarks": + $ref: 'read/user/userslug/bookmarks.yaml' + "/api/user/{userslug}/watched": + $ref: 'read/user/userslug/watched.yaml' + "/api/user/{userslug}/ignored": + $ref: 'read/user/userslug/ignored.yaml' + "/api/user/{userslug}/upvoted": + $ref: 'read/user/userslug/upvoted.yaml' + "/api/user/{userslug}/downvoted": + $ref: 'read/user/userslug/downvoted.yaml' + "/api/user/{userslug}/edit": + $ref: 'read/user/userslug/edit.yaml' + "/api/user/{userslug}/edit/username": + $ref: 'read/user/userslug/edit/username.yaml' + "/api/user/{userslug}/edit/email": + $ref: 'read/user/userslug/edit/email.yaml' + "/api/user/{userslug}/edit/password": + $ref: 'read/user/userslug/edit/password.yaml' + "/api/user/{userslug}/info": + $ref: 'read/user/userslug/info.yaml' + "/api/user/{userslug}/settings": + $ref: 'read/user/userslug/settings.yaml' + "/api/user/{userslug}/uploads": + $ref: 'read/user/userslug/uploads.yaml' + "/api/user/{userslug}/consent": + $ref: 'read/user/userslug/consent.yaml' + "/api/user/{userslug}/blocks": + $ref: 'read/user/userslug/blocks.yaml' + "/api/user/{userslug}/sessions": + $ref: 'read/user/userslug/sessions.yaml' + "/api/user/{userslug}/session/{uuid}": + $ref: 'read/user/userslug/session/uuid.yaml' + /api/notifications: + $ref: 'read/notifications.yaml' + "/api/user/{userslug}/chats/{roomid}": + $ref: 'read/user/userslug/chats/roomid.yaml' + "/api/chats/{roomid}": + $ref: 'read/chats/roomid.yaml' + /api/groups: + $ref: 'read/groups.yaml' + "/api/groups/{slug}": + $ref: 'read/groups/slug.yaml' + "/api/groups/{slug}/members": + $ref: 'read/groups/slug/members.yaml' + /api/outgoing: $ref: 'read/outgoing.yaml' \ No newline at end of file diff --git a/public/openapi/read/admin.yaml b/public/openapi/read/admin.yaml index 27ec1b9..50507ca 100644 --- a/public/openapi/read/admin.yaml +++ b/public/openapi/read/admin.yaml @@ -1,19 +1,19 @@ -get: - tags: - - admin - summary: Get administrative index - description: | - Internally, NodeBB will redirect you to a different page based on your privilege levels. - - The default is "dashboard" for superadmins and those with the "dashboard" privilege. If the requesting user is neither, then they will be redirected to a page that they have privileges to view (e.g. `/categories`, `/privileges`, `/users`, or `/settings/general`). - - Failing that, the request will be denied. - responses: - "200": - description: | - A JSON object containing data for the default admin index. - content: - application/json: - schema: - properties: {} +get: + tags: + - admin + summary: Get administrative index + description: | + Internally, NodeBB will redirect you to a different page based on your privilege levels. + + The default is "dashboard" for superadmins and those with the "dashboard" privilege. If the requesting user is neither, then they will be redirected to a page that they have privileges to view (e.g. `/categories`, `/privileges`, `/users`, or `/settings/general`). + + Failing that, the request will be denied. + responses: + "200": + description: | + A JSON object containing data for the default admin index. + content: + application/json: + schema: + properties: {} additionalProperties: {} \ No newline at end of file diff --git a/public/openapi/read/admin/advanced/cache.yaml b/public/openapi/read/admin/advanced/cache.yaml index c6daf4f..bdf6044 100644 --- a/public/openapi/read/admin/advanced/cache.yaml +++ b/public/openapi/read/admin/advanced/cache.yaml @@ -1,104 +1,104 @@ -get: - tags: - - admin - summary: Get system cache info - parameters: - - in: query - name: name - schema: - type: string - enum: ['post', 'object', 'group', 'local'] - required: false - description: Specify cache to dump if calling `/dump` - example: 'post' - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - postCache: - type: object - properties: - length: - type: number - max: - type: number - nullable: true - itemCount: - type: number - percentFull: - type: number - hits: - type: string - misses: - type: string - hitRatio: - type: string - enabled: - type: boolean - groupCache: - type: object - properties: - length: - type: number - max: - type: number - itemCount: - type: number - percentFull: - type: number - hits: - type: string - misses: - type: string - hitRatio: - type: string - enabled: - type: boolean - localCache: - type: object - properties: - length: - type: number - max: - type: number - itemCount: - type: number - percentFull: - type: number - hits: - type: string - misses: - type: string - hitRatio: - type: string - enabled: - type: boolean - objectCache: - type: object - properties: - length: - type: number - max: - type: number - itemCount: - type: number - percentFull: - type: number - hits: - type: string - misses: - type: string - hitRatio: - type: string - enabled: - type: boolean - required: - - postCache - - groupCache - - localCache +get: + tags: + - admin + summary: Get system cache info + parameters: + - in: query + name: name + schema: + type: string + enum: ['post', 'object', 'group', 'local'] + required: false + description: Specify cache to dump if calling `/dump` + example: 'post' + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + postCache: + type: object + properties: + length: + type: number + max: + type: number + nullable: true + itemCount: + type: number + percentFull: + type: number + hits: + type: string + misses: + type: string + hitRatio: + type: string + enabled: + type: boolean + groupCache: + type: object + properties: + length: + type: number + max: + type: number + itemCount: + type: number + percentFull: + type: number + hits: + type: string + misses: + type: string + hitRatio: + type: string + enabled: + type: boolean + localCache: + type: object + properties: + length: + type: number + max: + type: number + itemCount: + type: number + percentFull: + type: number + hits: + type: string + misses: + type: string + hitRatio: + type: string + enabled: + type: boolean + objectCache: + type: object + properties: + length: + type: number + max: + type: number + itemCount: + type: number + percentFull: + type: number + hits: + type: string + misses: + type: string + hitRatio: + type: string + enabled: + type: boolean + required: + - postCache + - groupCache + - localCache - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/advanced/cache/dump.yaml b/public/openapi/read/admin/advanced/cache/dump.yaml index 2be4e38..8a539ce 100644 --- a/public/openapi/read/admin/advanced/cache/dump.yaml +++ b/public/openapi/read/admin/advanced/cache/dump.yaml @@ -1,23 +1,23 @@ -get: - tags: - - admin - summary: Get system cache info - parameters: - - in: query - name: name - schema: - type: string - enum: ['post', 'object', 'group', 'local'] - required: false - description: Specify cache to dump if calling `/dump` - example: 'post' - responses: - "200": - description: "" - content: - application/json: - schema: - type: object - properties: {} - additionalProperties: +get: + tags: + - admin + summary: Get system cache info + parameters: + - in: query + name: name + schema: + type: string + enum: ['post', 'object', 'group', 'local'] + required: false + description: Specify cache to dump if calling `/dump` + example: 'post' + responses: + "200": + description: "" + content: + application/json: + schema: + type: object + properties: {} + additionalProperties: description: The type of response is dependent on the database used. Please examine the output. \ No newline at end of file diff --git a/public/openapi/read/admin/advanced/database.yaml b/public/openapi/read/admin/advanced/database.yaml index ae2676b..828e752 100644 --- a/public/openapi/read/admin/advanced/database.yaml +++ b/public/openapi/read/admin/advanced/database.yaml @@ -1,14 +1,14 @@ -get: - tags: - - admin - summary: Get database information - responses: - "200": - description: "A JSON object with database status information" - content: - application/json: - schema: - properties: {} - additionalProperties: - type: object +get: + tags: + - admin + summary: Get database information + responses: + "200": + description: "A JSON object with database status information" + content: + application/json: + schema: + properties: {} + additionalProperties: + type: object description: Each database configured will have an entry here with information about its runtime status \ No newline at end of file diff --git a/public/openapi/read/admin/advanced/errors.yaml b/public/openapi/read/admin/advanced/errors.yaml index a409e47..97d8df5 100644 --- a/public/openapi/read/admin/advanced/errors.yaml +++ b/public/openapi/read/admin/advanced/errors.yaml @@ -1,38 +1,38 @@ -get: - tags: - - admin - summary: Get server-side errors - responses: - "200": - description: "A JSON object containing server-side errors" - content: - application/json: - schema: - allOf: - - type: object - properties: - not-found: - type: array - items: - type: object - properties: - value: - type: string - description: Path to the requested URL that returned a 404 - score: - type: number - description: The number of times that URL was requested - analytics: - type: object - properties: - not-found: - type: array - description: 404 responses groups by day, from 6 days ago, to present day - items: - type: number - toobusy: - type: array - description: 503 responses groups by day, from 6 days ago, to present day - items: - type: number +get: + tags: + - admin + summary: Get server-side errors + responses: + "200": + description: "A JSON object containing server-side errors" + content: + application/json: + schema: + allOf: + - type: object + properties: + not-found: + type: array + items: + type: object + properties: + value: + type: string + description: Path to the requested URL that returned a 404 + score: + type: number + description: The number of times that URL was requested + analytics: + type: object + properties: + not-found: + type: array + description: 404 responses groups by day, from 6 days ago, to present day + items: + type: number + toobusy: + type: array + description: 503 responses groups by day, from 6 days ago, to present day + items: + type: number - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/advanced/errors/export.yaml b/public/openapi/read/admin/advanced/errors/export.yaml index 4cb6a3f..89c3391 100644 --- a/public/openapi/read/admin/advanced/errors/export.yaml +++ b/public/openapi/read/admin/advanced/errors/export.yaml @@ -1,12 +1,12 @@ -get: - tags: - - admin - summary: Export errors (.csv) - responses: - "200": - description: "A CSV file containing server-side errors" - content: - text/csv: - schema: - type: string +get: + tags: + - admin + summary: Export errors (.csv) + responses: + "200": + description: "A CSV file containing server-side errors" + content: + text/csv: + schema: + type: string format: binary \ No newline at end of file diff --git a/public/openapi/read/admin/advanced/events.yaml b/public/openapi/read/admin/advanced/events.yaml index 72ce4be..c590863 100644 --- a/public/openapi/read/admin/advanced/events.yaml +++ b/public/openapi/read/admin/advanced/events.yaml @@ -1,65 +1,65 @@ -get: - tags: - - admin - summary: Get event log - parameters: - - in: query - name: type - schema: - type: string - description: Event name to filter by - example: config-change - - in: query - name: start - schema: - type: string - description: Start date to filter by - example: '' - - in: query - name: end - schema: - type: string - description: End date to filter by - example: '' - - in: query - name: perPage - schema: - type: string - description: Limit the number of events returned per page - example: 20 - responses: - "200": - description: "A JSON object containing " - content: - application/json: - schema: - allOf: - - type: object - properties: - events: - type: array - items: - type: object - properties: - type: - type: string - additionalProperties: - description: Each individual event as added by core/plugins can append their own metadata related to the event - - $ref: ../../../components/schemas/Pagination.yaml#/Pagination - - type: object - properties: - types: - type: array - items: - type: object - properties: - value: - type: string - name: - type: string - selected: - type: boolean - query: - additionalProperties: - description: An object containing the query string parameters, if any +get: + tags: + - admin + summary: Get event log + parameters: + - in: query + name: type + schema: + type: string + description: Event name to filter by + example: config-change + - in: query + name: start + schema: + type: string + description: Start date to filter by + example: '' + - in: query + name: end + schema: + type: string + description: End date to filter by + example: '' + - in: query + name: perPage + schema: + type: string + description: Limit the number of events returned per page + example: 20 + responses: + "200": + description: "A JSON object containing " + content: + application/json: + schema: + allOf: + - type: object + properties: + events: + type: array + items: + type: object + properties: + type: + type: string + additionalProperties: + description: Each individual event as added by core/plugins can append their own metadata related to the event + - $ref: ../../../components/schemas/Pagination.yaml#/Pagination + - type: object + properties: + types: + type: array + items: + type: object + properties: + value: + type: string + name: + type: string + selected: + type: boolean + query: + additionalProperties: + description: An object containing the query string parameters, if any - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/advanced/hooks.yaml b/public/openapi/read/admin/advanced/hooks.yaml index d43da54..f1c7521 100644 --- a/public/openapi/read/admin/advanced/hooks.yaml +++ b/public/openapi/read/admin/advanced/hooks.yaml @@ -1,45 +1,45 @@ -get: - tags: - - admin - summary: Get active plugin hooks - responses: - "200": - description: "A JSON object containing all hooks with active listeners" - content: - application/json: - schema: - allOf: - - type: object - properties: - hooks: - type: array - items: - type: object - properties: - hookName: - type: string - description: The name of the hook (also the name used in code) - methods: - type: array - items: - type: object - properties: - id: - type: string - description: Plugin listening to this hook - priority: - type: number - description: Priority level, lower priorities are executed earlier - method: - type: string - description: Stringified method for examination - index: - type: string - description: Internal counter used for DOM element ids - index: - type: string - description: Internal counter used for DOM element ids - count: - type: number - description: The number of listeners subscribed to this hook +get: + tags: + - admin + summary: Get active plugin hooks + responses: + "200": + description: "A JSON object containing all hooks with active listeners" + content: + application/json: + schema: + allOf: + - type: object + properties: + hooks: + type: array + items: + type: object + properties: + hookName: + type: string + description: The name of the hook (also the name used in code) + methods: + type: array + items: + type: object + properties: + id: + type: string + description: Plugin listening to this hook + priority: + type: number + description: Priority level, lower priorities are executed earlier + method: + type: string + description: Stringified method for examination + index: + type: string + description: Internal counter used for DOM element ids + index: + type: string + description: Internal counter used for DOM element ids + count: + type: number + description: The number of listeners subscribed to this hook - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/advanced/logs.yaml b/public/openapi/read/admin/advanced/logs.yaml index 57c1245..87d37e4 100644 --- a/public/openapi/read/admin/advanced/logs.yaml +++ b/public/openapi/read/admin/advanced/logs.yaml @@ -1,17 +1,17 @@ -get: - tags: - - admin - summary: Get server-side log output - responses: - "200": - description: "A JSON object containing the server-side log" - content: - application/json: - schema: - allOf: - - type: object - properties: - data: - type: string - description: Output of the server-side log file +get: + tags: + - admin + summary: Get server-side log output + responses: + "200": + description: "A JSON object containing the server-side log" + content: + application/json: + schema: + allOf: + - type: object + properties: + data: + type: string + description: Output of the server-side log file - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/analytics.yaml b/public/openapi/read/admin/analytics.yaml index 508325a..4961ff9 100644 --- a/public/openapi/read/admin/analytics.yaml +++ b/public/openapi/read/admin/analytics.yaml @@ -1,58 +1,58 @@ -get: - tags: - - admin - summary: Get site analytics - parameters: - - in: query - name: units - schema: - type: string - enum: [hours, days] - description: Whether to display dashboard data segmented daily or hourly - example: days - - in: query - name: until - schema: - type: number - description: A UNIX timestamp denoting the end of the analytics reporting period - example: '' - - in: query - name: count - schema: - type: number - description: The number of entries to return (e.g. if `units` is `hourly`, and `count` is `24`, the result set will contain 24 hours' worth of analytics) - example: 20 - responses: - "200": - description: "A JSON object containing analytics data" - content: - application/json: - schema: - type: object - properties: - query: - additionalProperties: - description: The query string passed in - result: - type: object - properties: - uniquevisitors: - type: array - items: - type: number - pageviews: - type: array - items: - type: number - pageviews:registered: - type: array - items: - type: number - pageviews:bot: - type: array - items: - type: number - pageviews:guest: - type: array - items: +get: + tags: + - admin + summary: Get site analytics + parameters: + - in: query + name: units + schema: + type: string + enum: [hours, days] + description: Whether to display dashboard data segmented daily or hourly + example: days + - in: query + name: until + schema: + type: number + description: A UNIX timestamp denoting the end of the analytics reporting period + example: '' + - in: query + name: count + schema: + type: number + description: The number of entries to return (e.g. if `units` is `hourly`, and `count` is `24`, the result set will contain 24 hours' worth of analytics) + example: 20 + responses: + "200": + description: "A JSON object containing analytics data" + content: + application/json: + schema: + type: object + properties: + query: + additionalProperties: + description: The query string passed in + result: + type: object + properties: + uniquevisitors: + type: array + items: + type: number + pageviews: + type: array + items: + type: number + pageviews:registered: + type: array + items: + type: number + pageviews:bot: + type: array + items: + type: number + pageviews:guest: + type: array + items: type: number \ No newline at end of file diff --git a/public/openapi/read/admin/appearance/term.yaml b/public/openapi/read/admin/appearance/term.yaml index 5c8364f..c6d5274 100644 --- a/public/openapi/read/admin/appearance/term.yaml +++ b/public/openapi/read/admin/appearance/term.yaml @@ -1,18 +1,18 @@ -get: - tags: - - admin - summary: Get appearance settings - parameters: - - name: term - in: path - required: true - schema: - type: string - example: themes - responses: - "200": - description: "" - content: - application/json: - schema: +get: + tags: + - admin + summary: Get appearance settings + parameters: + - name: term + in: path + required: true + schema: + type: string + example: themes + responses: + "200": + description: "" + content: + application/json: + schema: $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/category/uploadpicture.yaml b/public/openapi/read/admin/category/uploadpicture.yaml index 76ca5c1..c04d91f 100644 --- a/public/openapi/read/admin/category/uploadpicture.yaml +++ b/public/openapi/read/admin/category/uploadpicture.yaml @@ -1,37 +1,37 @@ -post: - tags: - - admin - summary: Update category picture (via image upload) - requestBody: - required: true - content: - multipart/form-data: - schema: - type: object - properties: - cid: - type: number - description: Category identifier whose picture will be set after successful upload - example: 1 - files: - type: array - items: - type: string - format: binary - required: - - cid - - files - responses: - "200": - description: "Image uploaded" - content: - application/json: - schema: - type: object - properties: - name: - type: string - description: The filename - url: - type: string +post: + tags: + - admin + summary: Update category picture (via image upload) + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + cid: + type: number + description: Category identifier whose picture will be set after successful upload + example: 1 + files: + type: array + items: + type: string + format: binary + required: + - cid + - files + responses: + "200": + description: "Image uploaded" + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: The filename + url: + type: string description: URL of the uploaded image for use client-side \ No newline at end of file diff --git a/public/openapi/read/admin/dashboard.yaml b/public/openapi/read/admin/dashboard.yaml index a281150..51dd4e4 100644 --- a/public/openapi/read/admin/dashboard.yaml +++ b/public/openapi/read/admin/dashboard.yaml @@ -1,64 +1,64 @@ -get: - tags: - - admin - summary: Get administrative dashboard - responses: - "200": - description: A JSON object containing dashboard data - content: - application/json: - schema: - allOf: - - type: object - properties: - version: - type: string - lookupFailed: - type: boolean - latestVersion: - type: string - nullable: true - upgradeAvailable: - type: boolean - nullable: true - currentPrerelease: - type: boolean - notices: - type: array - items: - type: object - properties: - done: - type: boolean - doneText: - type: string - notDoneText: - type: string - tooltip: - type: string - link: - type: string - required: - - done - canRestart: - type: boolean - lastrestart: - nullable: true - type: object - properties: - uid: - type: number - description: A user identifier - ip: - type: string - timestamp: - type: number - user: - $ref: ../../components/schemas/UserObject.yaml#/UserObject - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - showSystemControls: - type: boolean - - $ref: ../../components/schemas/admin/dashboard.yaml#/Stats +get: + tags: + - admin + summary: Get administrative dashboard + responses: + "200": + description: A JSON object containing dashboard data + content: + application/json: + schema: + allOf: + - type: object + properties: + version: + type: string + lookupFailed: + type: boolean + latestVersion: + type: string + nullable: true + upgradeAvailable: + type: boolean + nullable: true + currentPrerelease: + type: boolean + notices: + type: array + items: + type: object + properties: + done: + type: boolean + doneText: + type: string + notDoneText: + type: string + tooltip: + type: string + link: + type: string + required: + - done + canRestart: + type: boolean + lastrestart: + nullable: true + type: object + properties: + uid: + type: number + description: A user identifier + ip: + type: string + timestamp: + type: number + user: + $ref: ../../components/schemas/UserObject.yaml#/UserObject + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + showSystemControls: + type: boolean + - $ref: ../../components/schemas/admin/dashboard.yaml#/Stats - $ref: ../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/dashboard/logins.yaml b/public/openapi/read/admin/dashboard/logins.yaml index 2b3280e..611a9e4 100644 --- a/public/openapi/read/admin/dashboard/logins.yaml +++ b/public/openapi/read/admin/dashboard/logins.yaml @@ -1,55 +1,55 @@ -get: - tags: - - admin - summary: Get detailed login analytics - responses: - "200": - description: A JSON object containing more detailed analytics related to user login sessions. - content: - application/json: - schema: - allOf: - - type: object - properties: - set: - type: string - description: The analytics set that is being queried - query: - additionalProperties: - description: An object containing the query string parameters, if any - summary: - type: object - properties: - day: - type: number - week: - type: number - month: - type: number - sessions: - type: array - items: - type: object - properties: - ip: - type: string - uuid: - type: string - datetime: - type: number - platform: - type: string - browser: - type: string - version: - type: string - current: - type: boolean - datetimeISO: - type: string - user: - $ref: ../../../components/schemas/UserObj.yaml#/UserObj - loginDays: - type: number - - $ref: ../../../components/schemas/admin/dashboard.yaml#/Stats +get: + tags: + - admin + summary: Get detailed login analytics + responses: + "200": + description: A JSON object containing more detailed analytics related to user login sessions. + content: + application/json: + schema: + allOf: + - type: object + properties: + set: + type: string + description: The analytics set that is being queried + query: + additionalProperties: + description: An object containing the query string parameters, if any + summary: + type: object + properties: + day: + type: number + week: + type: number + month: + type: number + sessions: + type: array + items: + type: object + properties: + ip: + type: string + uuid: + type: string + datetime: + type: number + platform: + type: string + browser: + type: string + version: + type: string + current: + type: boolean + datetimeISO: + type: string + user: + $ref: ../../../components/schemas/UserObj.yaml#/UserObj + loginDays: + type: number + - $ref: ../../../components/schemas/admin/dashboard.yaml#/Stats - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/dashboard/searches.yaml b/public/openapi/read/admin/dashboard/searches.yaml index 7097c8b..a4d9933 100644 --- a/public/openapi/read/admin/dashboard/searches.yaml +++ b/public/openapi/read/admin/dashboard/searches.yaml @@ -1,25 +1,25 @@ -get: - tags: - - admin - summary: Get detailed user registration analytics - responses: - "200": - description: A JSON object containing popular searches. - content: - application/json: - schema: - allOf: - - type: object - properties: - searches: - type: array - items: - type: object - properties: - value: - type: string - description: The string that was searched - score: - type: number - description: Number of times this string has been searched +get: + tags: + - admin + summary: Get detailed user registration analytics + responses: + "200": + description: A JSON object containing popular searches. + content: + application/json: + schema: + allOf: + - type: object + properties: + searches: + type: array + items: + type: object + properties: + value: + type: string + description: The string that was searched + score: + type: number + description: Number of times this string has been searched - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/dashboard/topics.yaml b/public/openapi/read/admin/dashboard/topics.yaml index 2a78789..f4dc3b4 100644 --- a/public/openapi/read/admin/dashboard/topics.yaml +++ b/public/openapi/read/admin/dashboard/topics.yaml @@ -1,34 +1,34 @@ -get: - tags: - - admin - summary: Get detailed user registration analytics - responses: - "200": - description: A JSON object containing more detailed analytics related to user registrations. - content: - application/json: - schema: - allOf: - - type: object - properties: - set: - type: string - description: The analytics set that is being queried - query: - additionalProperties: - description: An object containing the query string parameters, if any - summary: - type: object - properties: - day: - type: number - week: - type: number - month: - type: number - topics: - type: array - items: - $ref: ../../../components/schemas/TopicObject.yaml#/TopicObject - - $ref: ../../../components/schemas/admin/dashboard.yaml#/Stats +get: + tags: + - admin + summary: Get detailed user registration analytics + responses: + "200": + description: A JSON object containing more detailed analytics related to user registrations. + content: + application/json: + schema: + allOf: + - type: object + properties: + set: + type: string + description: The analytics set that is being queried + query: + additionalProperties: + description: An object containing the query string parameters, if any + summary: + type: object + properties: + day: + type: number + week: + type: number + month: + type: number + topics: + type: array + items: + $ref: ../../../components/schemas/TopicObject.yaml#/TopicObject + - $ref: ../../../components/schemas/admin/dashboard.yaml#/Stats - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/dashboard/users.yaml b/public/openapi/read/admin/dashboard/users.yaml index 67c101d..f3bd960 100644 --- a/public/openapi/read/admin/dashboard/users.yaml +++ b/public/openapi/read/admin/dashboard/users.yaml @@ -1,34 +1,34 @@ -get: - tags: - - admin - summary: Get detailed user registration analytics - responses: - "200": - description: A JSON object containing more detailed analytics related to user registrations. - content: - application/json: - schema: - allOf: - - type: object - properties: - set: - type: string - description: The analytics set that is being queried - query: - additionalProperties: - description: An object containing the query string parameters, if any - summary: - type: object - properties: - day: - type: number - week: - type: number - month: - type: number - users: - type: array - items: - $ref: ../../../components/schemas/UserObject.yaml#/UserObject - - $ref: ../../../components/schemas/admin/dashboard.yaml#/Stats +get: + tags: + - admin + summary: Get detailed user registration analytics + responses: + "200": + description: A JSON object containing more detailed analytics related to user registrations. + content: + application/json: + schema: + allOf: + - type: object + properties: + set: + type: string + description: The analytics set that is being queried + query: + additionalProperties: + description: An object containing the query string parameters, if any + summary: + type: object + properties: + day: + type: number + week: + type: number + month: + type: number + users: + type: array + items: + $ref: ../../../components/schemas/UserObject.yaml#/UserObject + - $ref: ../../../components/schemas/admin/dashboard.yaml#/Stats - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/development/info.yaml b/public/openapi/read/admin/development/info.yaml index 23d277f..1a1b8ae 100644 --- a/public/openapi/read/admin/development/info.yaml +++ b/public/openapi/read/admin/development/info.yaml @@ -1,166 +1,166 @@ -get: - tags: - - admin - summary: Get process/system information - responses: - "200": - description: "A JSON object containing process and system information" - content: - application/json: - schema: - allOf: - - type: object - properties: - info: - type: array - items: - type: object - properties: - process: - type: object - properties: - port: - description: An array containing the port numbers configured to be used by NodeBB processes - oneOf: - - type: array - items: - oneOf: - - type: string - - type: number - - type: string - - type: number - pid: - type: number - description: Process id - title: - type: number - description: Executable - version: - type: number - description: NodeBB version - memoryUsage: - type: object - properties: - rss: - type: number - heapTotal: - type: number - heapUsed: - type: number - external: - type: number - arrayBuffers: - type: number - humanReadable: - type: number - required: - - rss - - heapTotal - - heapUsed - - external - - humanReadable - uptime: - type: number - uptimeHumanReadable: - type: string - cpuUsage: - type: object - properties: - user: - type: string - system: - type: string - os: - type: object - properties: - hostname: - type: string - type: - type: string - platform: - type: string - arch: - type: string - release: - type: string - load: - type: string - description: CPU load - freemem: - type: string - totalmem: - type: string - nodebb: - type: object - properties: - isPrimary: - type: boolean - isCluster: - type: boolean - runJobs: - type: boolean - jobsDisabled: - type: boolean - git: - type: object - properties: - hash: - type: string - hashShort: - type: string - branch: - type: string - stats: - type: object - properties: - onlineGuestCount: - type: number - onlineRegisteredCount: - type: number - socketCount: - type: number - users: - type: object - properties: - categories: - type: number - recent: - type: number - unread: - type: number - topics: - type: number - category: - type: number - topics: - type: array - id: - type: string - infoJSON: - type: string - description: "`info`, but stringified" - host: - type: string - description: Server hostname - port: - description: An array containing the port numbers configured to be used by NodeBB processes - oneOf: - - type: array - items: - oneOf: - - type: string - - type: number - - type: string - - type: number - nodeCount: - type: number - description: The number of NodeBB application processes currently running - timeout: - type: number - ip: - type: string - loggedIn: - type: boolean - relative_path: - type: string +get: + tags: + - admin + summary: Get process/system information + responses: + "200": + description: "A JSON object containing process and system information" + content: + application/json: + schema: + allOf: + - type: object + properties: + info: + type: array + items: + type: object + properties: + process: + type: object + properties: + port: + description: An array containing the port numbers configured to be used by NodeBB processes + oneOf: + - type: array + items: + oneOf: + - type: string + - type: number + - type: string + - type: number + pid: + type: number + description: Process id + title: + type: number + description: Executable + version: + type: number + description: NodeBB version + memoryUsage: + type: object + properties: + rss: + type: number + heapTotal: + type: number + heapUsed: + type: number + external: + type: number + arrayBuffers: + type: number + humanReadable: + type: number + required: + - rss + - heapTotal + - heapUsed + - external + - humanReadable + uptime: + type: number + uptimeHumanReadable: + type: string + cpuUsage: + type: object + properties: + user: + type: string + system: + type: string + os: + type: object + properties: + hostname: + type: string + type: + type: string + platform: + type: string + arch: + type: string + release: + type: string + load: + type: string + description: CPU load + freemem: + type: string + totalmem: + type: string + nodebb: + type: object + properties: + isPrimary: + type: boolean + isCluster: + type: boolean + runJobs: + type: boolean + jobsDisabled: + type: boolean + git: + type: object + properties: + hash: + type: string + hashShort: + type: string + branch: + type: string + stats: + type: object + properties: + onlineGuestCount: + type: number + onlineRegisteredCount: + type: number + socketCount: + type: number + users: + type: object + properties: + categories: + type: number + recent: + type: number + unread: + type: number + topics: + type: number + category: + type: number + topics: + type: array + id: + type: string + infoJSON: + type: string + description: "`info`, but stringified" + host: + type: string + description: Server hostname + port: + description: An array containing the port numbers configured to be used by NodeBB processes + oneOf: + - type: array + items: + oneOf: + - type: string + - type: number + - type: string + - type: number + nodeCount: + type: number + description: The number of NodeBB application processes currently running + timeout: + type: number + ip: + type: string + loggedIn: + type: boolean + relative_path: + type: string - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/development/logger.yaml b/public/openapi/read/admin/development/logger.yaml index bc02dc6..bb0402d 100644 --- a/public/openapi/read/admin/development/logger.yaml +++ b/public/openapi/read/admin/development/logger.yaml @@ -1,11 +1,11 @@ -get: - tags: - - admin - summary: Get system logger settings - responses: - "200": - description: "" - content: - application/json: - schema: +get: + tags: + - admin + summary: Get system logger settings + responses: + "200": + description: "" + content: + application/json: + schema: $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/extend/plugins.yaml b/public/openapi/read/admin/extend/plugins.yaml index 8613d26..f5a235c 100644 --- a/public/openapi/read/admin/extend/plugins.yaml +++ b/public/openapi/read/admin/extend/plugins.yaml @@ -1,206 +1,206 @@ -get: - tags: - - admin - summary: Get system plugin settings - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - installed: - type: array - items: - type: object - properties: - latest: - type: string - description: - type: string - name: - type: string - updated: - type: string - url: - type: string - numInstalls: - type: number - isCompatible: - type: boolean - id: - type: string - installed: - type: boolean - active: - type: boolean - isTheme: - type: boolean - error: - type: boolean - version: - type: string - license: - type: object - properties: - name: - type: string - text: - type: string - nullable: true - outdated: - type: boolean - settingsRoute: - type: string - required: - - latest - - description - - name - - id - - installed - - active - - isTheme - - error - - version - - license - - outdated - installedCount: - type: number - activeCount: - type: number - inactiveCount: - type: number - upgradeCount: - type: number - download: - type: array - items: - type: object - properties: - name: - type: string - updated: - type: string - description: - type: string - latest: - type: string - url: - type: string - numInstalls: - type: number - isCompatible: - type: boolean - id: - type: string - installed: - type: boolean - active: - type: boolean - required: - - name - - updated - - latest - - url - - numInstalls - - isCompatible - - id - - installed - - active - incompatible: - type: array - items: - type: object - properties: - latest: - type: string - description: - type: string - name: - type: string - updated: - type: string - url: - type: string - numInstalls: - type: number - isCompatible: - type: boolean - id: - type: string - installed: - type: boolean - active: - type: boolean - downloads: - type: number - required: - - name - - updated - - latest - - url - - numInstalls - - isCompatible - - id - - installed - - active - trending: - type: array - items: - type: object - properties: - latest: - type: string - description: - type: string - name: - type: string - updated: - type: string - url: - type: string - numInstalls: - type: number - isCompatible: - type: boolean - id: - type: string - installed: - type: boolean - active: - type: boolean - isTheme: - type: boolean - error: - type: boolean - version: - type: string - license: - type: object - properties: - name: - type: string - text: - type: string - nullable: true - outdated: - type: boolean - settingsRoute: - type: string - downloads: - type: number - required: - - latest - - description - - name - - id - - installed - - active - - downloads - submitPluginUsage: - type: number - version: - type: string +get: + tags: + - admin + summary: Get system plugin settings + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + installed: + type: array + items: + type: object + properties: + latest: + type: string + description: + type: string + name: + type: string + updated: + type: string + url: + type: string + numInstalls: + type: number + isCompatible: + type: boolean + id: + type: string + installed: + type: boolean + active: + type: boolean + isTheme: + type: boolean + error: + type: boolean + version: + type: string + license: + type: object + properties: + name: + type: string + text: + type: string + nullable: true + outdated: + type: boolean + settingsRoute: + type: string + required: + - latest + - description + - name + - id + - installed + - active + - isTheme + - error + - version + - license + - outdated + installedCount: + type: number + activeCount: + type: number + inactiveCount: + type: number + upgradeCount: + type: number + download: + type: array + items: + type: object + properties: + name: + type: string + updated: + type: string + description: + type: string + latest: + type: string + url: + type: string + numInstalls: + type: number + isCompatible: + type: boolean + id: + type: string + installed: + type: boolean + active: + type: boolean + required: + - name + - updated + - latest + - url + - numInstalls + - isCompatible + - id + - installed + - active + incompatible: + type: array + items: + type: object + properties: + latest: + type: string + description: + type: string + name: + type: string + updated: + type: string + url: + type: string + numInstalls: + type: number + isCompatible: + type: boolean + id: + type: string + installed: + type: boolean + active: + type: boolean + downloads: + type: number + required: + - name + - updated + - latest + - url + - numInstalls + - isCompatible + - id + - installed + - active + trending: + type: array + items: + type: object + properties: + latest: + type: string + description: + type: string + name: + type: string + updated: + type: string + url: + type: string + numInstalls: + type: number + isCompatible: + type: boolean + id: + type: string + installed: + type: boolean + active: + type: boolean + isTheme: + type: boolean + error: + type: boolean + version: + type: string + license: + type: object + properties: + name: + type: string + text: + type: string + nullable: true + outdated: + type: boolean + settingsRoute: + type: string + downloads: + type: number + required: + - latest + - description + - name + - id + - installed + - active + - downloads + submitPluginUsage: + type: number + version: + type: string - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/extend/rewards.yaml b/public/openapi/read/admin/extend/rewards.yaml index fcd9b4b..56bfe03 100644 --- a/public/openapi/read/admin/extend/rewards.yaml +++ b/public/openapi/read/admin/extend/rewards.yaml @@ -1,85 +1,85 @@ -get: - tags: - - admin - summary: Get rewards settings - responses: - "200": - description: "A JSON object containing rewards and their settings" - content: - application/json: - schema: - allOf: - - type: object - properties: - active: - type: array - items: - type: object - properties: - condition: - type: string - conditional: - type: string - value: - type: number - rid: - type: string - claimable: - type: string - id: - type: string - disabled: - type: boolean - rewards: - type: array - items: - additionalProperties: {} - description: Reward-specific properties - conditions: - type: array - items: - type: object - properties: - name: - type: string - condition: - type: string - conditionals: - type: array - items: - type: object - properties: - name: - type: string - conditional: - type: string - rewards: - type: array - items: - type: object - properties: - rid: - type: string - name: - type: string - inputs: - type: array - items: - type: object - properties: - type: - type: string - name: - type: string - label: - type: string - values: - type: array - items: - type: object - properties: - name: - type: string - value: - type: string +get: + tags: + - admin + summary: Get rewards settings + responses: + "200": + description: "A JSON object containing rewards and their settings" + content: + application/json: + schema: + allOf: + - type: object + properties: + active: + type: array + items: + type: object + properties: + condition: + type: string + conditional: + type: string + value: + type: number + rid: + type: string + claimable: + type: string + id: + type: string + disabled: + type: boolean + rewards: + type: array + items: + additionalProperties: {} + description: Reward-specific properties + conditions: + type: array + items: + type: object + properties: + name: + type: string + condition: + type: string + conditionals: + type: array + items: + type: object + properties: + name: + type: string + conditional: + type: string + rewards: + type: array + items: + type: object + properties: + rid: + type: string + name: + type: string + inputs: + type: array + items: + type: object + properties: + type: + type: string + name: + type: string + label: + type: string + values: + type: array + items: + type: object + properties: + name: + type: string + value: + type: string - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/extend/widgets.yaml b/public/openapi/read/admin/extend/widgets.yaml index 90527bf..bfbb796 100644 --- a/public/openapi/read/admin/extend/widgets.yaml +++ b/public/openapi/read/admin/extend/widgets.yaml @@ -1,90 +1,90 @@ -get: - tags: - - admin - summary: Get widget settings - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - templates: - type: array - items: - type: object - properties: - template: - type: string - areas: - type: array - items: - type: object - properties: - name: - type: string - location: - type: string - areas: - type: array - items: - type: object - properties: - name: - type: string - template: - type: string - location: - type: string - data: - type: array - items: - type: object - properties: - widget: - type: string - data: - type: object - properties: - html: - type: string - cid: - type: string - title: - type: string - container: - type: string - groups: - type: array - items: {} - groupsHideFrom: - type: array - items: {} - hide-mobile: - type: string - numTags: - type: string - numUsers: - type: string - text: - type: string - parseAsPost: - type: string - numTopics: - type: string - availableWidgets: - type: array - items: - type: object - properties: - widget: - type: string - name: - type: string - description: - type: string - content: - type: string +get: + tags: + - admin + summary: Get widget settings + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + templates: + type: array + items: + type: object + properties: + template: + type: string + areas: + type: array + items: + type: object + properties: + name: + type: string + location: + type: string + areas: + type: array + items: + type: object + properties: + name: + type: string + template: + type: string + location: + type: string + data: + type: array + items: + type: object + properties: + widget: + type: string + data: + type: object + properties: + html: + type: string + cid: + type: string + title: + type: string + container: + type: string + groups: + type: array + items: {} + groupsHideFrom: + type: array + items: {} + hide-mobile: + type: string + numTags: + type: string + numUsers: + type: string + text: + type: string + parseAsPost: + type: string + numTopics: + type: string + availableWidgets: + type: array + items: + type: object + properties: + widget: + type: string + name: + type: string + description: + type: string + content: + type: string - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/groups/groupname/csv.yaml b/public/openapi/read/admin/groups/groupname/csv.yaml index e774a1b..717ca9a 100644 --- a/public/openapi/read/admin/groups/groupname/csv.yaml +++ b/public/openapi/read/admin/groups/groupname/csv.yaml @@ -1,25 +1,25 @@ -get: - tags: - - admin - summary: Get members of a group (.csv) - parameters: - - in: header - name: referer - schema: - type: string - required: true - example: /admin/manage/groups - - in: path - name: groupname - schema: - type: string - required: true - example: registered-users - responses: - "200": - description: "A CSV file containing all users in the group" - content: - text/csv: - schema: - type: string +get: + tags: + - admin + summary: Get members of a group (.csv) + parameters: + - in: header + name: referer + schema: + type: string + required: true + example: /admin/manage/groups + - in: path + name: groupname + schema: + type: string + required: true + example: registered-users + responses: + "200": + description: "A CSV file containing all users in the group" + content: + text/csv: + schema: + type: string format: binary \ No newline at end of file diff --git a/public/openapi/read/admin/manage/admins-mods.yaml b/public/openapi/read/admin/manage/admins-mods.yaml index ba92285..4b8c00e 100644 --- a/public/openapi/read/admin/manage/admins-mods.yaml +++ b/public/openapi/read/admin/manage/admins-mods.yaml @@ -1,107 +1,107 @@ -get: - tags: - - admin - summary: Get administrators and moderators - responses: - "200": - description: "A JSON object containing administrators and moderators globally and per-category" - content: - application/json: - schema: - allOf: - - type: object - properties: - admins: - $ref: ../../../components/schemas/GroupObject.yaml#/GroupFullObject - globalMods: - $ref: ../../../components/schemas/GroupObject.yaml#/GroupFullObject - categoryMods: - type: array - items: - type: object - properties: - cid: - type: number - description: A category identifier assigned upon category creation (this value cannot be changed) - name: - type: string - description: The category's name/title - description: - type: string - description: A variable-length description of the category (usually displayed underneath the category name) - descriptionParsed: - type: string - description: A variable-length description of the category (usually displayed underneath the category name). Unlike `description`, this value here will have been run through any parsers installed on the forum (e.g. Markdown) - icon: - type: string - description: A FontAwesome icon string - example: fa-comments-o - bgColor: - type: string - description: Theme-related, a six-character hexadecimal string representing the background colour of the category - color: - type: string - description: Theme-related, a six-character hexadecimal string representing the foreground/text colour of the category - slug: - type: string - description: An URL-safe variant of the category title. This value is automatically generated. - readOnly: true - parentCid: - type: number - description: The category identifier for the category that is the immediate ancestor of the current category - topic_count: - type: number - description: The number of topics in the category - post_count: - type: number - description: The number of posts in the category - disabled: - type: number - description: Whether or not this category is disabled. - order: - type: number - description: A number representing the category's place in the hierarchy - link: - type: string - description: If set, attempting to access the forum will go to this external link instead (theme-specific) - numRecentReplies: - type: number - description: The number of posts to render in the API response (this is mostly used at the theme level) - class: - type: string - description: Values that are appended to the `class` attribute of the category's parent/root element - imageClass: - type: string - enum: [auto, cover, contain] - description: The `background-position` of the category background image, if one is set - isSection: - type: number - minTags: - type: number - description: Minimum tags per topic in this category - maxTags: - type: number - description: Maximum tags per topic in this category - postQueue: - type: number - totalPostCount: - type: number - description: The number of posts in the category - totalTopicCount: - type: number - description: The number of topics in the category - subCategoriesPerPage: - type: number - description: The number of subcategories to display on the categories and category page - moderators: - type: array - items: - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectSlim - selectedCategory: - $ref: ../../../components/schemas/CategoryObject.yaml#/CategoryObject - allPrivileges: - type: array - items: - type: string - description: A simple array containing user privilege names (used client-side when giving mod privilege) +get: + tags: + - admin + summary: Get administrators and moderators + responses: + "200": + description: "A JSON object containing administrators and moderators globally and per-category" + content: + application/json: + schema: + allOf: + - type: object + properties: + admins: + $ref: ../../../components/schemas/GroupObject.yaml#/GroupFullObject + globalMods: + $ref: ../../../components/schemas/GroupObject.yaml#/GroupFullObject + categoryMods: + type: array + items: + type: object + properties: + cid: + type: number + description: A category identifier assigned upon category creation (this value cannot be changed) + name: + type: string + description: The category's name/title + description: + type: string + description: A variable-length description of the category (usually displayed underneath the category name) + descriptionParsed: + type: string + description: A variable-length description of the category (usually displayed underneath the category name). Unlike `description`, this value here will have been run through any parsers installed on the forum (e.g. Markdown) + icon: + type: string + description: A FontAwesome icon string + example: fa-comments-o + bgColor: + type: string + description: Theme-related, a six-character hexadecimal string representing the background colour of the category + color: + type: string + description: Theme-related, a six-character hexadecimal string representing the foreground/text colour of the category + slug: + type: string + description: An URL-safe variant of the category title. This value is automatically generated. + readOnly: true + parentCid: + type: number + description: The category identifier for the category that is the immediate ancestor of the current category + topic_count: + type: number + description: The number of topics in the category + post_count: + type: number + description: The number of posts in the category + disabled: + type: number + description: Whether or not this category is disabled. + order: + type: number + description: A number representing the category's place in the hierarchy + link: + type: string + description: If set, attempting to access the forum will go to this external link instead (theme-specific) + numRecentReplies: + type: number + description: The number of posts to render in the API response (this is mostly used at the theme level) + class: + type: string + description: Values that are appended to the `class` attribute of the category's parent/root element + imageClass: + type: string + enum: [auto, cover, contain] + description: The `background-position` of the category background image, if one is set + isSection: + type: number + minTags: + type: number + description: Minimum tags per topic in this category + maxTags: + type: number + description: Maximum tags per topic in this category + postQueue: + type: number + totalPostCount: + type: number + description: The number of posts in the category + totalTopicCount: + type: number + description: The number of topics in the category + subCategoriesPerPage: + type: number + description: The number of subcategories to display on the categories and category page + moderators: + type: array + items: + $ref: ../../../components/schemas/UserObject.yaml#/UserObjectSlim + selectedCategory: + $ref: ../../../components/schemas/CategoryObject.yaml#/CategoryObject + allPrivileges: + type: array + items: + type: string + description: A simple array containing user privilege names (used client-side when giving mod privilege) - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/manage/categories.yaml b/public/openapi/read/admin/manage/categories.yaml index 7cfc875..e2d5d1b 100644 --- a/public/openapi/read/admin/manage/categories.yaml +++ b/public/openapi/read/admin/manage/categories.yaml @@ -1,53 +1,53 @@ -get: - tags: - - admin - summary: Get category management settings - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type : object - properties: - categoriesPerPage: - type: number - categoriesTree: - type: array - items: - type: object - properties: - cid: - type: number - description: A category identifier - name: - type: string - disabled: - type: number - icon: - type: string - link: - type: string - parentCid: - type: number - description: The category identifier for the category that is the immediate - ancestor of the current category - color: - type: string - bgColor: - type: string - backgroundImage: - type: string - nullable: true - imageClass: - type: string - order: - type: number - subCategoriesPerPage: - type: number - children: - type: array - description: Array of children categories - - $ref: ../../../components/schemas/Pagination.yaml#/Pagination +get: + tags: + - admin + summary: Get category management settings + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type : object + properties: + categoriesPerPage: + type: number + categoriesTree: + type: array + items: + type: object + properties: + cid: + type: number + description: A category identifier + name: + type: string + disabled: + type: number + icon: + type: string + link: + type: string + parentCid: + type: number + description: The category identifier for the category that is the immediate + ancestor of the current category + color: + type: string + bgColor: + type: string + backgroundImage: + type: string + nullable: true + imageClass: + type: string + order: + type: number + subCategoriesPerPage: + type: number + children: + type: array + description: Array of children categories + - $ref: ../../../components/schemas/Pagination.yaml#/Pagination - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/manage/categories/category_id.yaml b/public/openapi/read/admin/manage/categories/category_id.yaml index 37794b3..1e472c3 100644 --- a/public/openapi/read/admin/manage/categories/category_id.yaml +++ b/public/openapi/read/admin/manage/categories/category_id.yaml @@ -1,42 +1,42 @@ -get: - tags: - - admin - summary: Get category settings - parameters: - - name: category_id - in: path - required: true - schema: - type: string - example: 1 - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - category: - allOf: - - $ref: ../../../../components/schemas/CategoryObject.yaml#/CategoryObject - - type: object - properties: - tagWhitelist: - type: array - items: - type: string - unread-class: - type: string - parent: - $ref: ../../../../components/schemas/CategoryObject.yaml#/CategoryObject - selectedCategory: - $ref: ../../../../components/schemas/CategoryObject.yaml#/CategoryObject - customClasses: - type: array - items: - type: string - postQueueEnabled: - type: boolean +get: + tags: + - admin + summary: Get category settings + parameters: + - name: category_id + in: path + required: true + schema: + type: string + example: 1 + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + category: + allOf: + - $ref: ../../../../components/schemas/CategoryObject.yaml#/CategoryObject + - type: object + properties: + tagWhitelist: + type: array + items: + type: string + unread-class: + type: string + parent: + $ref: ../../../../components/schemas/CategoryObject.yaml#/CategoryObject + selectedCategory: + $ref: ../../../../components/schemas/CategoryObject.yaml#/CategoryObject + customClasses: + type: array + items: + type: string + postQueueEnabled: + type: boolean - $ref: ../../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/manage/categories/category_id/analytics.yaml b/public/openapi/read/admin/manage/categories/category_id/analytics.yaml index 4805c47..fbfc9ea 100644 --- a/public/openapi/read/admin/manage/categories/category_id/analytics.yaml +++ b/public/openapi/read/admin/manage/categories/category_id/analytics.yaml @@ -1,42 +1,42 @@ -get: - tags: - - admin - summary: Get category anayltics - parameters: - - name: category_id - in: path - required: true - schema: - type: string - example: 1 - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - name: - type: string - analytics: - type: object - properties: - pageviews:hourly: - type: array - items: - type: number - pageviews:daily: - type: array - items: - type: number - topics:daily: - type: array - items: - type: number - posts:daily: - type: array - items: - type: number +get: + tags: + - admin + summary: Get category anayltics + parameters: + - name: category_id + in: path + required: true + schema: + type: string + example: 1 + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + name: + type: string + analytics: + type: object + properties: + pageviews:hourly: + type: array + items: + type: number + pageviews:daily: + type: array + items: + type: number + topics:daily: + type: array + items: + type: number + posts:daily: + type: array + items: + type: number - $ref: ../../../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/manage/digest.yaml b/public/openapi/read/admin/manage/digest.yaml index f094a3f..6519714 100644 --- a/public/openapi/read/admin/manage/digest.yaml +++ b/public/openapi/read/admin/manage/digest.yaml @@ -1,54 +1,54 @@ -get: - tags: - - admin - summary: Get system digest info/settings - responses: - "200": - description: "A JSON object containing recent digest sends and settings" - content: - application/json: - schema: - allOf: - - type: object - properties: - title: - type: string - delivery: - type: array - items: - type: object - properties: - username: - type: string - description: A friendly name for a given user account - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - picture: - nullable: true - type: string - uid: - type: number - description: A user identifier - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without an - avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with `icon:text` - for the user's auto-generated icon - example: "#f44336" - lastDelivery: - type: string - setting: - type: boolean - default: - type: string - required: - - title - - delivery - - $ref: ../../../components/schemas/Pagination.yaml#/Pagination +get: + tags: + - admin + summary: Get system digest info/settings + responses: + "200": + description: "A JSON object containing recent digest sends and settings" + content: + application/json: + schema: + allOf: + - type: object + properties: + title: + type: string + delivery: + type: array + items: + type: object + properties: + username: + type: string + description: A friendly name for a given user account + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + picture: + nullable: true + type: string + uid: + type: number + description: A user identifier + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without an + avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with `icon:text` + for the user's auto-generated icon + example: "#f44336" + lastDelivery: + type: string + setting: + type: boolean + default: + type: string + required: + - title + - delivery + - $ref: ../../../components/schemas/Pagination.yaml#/Pagination - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/manage/groups.yaml b/public/openapi/read/admin/manage/groups.yaml index 12b224b..fdb2af5 100644 --- a/public/openapi/read/admin/manage/groups.yaml +++ b/public/openapi/read/admin/manage/groups.yaml @@ -1,101 +1,101 @@ -get: - tags: - - admin - summary: Get user groups - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - groups: - type: array - items: - type: object - properties: - name: - type: string - description: - type: string - deleted: - oneOf: - - type: number - - type: string - hidden: - type: number - system: - type: number - userTitle: - type: string - userTitleEscaped: - type: string - icon: - type: string - labelColor: - type: string - slug: - type: string - createtime: - type: number - memberCount: - type: number - private: - type: number - cover:url: - type: string - cover:position: - type: string - userTitleEnabled: - type: number - disableJoinRequests: - type: number - disableLeave: - type: number - nameEncoded: - type: string - displayName: - type: string - textColor: - type: string - createtimeISO: - type: string - cover:thumb:url: - type: string - ownerUid: - type: number - memberPostCids: - type: string - memberPostCidsArray: - type: array - items: - type: number - example: [1, 2, 3] - required: - - name - - description - - hidden - - system - - userTitle - - icon - - labelColor - - slug - - createtime - - memberCount - - private - - cover:url - - cover:position - - userTitleEnabled - - disableJoinRequests - - disableLeave - - nameEncoded - - displayName - - textColor - - createtimeISO - - cover:thumb:url - yourid: - type: number - - $ref: ../../../components/schemas/Pagination.yaml#/Pagination +get: + tags: + - admin + summary: Get user groups + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + groups: + type: array + items: + type: object + properties: + name: + type: string + description: + type: string + deleted: + oneOf: + - type: number + - type: string + hidden: + type: number + system: + type: number + userTitle: + type: string + userTitleEscaped: + type: string + icon: + type: string + labelColor: + type: string + slug: + type: string + createtime: + type: number + memberCount: + type: number + private: + type: number + cover:url: + type: string + cover:position: + type: string + userTitleEnabled: + type: number + disableJoinRequests: + type: number + disableLeave: + type: number + nameEncoded: + type: string + displayName: + type: string + textColor: + type: string + createtimeISO: + type: string + cover:thumb:url: + type: string + ownerUid: + type: number + memberPostCids: + type: string + memberPostCidsArray: + type: array + items: + type: number + example: [1, 2, 3] + required: + - name + - description + - hidden + - system + - userTitle + - icon + - labelColor + - slug + - createtime + - memberCount + - private + - cover:url + - cover:position + - userTitleEnabled + - disableJoinRequests + - disableLeave + - nameEncoded + - displayName + - textColor + - createtimeISO + - cover:thumb:url + yourid: + type: number + - $ref: ../../../components/schemas/Pagination.yaml#/Pagination - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/manage/groups/name.yaml b/public/openapi/read/admin/manage/groups/name.yaml index f04987a..ad456ca 100644 --- a/public/openapi/read/admin/manage/groups/name.yaml +++ b/public/openapi/read/admin/manage/groups/name.yaml @@ -1,40 +1,40 @@ -get: - tags: - - admin - summary: Get user group details - parameters: - - name: name - in: path - required: true - schema: - type: string - example: administrators - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - group: - $ref: ../../../../components/schemas/GroupObject.yaml#/GroupFullObject - groupNames: - type: array - items: - type: object - properties: - encodedName: - type: string - displayName: - type: string - selected: - type: boolean - allowPrivateGroups: - type: number - maximumGroupNameLength: - type: number - maximumGroupTitleLength: - type: number +get: + tags: + - admin + summary: Get user group details + parameters: + - name: name + in: path + required: true + schema: + type: string + example: administrators + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + group: + $ref: ../../../../components/schemas/GroupObject.yaml#/GroupFullObject + groupNames: + type: array + items: + type: object + properties: + encodedName: + type: string + displayName: + type: string + selected: + type: boolean + allowPrivateGroups: + type: number + maximumGroupNameLength: + type: number + maximumGroupTitleLength: + type: number - $ref: ../../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/manage/privileges/cid.yaml b/public/openapi/read/admin/manage/privileges/cid.yaml index 2ef7c8d..92f9945 100644 --- a/public/openapi/read/admin/manage/privileges/cid.yaml +++ b/public/openapi/read/admin/manage/privileges/cid.yaml @@ -1,122 +1,122 @@ -get: - tags: - - admin - summary: Get category privileges - parameters: - - name: cid - in: path - required: true - schema: - type: string - example: 1 - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - privileges: - type: object - properties: - labels: - type: object - properties: - users: - type: array - items: - type: string - description: Language key of the privilege name's user-friendly name - groups: - type: array - items: - type: string - description: Language key of the privilege name's user-friendly name - keys: - type: object - properties: - users: - type: array - items: - type: string - groups: - type: array - items: - type: string - users: - type: array - items: - type: object - properties: - name: - type: string - nameEscaped: - type: string - privileges: - type: object - additionalProperties: - type: boolean - description: Each privilege will have a key in this object - groups: - type: array - items: - type: object - properties: - name: - type: string - nameEscaped: - type: string - privileges: - type: object - additionalProperties: - type: boolean - description: Each privilege will have a key in this object - isPrivate: - type: boolean - isSystem: - type: boolean - columnCountUserOther: - type: number - columnCountGroupOther: - type: number - categories: - type: array - items: - type: object - properties: - cid: - type: number - description: A category identifier - name: - type: string - icon: - type: string - selected: - type: boolean - level: - type: string - parentCid: - type: number - description: The category identifier for the category that is the immediate - ancestor of the current category - color: - type: string - bgColor: - type: string - imageClass: - type: string - required: - - cid - - name - - icon - - selected - selectedCategory: - $ref: ../../../../components/schemas/CategoryObject.yaml#/CategoryObject - cid: - type: number - description: A category identifier - group: - type: string +get: + tags: + - admin + summary: Get category privileges + parameters: + - name: cid + in: path + required: true + schema: + type: string + example: 1 + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + privileges: + type: object + properties: + labels: + type: object + properties: + users: + type: array + items: + type: string + description: Language key of the privilege name's user-friendly name + groups: + type: array + items: + type: string + description: Language key of the privilege name's user-friendly name + keys: + type: object + properties: + users: + type: array + items: + type: string + groups: + type: array + items: + type: string + users: + type: array + items: + type: object + properties: + name: + type: string + nameEscaped: + type: string + privileges: + type: object + additionalProperties: + type: boolean + description: Each privilege will have a key in this object + groups: + type: array + items: + type: object + properties: + name: + type: string + nameEscaped: + type: string + privileges: + type: object + additionalProperties: + type: boolean + description: Each privilege will have a key in this object + isPrivate: + type: boolean + isSystem: + type: boolean + columnCountUserOther: + type: number + columnCountGroupOther: + type: number + categories: + type: array + items: + type: object + properties: + cid: + type: number + description: A category identifier + name: + type: string + icon: + type: string + selected: + type: boolean + level: + type: string + parentCid: + type: number + description: The category identifier for the category that is the immediate + ancestor of the current category + color: + type: string + bgColor: + type: string + imageClass: + type: string + required: + - cid + - name + - icon + - selected + selectedCategory: + $ref: ../../../../components/schemas/CategoryObject.yaml#/CategoryObject + cid: + type: number + description: A category identifier + group: + type: string - $ref: ../../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/manage/registration.yaml b/public/openapi/read/admin/manage/registration.yaml index 3d7fad4..7952503 100644 --- a/public/openapi/read/admin/manage/registration.yaml +++ b/public/openapi/read/admin/manage/registration.yaml @@ -1,90 +1,90 @@ -get: - tags: - - admin - summary: Get registration queue/invites - responses: - "200": - description: "A JSON object containing the registration queue and invites" - content: - application/json: - schema: - allOf: - - type: object - properties: - registrationQueueCount: - type: number - users: - type: array - items: - type: object - properties: - username: - type: string - email: - type: string - ip: - type: string - timestampISO: - type: string - usernameEscaped: - type: string - ipMatch: - type: array - items: - type: object - properties: - username: - type: string - description: A friendly name for a given user account - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - type: string - uid: - type: number - description: A user identifier - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without - an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's auto-generated - icon - example: "#f44336" - customActions: - type: array - items: - type: object - properties: - title: - type: string - id: - type: string - class: - type: string - icon: - type: string - customHeaders: - type: array - invites: - type: array - items: - type: object - properties: - uid: - type: number - invitations: - type: array - items: - type: object - properties: - email: - type: string - - $ref: ../../../components/schemas/Pagination.yaml#/Pagination +get: + tags: + - admin + summary: Get registration queue/invites + responses: + "200": + description: "A JSON object containing the registration queue and invites" + content: + application/json: + schema: + allOf: + - type: object + properties: + registrationQueueCount: + type: number + users: + type: array + items: + type: object + properties: + username: + type: string + email: + type: string + ip: + type: string + timestampISO: + type: string + usernameEscaped: + type: string + ipMatch: + type: array + items: + type: object + properties: + username: + type: string + description: A friendly name for a given user account + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + type: string + uid: + type: number + description: A user identifier + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without + an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's auto-generated + icon + example: "#f44336" + customActions: + type: array + items: + type: object + properties: + title: + type: string + id: + type: string + class: + type: string + icon: + type: string + customHeaders: + type: array + invites: + type: array + items: + type: object + properties: + uid: + type: number + invitations: + type: array + items: + type: object + properties: + email: + type: string + - $ref: ../../../components/schemas/Pagination.yaml#/Pagination - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/manage/tags.yaml b/public/openapi/read/admin/manage/tags.yaml index f42d4df..e4d1e72 100644 --- a/public/openapi/read/admin/manage/tags.yaml +++ b/public/openapi/read/admin/manage/tags.yaml @@ -1,18 +1,18 @@ -get: - tags: - - admin - summary: Get tag settings - responses: - "200": - description: "A JSON object containing tag settings" - content: - application/json: - schema: - allOf: - - type: object - properties: - tags: - type: array - items: - $ref: ../../../components/schemas/TagObject.yaml#/TagObject +get: + tags: + - admin + summary: Get tag settings + responses: + "200": + description: "A JSON object containing tag settings" + content: + application/json: + schema: + allOf: + - type: object + properties: + tags: + type: array + items: + $ref: ../../../components/schemas/TagObject.yaml#/TagObject - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/manage/uploads.yaml b/public/openapi/read/admin/manage/uploads.yaml index 85949a2..bb85ae1 100644 --- a/public/openapi/read/admin/manage/uploads.yaml +++ b/public/openapi/read/admin/manage/uploads.yaml @@ -1,57 +1,57 @@ -get: - tags: - - admin - summary: Get uploaded files - parameters: - - in: query - name: dir - schema: - type: string - description: Path of the folder, relative to `public/uploads/` - example: / - responses: - "200": - description: "A JSON object containing uploaded files" - content: - application/json: - schema: - allOf: - - type: object - properties: - currentFolder: - type: string - description: Path of the folder, relative to `public/uploads/` - showPids: - type: boolean - description: Whether or not the post identifiers should be shown (this is `true` only for `public/uploads/files/`, as that is where post uploads go) - files: - type: array - items: - type: object - properties: - name: - type: string - path: - type: string - description: Path relative to `currentFolder` - url: - type: string - description: Relative URL ready to be combined with `config.relative_path` on the client-side or templates - fileCount: - type: number - description: For directories, the number of files inside - size: - type: number - description: The size of the file/directory - sizeHumanReadable: - type: string - isDirectory: - type: boolean - isFile: - type: boolean - mtime: - type: number - description: Last modified time of the file, down to the microsecond (expressed as a UNIX timestamp) - - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - - $ref: ../../../components/schemas/Pagination.yaml#/Pagination +get: + tags: + - admin + summary: Get uploaded files + parameters: + - in: query + name: dir + schema: + type: string + description: Path of the folder, relative to `public/uploads/` + example: / + responses: + "200": + description: "A JSON object containing uploaded files" + content: + application/json: + schema: + allOf: + - type: object + properties: + currentFolder: + type: string + description: Path of the folder, relative to `public/uploads/` + showPids: + type: boolean + description: Whether or not the post identifiers should be shown (this is `true` only for `public/uploads/files/`, as that is where post uploads go) + files: + type: array + items: + type: object + properties: + name: + type: string + path: + type: string + description: Path relative to `currentFolder` + url: + type: string + description: Relative URL ready to be combined with `config.relative_path` on the client-side or templates + fileCount: + type: number + description: For directories, the number of files inside + size: + type: number + description: The size of the file/directory + sizeHumanReadable: + type: string + isDirectory: + type: boolean + isFile: + type: boolean + mtime: + type: number + description: Last modified time of the file, down to the microsecond (expressed as a UNIX timestamp) + - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs + - $ref: ../../../components/schemas/Pagination.yaml#/Pagination - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/manage/users.yaml b/public/openapi/read/admin/manage/users.yaml index 80dbed1..9b28f8a 100644 --- a/public/openapi/read/admin/manage/users.yaml +++ b/public/openapi/read/admin/manage/users.yaml @@ -1,39 +1,39 @@ -get: - tags: - - admin - summary: Get users - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - users: - type: array - items: - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectACP - page: - type: number - pageCount: - type: number - resultsPerPage: - type: number - reverse: - type: boolean - sortBy: - type: string - sort_lastonline: - type: boolean - userCount: - type: number - showInviteButton: - type: boolean - inviteOnly: - type: boolean - adminInviteOnly: - type: boolean - - $ref: ../../../components/schemas/Pagination.yaml#/Pagination +get: + tags: + - admin + summary: Get users + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + users: + type: array + items: + $ref: ../../../components/schemas/UserObject.yaml#/UserObjectACP + page: + type: number + pageCount: + type: number + resultsPerPage: + type: number + reverse: + type: boolean + sortBy: + type: string + sort_lastonline: + type: boolean + userCount: + type: number + showInviteButton: + type: boolean + inviteOnly: + type: boolean + adminInviteOnly: + type: boolean + - $ref: ../../../components/schemas/Pagination.yaml#/Pagination - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/settings/advanced.yaml b/public/openapi/read/admin/settings/advanced.yaml index 2cebeeb..22affa2 100644 --- a/public/openapi/read/admin/settings/advanced.yaml +++ b/public/openapi/read/admin/settings/advanced.yaml @@ -1,18 +1,18 @@ -get: - tags: - - admin - summary: Get advanced settings - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - groupsExemptFromMaintenanceMode: - type: array - items: - $ref: ../../../components/schemas/GroupObject.yaml#/GroupDataObject +get: + tags: + - admin + summary: Get advanced settings + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + groupsExemptFromMaintenanceMode: + type: array + items: + $ref: ../../../components/schemas/GroupObject.yaml#/GroupDataObject - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/settings/email.yaml b/public/openapi/read/admin/settings/email.yaml index e2d9b76..75ed16d 100644 --- a/public/openapi/read/admin/settings/email.yaml +++ b/public/openapi/read/admin/settings/email.yaml @@ -1,43 +1,43 @@ -get: - tags: - - admin - summary: Get emailer settings - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - emails: - type: array - items: - type: object - properties: - path: - type: string - description: The name of the email template - fullpath: - type: string - description: Full system path to the email template - text: - type: string - description: Customized email template text, if applicable, otherwise identical to `original` - original: - type: string - description: The email template text as provided by NodeBB core - isCustom: - type: boolean - sendable: - type: array - items: - type: string - description: The name of the email template - services: - type: array - items: - type: string - description: A list of email services which can be used to send emails on behalf of NodeBB +get: + tags: + - admin + summary: Get emailer settings + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + emails: + type: array + items: + type: object + properties: + path: + type: string + description: The name of the email template + fullpath: + type: string + description: Full system path to the email template + text: + type: string + description: Customized email template text, if applicable, otherwise identical to `original` + original: + type: string + description: The email template text as provided by NodeBB core + isCustom: + type: boolean + sendable: + type: array + items: + type: string + description: The name of the email template + services: + type: array + items: + type: string + description: A list of email services which can be used to send emails on behalf of NodeBB - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/settings/homepage.yaml b/public/openapi/read/admin/settings/homepage.yaml index 3225629..cdaf539 100644 --- a/public/openapi/read/admin/settings/homepage.yaml +++ b/public/openapi/read/admin/settings/homepage.yaml @@ -1,23 +1,23 @@ -get: - tags: - - admin - summary: Get homepage settings - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - routes: - type: array - items: - type: object - properties: - route: - type: string - name: - type: string +get: + tags: + - admin + summary: Get homepage settings + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + routes: + type: array + items: + type: object + properties: + route: + type: string + name: + type: string - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/settings/languages.yaml b/public/openapi/read/admin/settings/languages.yaml index 64b1e6b..b0f37dc 100644 --- a/public/openapi/read/admin/settings/languages.yaml +++ b/public/openapi/read/admin/settings/languages.yaml @@ -1,35 +1,35 @@ -get: - tags: - - admin - summary: Get language settings - responses: - "200": - description: A JSON object containing available languages and settings - content: - application/json: - schema: - allOf: - - type: object - properties: - languages: - type: array - items: - type: object - properties: - name: - type: string - description: Localised name of the language - code: - type: string - description: A language code (similar to ISO-639) - dir: - type: string - description: Directionality of the language - enum: [ltr, rtl] - selected: - type: boolean - description: Denotes the currently selected default system language on the forum - autoDetectLang: - type: integer - description: Whether the forum will attempt to guess language based on browser's `Accept-Language` header +get: + tags: + - admin + summary: Get language settings + responses: + "200": + description: A JSON object containing available languages and settings + content: + application/json: + schema: + allOf: + - type: object + properties: + languages: + type: array + items: + type: object + properties: + name: + type: string + description: Localised name of the language + code: + type: string + description: A language code (similar to ISO-639) + dir: + type: string + description: Directionality of the language + enum: [ltr, rtl] + selected: + type: boolean + description: Denotes the currently selected default system language on the forum + autoDetectLang: + type: integer + description: Whether the forum will attempt to guess language based on browser's `Accept-Language` header - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/settings/navigation.yaml b/public/openapi/read/admin/settings/navigation.yaml index 9f75f9a..2caf05b 100644 --- a/public/openapi/read/admin/settings/navigation.yaml +++ b/public/openapi/read/admin/settings/navigation.yaml @@ -1,107 +1,107 @@ -get: - tags: - - admin - summary: Get navigation bar settings - responses: - "200": - description: A JSON object containing navigation settings - content: - application/json: - schema: - allOf: - - type: object - properties: - enabled: - type: array - items: - type: object - properties: - route: - type: string - description: Relative URL to the page the navigation item goes to - title: - type: string - description: Tooltip text - enabled: - type: boolean - iconClass: - type: string - description: A FontAwesome icon string - textClass: - type: string - description: HTML class applied to the text label for this navigation item - text: - type: string - description: Label text for this navigation item - order: - type: integer - description: Ordinality of this item, lower value appears earlier - groups: - type: array - items: - type: object - properties: - displayName: - type: string - selected: - type: boolean - index: - type: integer - description: Seemingly identical to order, but an integer instead of a string - selected: - type: boolean - available: - type: array - items: - type: object - properties: - id: - type: string - description: Unique ID that will be added to the navigation element's `id` property in the DOM - route: - type: string - description: Relative URL to the page the navigation item goes to - title: - type: string - description: Tooltip text - enabled: - type: boolean - iconClass: - type: string - description: A FontAwesome icon string - textClass: - type: string - description: HTML class applied to the text label for this navigation item - text: - type: string - description: Label text for this navigation item - core: - type: boolean - description: Whether the navigation item is provided by core or not (a plugin) - groups: - type: array - items: - type: object - properties: - name: - type: string - displayName: - type: string - properties: - type: object - properties: - targetBlank: - type: boolean - groups: - type: array - items: - type: object - properties: - name: - type: string - displayName: - type: string - navigation: - type: array - description: A clone of `enabled` +get: + tags: + - admin + summary: Get navigation bar settings + responses: + "200": + description: A JSON object containing navigation settings + content: + application/json: + schema: + allOf: + - type: object + properties: + enabled: + type: array + items: + type: object + properties: + route: + type: string + description: Relative URL to the page the navigation item goes to + title: + type: string + description: Tooltip text + enabled: + type: boolean + iconClass: + type: string + description: A FontAwesome icon string + textClass: + type: string + description: HTML class applied to the text label for this navigation item + text: + type: string + description: Label text for this navigation item + order: + type: integer + description: Ordinality of this item, lower value appears earlier + groups: + type: array + items: + type: object + properties: + displayName: + type: string + selected: + type: boolean + index: + type: integer + description: Seemingly identical to order, but an integer instead of a string + selected: + type: boolean + available: + type: array + items: + type: object + properties: + id: + type: string + description: Unique ID that will be added to the navigation element's `id` property in the DOM + route: + type: string + description: Relative URL to the page the navigation item goes to + title: + type: string + description: Tooltip text + enabled: + type: boolean + iconClass: + type: string + description: A FontAwesome icon string + textClass: + type: string + description: HTML class applied to the text label for this navigation item + text: + type: string + description: Label text for this navigation item + core: + type: boolean + description: Whether the navigation item is provided by core or not (a plugin) + groups: + type: array + items: + type: object + properties: + name: + type: string + displayName: + type: string + properties: + type: object + properties: + targetBlank: + type: boolean + groups: + type: array + items: + type: object + properties: + name: + type: string + displayName: + type: string + navigation: + type: array + description: A clone of `enabled` - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/settings/post.yaml b/public/openapi/read/admin/settings/post.yaml index f8273c8..e616360 100644 --- a/public/openapi/read/admin/settings/post.yaml +++ b/public/openapi/read/admin/settings/post.yaml @@ -1,18 +1,18 @@ -get: - tags: - - admin - summary: Get post settings - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - groupsExemptFromPostQueue: - type: array - items: - $ref: ../../../components/schemas/GroupObject.yaml#/GroupDataObject +get: + tags: + - admin + summary: Get post settings + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + groupsExemptFromPostQueue: + type: array + items: + $ref: ../../../components/schemas/GroupObject.yaml#/GroupDataObject - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/settings/social.yaml b/public/openapi/read/admin/settings/social.yaml index 7d32a17..a16d969 100644 --- a/public/openapi/read/admin/settings/social.yaml +++ b/public/openapi/read/admin/settings/social.yaml @@ -1,28 +1,28 @@ -get: - tags: - - admin - summary: Get post social sharing settings - responses: - "200": - description: "A JSON object containing post social sharing settings" - content: - application/json: - schema: - allOf: - - type: object - properties: - posts: - type: array - items: - type: object - properties: - id: - type: string - name: - type: string - class: - type: string - description: A FontAwesome icon string - activated: - type: boolean +get: + tags: + - admin + summary: Get post social sharing settings + responses: + "200": + description: "A JSON object containing post social sharing settings" + content: + application/json: + schema: + allOf: + - type: object + properties: + posts: + type: array + items: + type: object + properties: + id: + type: string + name: + type: string + class: + type: string + description: A FontAwesome icon string + activated: + type: boolean - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/settings/term.yaml b/public/openapi/read/admin/settings/term.yaml index 1801041..ba4279b 100644 --- a/public/openapi/read/admin/settings/term.yaml +++ b/public/openapi/read/admin/settings/term.yaml @@ -1,24 +1,24 @@ -get: - tags: - - admin - summary: Get system settings - parameters: - - name: term - in: path - required: true - schema: - type: string - example: general - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: {} - additionalProperties: - type: object - description: Most of the settings pages have their values loaded on the client-side, so the settings are not exposed server-side. +get: + tags: + - admin + summary: Get system settings + parameters: + - name: term + in: path + required: true + schema: + type: string + example: general + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: {} + additionalProperties: + type: object + description: Most of the settings pages have their values loaded on the client-side, so the settings are not exposed server-side. - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/settings/user.yaml b/public/openapi/read/admin/settings/user.yaml index 6dcccce..ff7aae7 100644 --- a/public/openapi/read/admin/settings/user.yaml +++ b/public/openapi/read/admin/settings/user.yaml @@ -1,25 +1,25 @@ -get: - tags: - - admin - summary: Get user settings - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - notificationSettings: - type: array - items: - type: object - properties: - name: - type: string - description: The notification type - label: - type: string - description: The language key for the notification type (for localisation client-side) +get: + tags: + - admin + summary: Get user settings + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + notificationSettings: + type: array + items: + type: object + properties: + name: + type: string + description: The notification type + label: + type: string + description: The language key for the notification type (for localisation client-side) - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/admin/upload/file.yaml b/public/openapi/read/admin/upload/file.yaml index 7d600b7..e8308ad 100644 --- a/public/openapi/read/admin/upload/file.yaml +++ b/public/openapi/read/admin/upload/file.yaml @@ -1,35 +1,35 @@ -post: - tags: - - admin - summary: Upload a file - requestBody: - required: true - content: - multipart/form-data: - schema: - type: object - properties: - folder: - type: string - description: The folder to upload the files to (relative to `public/uploads/`) - files: - type: array - items: - type: string - format: binary - required: - - files - responses: - "200": - description: "File uploaded" - content: - application/json: - schema: - type: object - properties: - name: - type: string - description: The filename - url: - type: string +post: + tags: + - admin + summary: Upload a file + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + folder: + type: string + description: The folder to upload the files to (relative to `public/uploads/`) + files: + type: array + items: + type: string + format: binary + required: + - files + responses: + "200": + description: "File uploaded" + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: The filename + url: + type: string description: URL of the uploaded file for use client-side \ No newline at end of file diff --git a/public/openapi/read/admin/uploadDefaultAvatar.yaml b/public/openapi/read/admin/uploadDefaultAvatar.yaml index 1f725c8..47f0101 100644 --- a/public/openapi/read/admin/uploadDefaultAvatar.yaml +++ b/public/openapi/read/admin/uploadDefaultAvatar.yaml @@ -1,32 +1,32 @@ -post: - tags: - - admin - summary: Upload default avatar - requestBody: - required: true - content: - multipart/form-data: - schema: - type: object - properties: - files: - type: array - items: - type: string - format: binary - required: - - files - responses: - "200": - description: "Image uploaded" - content: - application/json: - schema: - type: object - properties: - name: - type: string - description: The filename - url: - type: string +post: + tags: + - admin + summary: Upload default avatar + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + files: + type: array + items: + type: string + format: binary + required: + - files + responses: + "200": + description: "Image uploaded" + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: The filename + url: + type: string description: URL of the uploaded image for use client-side \ No newline at end of file diff --git a/public/openapi/read/admin/uploadMaskableIcon.yaml b/public/openapi/read/admin/uploadMaskableIcon.yaml index 94640a7..96d3076 100644 --- a/public/openapi/read/admin/uploadMaskableIcon.yaml +++ b/public/openapi/read/admin/uploadMaskableIcon.yaml @@ -1,32 +1,32 @@ -post: - tags: - - admin - summary: Upload Maskable Icon - requestBody: - required: true - content: - multipart/form-data: - schema: - type: object - properties: - files: - type: array - items: - type: string - format: binary - required: - - files - responses: - "200": - description: "Image uploaded" - content: - application/json: - schema: - type: object - properties: - name: - type: string - description: The filename - url: - type: string +post: + tags: + - admin + summary: Upload Maskable Icon + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + files: + type: array + items: + type: string + format: binary + required: + - files + responses: + "200": + description: "Image uploaded" + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: The filename + url: + type: string description: URL of the uploaded logo for the Maskable Icon entry for PWA / A2HS \ No newline at end of file diff --git a/public/openapi/read/admin/uploadOgImage.yaml b/public/openapi/read/admin/uploadOgImage.yaml index 9561a14..fc8396c 100644 --- a/public/openapi/read/admin/uploadOgImage.yaml +++ b/public/openapi/read/admin/uploadOgImage.yaml @@ -1,32 +1,32 @@ -post: - tags: - - admin - summary: Upload site-wide Open Graph Image - requestBody: - required: true - content: - multipart/form-data: - schema: - type: object - properties: - files: - type: array - items: - type: string - format: binary - required: - - files - responses: - "200": - description: "Image uploaded" - content: - application/json: - schema: - type: object - properties: - name: - type: string - description: The filename - url: - type: string +post: + tags: + - admin + summary: Upload site-wide Open Graph Image + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + files: + type: array + items: + type: string + format: binary + required: + - files + responses: + "200": + description: "Image uploaded" + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: The filename + url: + type: string description: URL of the uploaded image for use client-side \ No newline at end of file diff --git a/public/openapi/read/admin/uploadTouchIcon.yaml b/public/openapi/read/admin/uploadTouchIcon.yaml index d0c63ff1..e99f6a8 100644 --- a/public/openapi/read/admin/uploadTouchIcon.yaml +++ b/public/openapi/read/admin/uploadTouchIcon.yaml @@ -1,32 +1,32 @@ -post: - tags: - - admin - summary: Upload Touch Icon - requestBody: - required: true - content: - multipart/form-data: - schema: - type: object - properties: - files: - type: array - items: - type: string - format: binary - required: - - files - responses: - "200": - description: "Image uploaded" - content: - application/json: - schema: - type: object - properties: - name: - type: string - description: The filename - url: - type: string +post: + tags: + - admin + summary: Upload Touch Icon + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + files: + type: array + items: + type: string + format: binary + required: + - files + responses: + "200": + description: "Image uploaded" + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: The filename + url: + type: string description: URL of the uploaded logo for the Homescreen/Touch Icon to enable PWA \ No newline at end of file diff --git a/public/openapi/read/admin/uploadfavicon.yaml b/public/openapi/read/admin/uploadfavicon.yaml index d53b593..980978a 100644 --- a/public/openapi/read/admin/uploadfavicon.yaml +++ b/public/openapi/read/admin/uploadfavicon.yaml @@ -1,32 +1,32 @@ -post: - tags: - - admin - summary: Upload favicon - requestBody: - required: true - content: - multipart/form-data: - schema: - type: object - properties: - files: - type: array - items: - type: string - format: binary - required: - - files - responses: - "200": - description: "Image uploaded" - content: - application/json: - schema: - type: object - properties: - name: - type: string - description: The filename - url: - type: string +post: + tags: + - admin + summary: Upload favicon + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + files: + type: array + items: + type: string + format: binary + required: + - files + responses: + "200": + description: "Image uploaded" + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: The filename + url: + type: string description: URL of the uploaded image for use client-side \ No newline at end of file diff --git a/public/openapi/read/admin/uploadlogo.yaml b/public/openapi/read/admin/uploadlogo.yaml index ef1ddd8..ed0d0f3 100644 --- a/public/openapi/read/admin/uploadlogo.yaml +++ b/public/openapi/read/admin/uploadlogo.yaml @@ -1,32 +1,32 @@ -post: - tags: - - admin - summary: Upload site logo - requestBody: - required: true - content: - multipart/form-data: - schema: - type: object - properties: - files: - type: array - items: - type: string - format: binary - required: - - files - responses: - "200": - description: "Image uploaded" - content: - application/json: - schema: - type: object - properties: - name: - type: string - description: The filename - url: - type: string +post: + tags: + - admin + summary: Upload site logo + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + files: + type: array + items: + type: string + format: binary + required: + - files + responses: + "200": + description: "Image uploaded" + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: The filename + url: + type: string description: URL of the uploaded image for use client-side \ No newline at end of file diff --git a/public/openapi/read/admin/users/csv.yaml b/public/openapi/read/admin/users/csv.yaml index 244a88b..40f69f3 100644 --- a/public/openapi/read/admin/users/csv.yaml +++ b/public/openapi/read/admin/users/csv.yaml @@ -1,19 +1,19 @@ -get: - tags: - - admin - summary: Get users export (.csv) - parameters: - - in: header - name: referer - schema: - type: string - required: true - example: /admin/manage/users - responses: - "200": - description: "A CSV file containing all registered users" - content: - text/csv: - schema: - type: string +get: + tags: + - admin + summary: Get users export (.csv) + parameters: + - in: header + name: referer + schema: + type: string + required: true + example: /admin/manage/users + responses: + "200": + description: "A CSV file containing all registered users" + content: + text/csv: + schema: + type: string format: binary \ No newline at end of file diff --git a/public/openapi/read/career.yaml b/public/openapi/read/career.yaml index fb222b0..ceb4261 100644 --- a/public/openapi/read/career.yaml +++ b/public/openapi/read/career.yaml @@ -1,8 +1,8 @@ -get: - tags: - - career - summary: Get career information - description: Returns career-related information for the career page - responses: - "200": - description: "" +get: + tags: + - career + summary: Get career information + description: Returns career-related information for the career page + responses: + "200": + description: "" diff --git a/public/openapi/read/categories.yaml b/public/openapi/read/categories.yaml index 74e2a9d..c21beea 100644 --- a/public/openapi/read/categories.yaml +++ b/public/openapi/read/categories.yaml @@ -1,207 +1,207 @@ -get: - tags: - - categories - summary: Get a list of categories - description: > - This route retrieve the list of categories currently available to the - accessing user. It doesn't necessarily mean that the user can *enter* - the category, as that is a separate privilege. Specifically, this route - will return all categories that grant the calling user the "Find - Category" privilege. - - - Subcategories are also returned, nested under a category's `children` property. - responses: - "200": - description: A list of category objects currently available to the accessing user - content: - application/json: - schema: - allOf: - - type: object - properties: - title: - description: The page title - type: string - selectCategoryLabel: - type: string - description: Label to use for the category selector - categories: - description: A collection of category data objects - type: array - items: - allOf: - - $ref: ../components/schemas/CategoryObject.yaml#/CategoryObject - - type: object - properties: - tagWhitelist: - type: array - items: - type: string - unread-class: - type: string - children: - type: array - items: - allOf: - - $ref: ../components/schemas/CategoryObject.yaml#/CategoryObject - - type: object - properties: - tagWhitelist: - type: array - items: - type: string - unread-class: - type: string - children: - type: array - items: - $ref: ../components/schemas/CategoryObject.yaml#/CategoryObject - parent: - allOf: - - $ref: ../components/schemas/CategoryObject.yaml#/CategoryObject - - type: object - properties: - tagWhitelist: - type: array - items: - type: string - unread-class: - type: string - posts: - type: array - items: - type: object - properties: - pid: - type: number - timestamp: - type: number - content: - type: string - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - user: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - nullable: true - type: string - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to - users without an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction - with `icon:text` for the user's - auto-generated icon - example: "#f44336" - index: - type: number - cid: - type: number - description: A category identifier - topic: - type: object - properties: - slug: - type: string - title: - type: string - imageClass: - type: string - timesClicked: - type: number - posts: - type: array - items: - type: object - properties: - pid: - type: number - timestamp: - type: number - content: - type: string - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - user: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - nullable: true - type: string - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users - without an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's - auto-generated icon - example: "#f44336" - index: - type: number - cid: - type: number - description: A category identifier - topic: - type: object - properties: - slug: - type: string - title: - type: string - teaser: - type: object - properties: - url: - type: string - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - pid: - type: number - topic: - type: object - properties: - slug: - type: string - title: - type: string - imageClass: - type: string - - $ref: ../components/schemas/Pagination.yaml#/Pagination - - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - categories + summary: Get a list of categories + description: > + This route retrieve the list of categories currently available to the + accessing user. It doesn't necessarily mean that the user can *enter* + the category, as that is a separate privilege. Specifically, this route + will return all categories that grant the calling user the "Find + Category" privilege. + + + Subcategories are also returned, nested under a category's `children` property. + responses: + "200": + description: A list of category objects currently available to the accessing user + content: + application/json: + schema: + allOf: + - type: object + properties: + title: + description: The page title + type: string + selectCategoryLabel: + type: string + description: Label to use for the category selector + categories: + description: A collection of category data objects + type: array + items: + allOf: + - $ref: ../components/schemas/CategoryObject.yaml#/CategoryObject + - type: object + properties: + tagWhitelist: + type: array + items: + type: string + unread-class: + type: string + children: + type: array + items: + allOf: + - $ref: ../components/schemas/CategoryObject.yaml#/CategoryObject + - type: object + properties: + tagWhitelist: + type: array + items: + type: string + unread-class: + type: string + children: + type: array + items: + $ref: ../components/schemas/CategoryObject.yaml#/CategoryObject + parent: + allOf: + - $ref: ../components/schemas/CategoryObject.yaml#/CategoryObject + - type: object + properties: + tagWhitelist: + type: array + items: + type: string + unread-class: + type: string + posts: + type: array + items: + type: object + properties: + pid: + type: number + timestamp: + type: number + content: + type: string + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + user: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + nullable: true + type: string + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to + users without an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction + with `icon:text` for the user's + auto-generated icon + example: "#f44336" + index: + type: number + cid: + type: number + description: A category identifier + topic: + type: object + properties: + slug: + type: string + title: + type: string + imageClass: + type: string + timesClicked: + type: number + posts: + type: array + items: + type: object + properties: + pid: + type: number + timestamp: + type: number + content: + type: string + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + user: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + nullable: true + type: string + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users + without an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's + auto-generated icon + example: "#f44336" + index: + type: number + cid: + type: number + description: A category identifier + topic: + type: object + properties: + slug: + type: string + title: + type: string + teaser: + type: object + properties: + url: + type: string + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + pid: + type: number + topic: + type: object + properties: + slug: + type: string + title: + type: string + imageClass: + type: string + - $ref: ../components/schemas/Pagination.yaml#/Pagination + - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/categories/cid/moderators.yaml b/public/openapi/read/categories/cid/moderators.yaml index b111611..355c391 100644 --- a/public/openapi/read/categories/cid/moderators.yaml +++ b/public/openapi/read/categories/cid/moderators.yaml @@ -1,30 +1,30 @@ -get: - tags: - - categories - summary: Get mods for a category - description: > - This route returns an array of uids that correspond to the moderators - for the category in question. - parameters: - - name: cid - description: The category identifier for the category you wish to look up - in: path - required: true - schema: - type: number - example: 1 - responses: - "200": - description: An array of moderators for the requested category - content: - application/json: - schema: - type: object - properties: - moderators: - type: array - example: - moderators: - - 1 - - 2 +get: + tags: + - categories + summary: Get mods for a category + description: > + This route returns an array of uids that correspond to the moderators + for the category in question. + parameters: + - name: cid + description: The category identifier for the category you wish to look up + in: path + required: true + schema: + type: number + example: 1 + responses: + "200": + description: An array of moderators for the requested category + content: + application/json: + schema: + type: object + properties: + moderators: + type: array + example: + moderators: + - 1 + - 2 - 3 \ No newline at end of file diff --git a/public/openapi/read/category/category_id.yaml b/public/openapi/read/category/category_id.yaml index 10a8523..0d4b9de 100644 --- a/public/openapi/read/category/category_id.yaml +++ b/public/openapi/read/category/category_id.yaml @@ -1,104 +1,104 @@ -get: - tags: - - categories - summary: Get a single category - description: This route retrieves a single category's data, along with its children and the topics created inside of the category. - parameters: - - name: category_id - in: path - required: true - schema: - type: string - example: 1 - - name: slug - description: This parameter is not required. If omitted, the request will be automatically redirected with the proper category slug. - in: path - required: true - schema: - type: string - example: test - - name: topic_index - description: This parameter is not required. If omitted, the request will presume that you want the first post. The API response is largely unaffected by this parameter, it is used client-side (to send the user to the requested post), and changes the meta/link tags in the server-side generated HTML. - in: path - required: true - schema: - type: string - example: 1 - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../components/schemas/CategoryObject.yaml#/CategoryObject - - type: object - properties: - tagWhitelist: - type: array - items: - type: string - unread-class: - type: string - children: - type: array - items: - $ref: ../../components/schemas/CategoryObject.yaml#/CategoryObject - topics: - type: array - items: - $ref: ../../components/schemas/TopicObject.yaml#/TopicObject - nextStart: - type: number - isWatched: - type: boolean - isNotWatched: - type: boolean - isIgnored: - type: boolean - title: - type: string - selectCategoryLabel: - type: string - description: Label to use for the category selector - privileges: - type: object - properties: - topics:create: - type: boolean - topics:read: - type: boolean - topics:tag: - type: boolean - topics:schedule: - type: boolean - read: - type: boolean - posts:view_deleted: - type: boolean - cid: - type: string - uid: - type: number - description: A user identifier - editable: - type: boolean - view_deleted: - type: boolean - isAdminOrMod: - type: boolean - showSelect: - type: boolean - showTopicTools: - type: boolean - topicIndex: - type: number - rssFeedUrl: - type: string - feeds:disableRSS: - type: number - reputation:disabled: - type: number - - $ref: ../../components/schemas/Pagination.yaml#/Pagination - - $ref: ../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - categories + summary: Get a single category + description: This route retrieves a single category's data, along with its children and the topics created inside of the category. + parameters: + - name: category_id + in: path + required: true + schema: + type: string + example: 1 + - name: slug + description: This parameter is not required. If omitted, the request will be automatically redirected with the proper category slug. + in: path + required: true + schema: + type: string + example: test + - name: topic_index + description: This parameter is not required. If omitted, the request will presume that you want the first post. The API response is largely unaffected by this parameter, it is used client-side (to send the user to the requested post), and changes the meta/link tags in the server-side generated HTML. + in: path + required: true + schema: + type: string + example: 1 + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../components/schemas/CategoryObject.yaml#/CategoryObject + - type: object + properties: + tagWhitelist: + type: array + items: + type: string + unread-class: + type: string + children: + type: array + items: + $ref: ../../components/schemas/CategoryObject.yaml#/CategoryObject + topics: + type: array + items: + $ref: ../../components/schemas/TopicObject.yaml#/TopicObject + nextStart: + type: number + isWatched: + type: boolean + isNotWatched: + type: boolean + isIgnored: + type: boolean + title: + type: string + selectCategoryLabel: + type: string + description: Label to use for the category selector + privileges: + type: object + properties: + topics:create: + type: boolean + topics:read: + type: boolean + topics:tag: + type: boolean + topics:schedule: + type: boolean + read: + type: boolean + posts:view_deleted: + type: boolean + cid: + type: string + uid: + type: number + description: A user identifier + editable: + type: boolean + view_deleted: + type: boolean + isAdminOrMod: + type: boolean + showSelect: + type: boolean + showTopicTools: + type: boolean + topicIndex: + type: number + rssFeedUrl: + type: string + feeds:disableRSS: + type: number + reputation:disabled: + type: number + - $ref: ../../components/schemas/Pagination.yaml#/Pagination + - $ref: ../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/chats/roomid.yaml b/public/openapi/read/chats/roomid.yaml index 0780b77..4130aaa 100644 --- a/public/openapi/read/chats/roomid.yaml +++ b/public/openapi/read/chats/roomid.yaml @@ -1,20 +1,20 @@ -get: - tags: - - shorthand - summary: Access a chat room - description: Redirects a request to the proper chat page URL - parameters: - - name: roomid - in: path - required: true - schema: - type: string - example: 1 - responses: - "200": - description: "Chat identifier resolved" - content: - text/plain: - schema: - type: string +get: + tags: + - shorthand + summary: Access a chat room + description: Redirects a request to the proper chat page URL + parameters: + - name: roomid + in: path + required: true + schema: + type: string + example: 1 + responses: + "200": + description: "Chat identifier resolved" + content: + text/plain: + schema: + type: string description: A relative path to the canonical URL for that chat page \ No newline at end of file diff --git a/public/openapi/read/config.yaml b/public/openapi/read/config.yaml index 2d8d2ff..56f19e7 100644 --- a/public/openapi/read/config.yaml +++ b/public/openapi/read/config.yaml @@ -1,148 +1,148 @@ -get: - tags: - - home - summary: Get forum settings - description: This route retrieves forum settings and user-specific settings for client-side options on the forum. - responses: - "200": - description: "" - content: - application/json: - schema: - type: object - properties: - relative_path: - type: string - upload_url: - type: string - assetBaseUrl: - type: string - siteTitle: - type: string - browserTitle: - type: string - titleLayout: - type: string - showSiteTitle: - type: boolean - maintenanceMode: - type: boolean - minimumTitleLength: - type: number - maximumTitleLength: - type: number - minimumPostLength: - type: number - maximumPostLength: - type: number - minimumTagsPerTopic: - type: number - maximumTagsPerTopic: - type: number - minimumTagLength: - type: number - undoTimeout: - type: number - maximumTagLength: - type: number - useOutgoingLinksPage: - type: boolean - allowGuestHandles: - type: boolean - allowTopicsThumbnail: - type: boolean - usePagination: - type: boolean - disableChat: - type: boolean - disableChatMessageEditing: - type: boolean - maximumChatMessageLength: - type: number - socketioTransports: - type: array - items: - type: string - socketioOrigins: - type: string - websocketAddress: - type: string - maxReconnectionAttempts: - type: number - reconnectionDelay: - type: number - topicsPerPage: - type: number - postsPerPage: - type: number - maximumFileSize: - type: number - theme:id: - type: string - theme:src: - type: string - defaultLang: - type: string - userLang: - type: string - loggedIn: - type: boolean - uid: - type: number - description: A user identifier - cache-buster: - type: string - topicPostSort: - type: string - categoryTopicSort: - type: string - csrf_token: - type: string - searchEnabled: - type: boolean - bootswatchSkin: - type: string - enablePostHistory: - type: boolean - timeagoCutoff: - type: number - timeagoCodes: - type: array - items: - type: string - cookies: - type: object - properties: - enabled: - type: boolean - message: - type: string - dismiss: - type: string - link: - type: string - link_url: - type: string - thumbs: - type: object - properties: - size: - type: number - acpLang: - type: string - openOutgoingLinksInNewTab: - type: boolean - topicSearchEnabled: - type: boolean - hideSubCategories: - type: boolean - hideCategoryLastPost: - type: boolean - enableQuickReply: - type: boolean - iconBackgrounds: - type: array - items: - type: string - description: A valid CSS colour code +get: + tags: + - home + summary: Get forum settings + description: This route retrieves forum settings and user-specific settings for client-side options on the forum. + responses: + "200": + description: "" + content: + application/json: + schema: + type: object + properties: + relative_path: + type: string + upload_url: + type: string + assetBaseUrl: + type: string + siteTitle: + type: string + browserTitle: + type: string + titleLayout: + type: string + showSiteTitle: + type: boolean + maintenanceMode: + type: boolean + minimumTitleLength: + type: number + maximumTitleLength: + type: number + minimumPostLength: + type: number + maximumPostLength: + type: number + minimumTagsPerTopic: + type: number + maximumTagsPerTopic: + type: number + minimumTagLength: + type: number + undoTimeout: + type: number + maximumTagLength: + type: number + useOutgoingLinksPage: + type: boolean + allowGuestHandles: + type: boolean + allowTopicsThumbnail: + type: boolean + usePagination: + type: boolean + disableChat: + type: boolean + disableChatMessageEditing: + type: boolean + maximumChatMessageLength: + type: number + socketioTransports: + type: array + items: + type: string + socketioOrigins: + type: string + websocketAddress: + type: string + maxReconnectionAttempts: + type: number + reconnectionDelay: + type: number + topicsPerPage: + type: number + postsPerPage: + type: number + maximumFileSize: + type: number + theme:id: + type: string + theme:src: + type: string + defaultLang: + type: string + userLang: + type: string + loggedIn: + type: boolean + uid: + type: number + description: A user identifier + cache-buster: + type: string + topicPostSort: + type: string + categoryTopicSort: + type: string + csrf_token: + type: string + searchEnabled: + type: boolean + bootswatchSkin: + type: string + enablePostHistory: + type: boolean + timeagoCutoff: + type: number + timeagoCodes: + type: array + items: + type: string + cookies: + type: object + properties: + enabled: + type: boolean + message: + type: string + dismiss: + type: string + link: + type: string + link_url: + type: string + thumbs: + type: object + properties: + size: + type: number + acpLang: + type: string + openOutgoingLinksInNewTab: + type: boolean + topicSearchEnabled: + type: boolean + hideSubCategories: + type: boolean + hideCategoryLastPost: + type: boolean + enableQuickReply: + type: boolean + iconBackgrounds: + type: array + items: + type: string + description: A valid CSS colour code example: '#fff' \ No newline at end of file diff --git a/public/openapi/read/confirm/code.yaml b/public/openapi/read/confirm/code.yaml index c3e7564..c2915ee 100644 --- a/public/openapi/read/confirm/code.yaml +++ b/public/openapi/read/confirm/code.yaml @@ -1,21 +1,21 @@ -get: - tags: - - authentication - summary: Verify an email address - responses: - "200": - description: Email address verified, or confirmation code was incorrect - content: - application/json: - schema: - allOf: - - type: object - properties: - title: - type: string - error: - type: string - description: Translation key for client-side localisation - required: - - title +get: + tags: + - authentication + summary: Verify an email address + responses: + "200": + description: Email address verified, or confirmation code was incorrect + content: + application/json: + schema: + allOf: + - type: object + properties: + title: + type: string + error: + type: string + description: Translation key for client-side localisation + required: + - title - $ref: ../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/email/unsubscribe/token.yaml b/public/openapi/read/email/unsubscribe/token.yaml index 3b1c9de..d7e72ca 100644 --- a/public/openapi/read/email/unsubscribe/token.yaml +++ b/public/openapi/read/email/unsubscribe/token.yaml @@ -1,60 +1,60 @@ -get: - tags: - - emails - summary: Unsubscribe user from email type (user variant) - parameters: - - name: token - in: path - required: true - schema: - type: string - example: testToken - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - payload: - type: object - properties: - uid: - type: number - template: - type: string - description: The type of email template to unsubscribe from. - enum: - - digest - - notification - type: - type: string - description: Only used if `template` is `notification`, signifies the type of notification to unsubscribe from. - nullable: true - iat: - type: number - description: Reflection of the token's "issued at" claim - required: - - uid - - template - - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps - "500": - description: "Server-side error (likely token verification failure)" -post: - tags: - - emails - summary: Unsubscribe user from email type (auto variant) - parameters: - - name: token - in: path - required: true - schema: - type: string - example: testToken - responses: - "200": - description: "Successfully unsubscribed" - "500": +get: + tags: + - emails + summary: Unsubscribe user from email type (user variant) + parameters: + - name: token + in: path + required: true + schema: + type: string + example: testToken + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + payload: + type: object + properties: + uid: + type: number + template: + type: string + description: The type of email template to unsubscribe from. + enum: + - digest + - notification + type: + type: string + description: Only used if `template` is `notification`, signifies the type of notification to unsubscribe from. + nullable: true + iat: + type: number + description: Reflection of the token's "issued at" claim + required: + - uid + - template + - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps + "500": + description: "Server-side error (likely token verification failure)" +post: + tags: + - emails + summary: Unsubscribe user from email type (auto variant) + parameters: + - name: token + in: path + required: true + schema: + type: string + example: testToken + responses: + "200": + description: "Successfully unsubscribed" + "500": description: "Server-side error (likely token verification failure)" \ No newline at end of file diff --git a/public/openapi/read/flags.yaml b/public/openapi/read/flags.yaml index 696a61a..005d107 100644 --- a/public/openapi/read/flags.yaml +++ b/public/openapi/read/flags.yaml @@ -1,76 +1,76 @@ -get: - tags: - - flags - summary: Get flags list - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - flags: - type: array - items: - type: object - properties: - state: - type: string - heat: - type: number - description: The number of reports that make up this flag - flagId: - type: number - type: - type: string - targetId: - oneOf: - - type: string - - type: number - targetUid: - type: number - datetime: - type: number - labelClass: - type: string - target_readable: - type: string - datetimeISO: - type: string - assignee: - type: string - nullable: true - analytics: - type: array - items: - type: number - hasFilter: - type: boolean - filters: - type: object - properties: - page: - type: number - perPage: - type: number - expanded: - type: boolean - sort: - type: string - title: - type: string - selectedCategory: - type: object - properties: - icon: - type: string - name: - type: string - bgColor: - type: string - nullable: true - - $ref: ../components/schemas/Pagination.yaml#/Pagination - - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - flags + summary: Get flags list + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + flags: + type: array + items: + type: object + properties: + state: + type: string + heat: + type: number + description: The number of reports that make up this flag + flagId: + type: number + type: + type: string + targetId: + oneOf: + - type: string + - type: number + targetUid: + type: number + datetime: + type: number + labelClass: + type: string + target_readable: + type: string + datetimeISO: + type: string + assignee: + type: string + nullable: true + analytics: + type: array + items: + type: number + hasFilter: + type: boolean + filters: + type: object + properties: + page: + type: number + perPage: + type: number + expanded: + type: boolean + sort: + type: string + title: + type: string + selectedCategory: + type: object + properties: + icon: + type: string + name: + type: string + bgColor: + type: string + nullable: true + - $ref: ../components/schemas/Pagination.yaml#/Pagination + - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/flags/flagId.yaml b/public/openapi/read/flags/flagId.yaml index 0939124..123d3d8 100644 --- a/public/openapi/read/flags/flagId.yaml +++ b/public/openapi/read/flags/flagId.yaml @@ -1,46 +1,46 @@ -get: - tags: - - flags - summary: /api/flags/{flagId} - parameters: - - name: flagId - in: path - required: true - schema: - type: string - example: 1 - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../components/schemas/FlagObject.yaml#/FlagObject - - type: object - properties: - type_path: - type: string - assignees: - type: array - items: - $ref: ../../components/schemas/UserObject.yaml#/UserObject - type_bool: - type: object - properties: - post: - type: boolean - user: - type: boolean - empty: - type: boolean - title: - type: string - privileges: - type: object - properties: {} - additionalProperties: - description: "A list of global and admin privileges, and whether the calling user has (or has inherited) them" - type: boolean - - $ref: ../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - flags + summary: /api/flags/{flagId} + parameters: + - name: flagId + in: path + required: true + schema: + type: string + example: 1 + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../components/schemas/FlagObject.yaml#/FlagObject + - type: object + properties: + type_path: + type: string + assignees: + type: array + items: + $ref: ../../components/schemas/UserObject.yaml#/UserObject + type_bool: + type: object + properties: + post: + type: boolean + user: + type: boolean + empty: + type: boolean + title: + type: string + privileges: + type: object + properties: {} + additionalProperties: + description: "A list of global and admin privileges, and whether the calling user has (or has inherited) them" + type: boolean + - $ref: ../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/groups.yaml b/public/openapi/read/groups.yaml index 8fc1217..41460cd 100644 --- a/public/openapi/read/groups.yaml +++ b/public/openapi/read/groups.yaml @@ -1,109 +1,109 @@ -get: - tags: - - groups - summary: Get user groups - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - groups: - type: array - items: - type: object - properties: - name: - type: string - description: - type: string - hidden: - type: number - system: - type: number - userTitle: - type: string - userTitleEscaped: - type: string - icon: - type: string - labelColor: - type: string - createtime: - type: number - slug: - type: string - memberCount: - type: number - private: - type: number - userTitleEnabled: - type: number - disableJoinRequests: - type: number - disableLeave: - type: number - nameEncoded: - type: string - displayName: - type: string - textColor: - type: string - createtimeISO: - type: string - cover:thumb:url: - type: string - cover:url: - type: string - cover:position: - type: string - memberPostCids: - type: string - memberPostCidsArray: - type: array - items: - type: number - example: [1, 2, 3] - members: - type: array - items: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - picture: - nullable: true - type: string - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without - an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's auto-generated - icon - example: "#f44336" - truncated: - type: boolean - allowGroupCreation: - type: boolean - nextStart: - type: number - title: - type: string - - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - groups + summary: Get user groups + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + groups: + type: array + items: + type: object + properties: + name: + type: string + description: + type: string + hidden: + type: number + system: + type: number + userTitle: + type: string + userTitleEscaped: + type: string + icon: + type: string + labelColor: + type: string + createtime: + type: number + slug: + type: string + memberCount: + type: number + private: + type: number + userTitleEnabled: + type: number + disableJoinRequests: + type: number + disableLeave: + type: number + nameEncoded: + type: string + displayName: + type: string + textColor: + type: string + createtimeISO: + type: string + cover:thumb:url: + type: string + cover:url: + type: string + cover:position: + type: string + memberPostCids: + type: string + memberPostCidsArray: + type: array + items: + type: number + example: [1, 2, 3] + members: + type: array + items: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + picture: + nullable: true + type: string + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without + an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's auto-generated + icon + example: "#f44336" + truncated: + type: boolean + allowGroupCreation: + type: boolean + nextStart: + type: number + title: + type: string + - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/groups/slug.yaml b/public/openapi/read/groups/slug.yaml index d2ef318..862ecaa 100644 --- a/public/openapi/read/groups/slug.yaml +++ b/public/openapi/read/groups/slug.yaml @@ -1,34 +1,34 @@ -get: - tags: - - groups - summary: Get user group details - parameters: - - name: slug - in: path - required: true - schema: - type: string - example: administrators - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - title: - type: string - group: - $ref: ../../components/schemas/GroupObject.yaml#/GroupFullObject - posts: - $ref: ../../components/schemas/PostsObject.yaml#/PostsObject - isAdmin: - type: boolean - isGlobalMod: - type: boolean - allowPrivateGroups: - type: number - - $ref: ../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - groups + summary: Get user group details + parameters: + - name: slug + in: path + required: true + schema: + type: string + example: administrators + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + title: + type: string + group: + $ref: ../../components/schemas/GroupObject.yaml#/GroupFullObject + posts: + $ref: ../../components/schemas/PostsObject.yaml#/PostsObject + isAdmin: + type: boolean + isGlobalMod: + type: boolean + allowPrivateGroups: + type: number + - $ref: ../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/groups/slug/members.yaml b/public/openapi/read/groups/slug/members.yaml index 6f2f3d6..771612c 100644 --- a/public/openapi/read/groups/slug/members.yaml +++ b/public/openapi/read/groups/slug/members.yaml @@ -1,25 +1,25 @@ -get: - tags: - - groups - summary: Get user group members - parameters: - - name: slug - in: path - required: true - schema: - type: string - example: administrators - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - users: - type: array - - $ref: ../../../components/schemas/Pagination.yaml#/Pagination - - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps +get: + tags: + - groups + summary: Get user group members + parameters: + - name: slug + in: path + required: true + schema: + type: string + example: administrators + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + users: + type: array + - $ref: ../../../components/schemas/Pagination.yaml#/Pagination + - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs + - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps diff --git a/public/openapi/read/index.yaml b/public/openapi/read/index.yaml index 4e6c6e4..2df515e 100644 --- a/public/openapi/read/index.yaml +++ b/public/openapi/read/index.yaml @@ -1,208 +1,208 @@ -get: - tags: - - home - description: > - This route is used to populate the homepage of NodeBB. It is the main - access point of the forum, and shows a list of categories for navigation - purposes. - summary: Get forum index data - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - title: - type: string - description: The page title - selectCategoryLabel: - type: string - description: Label to use for the category selector - categories: - description: A collection of category data objects - type: array - items: - allOf: - - $ref: ../components/schemas/CategoryObject.yaml#/CategoryObject - - type: object - properties: - tagWhitelist: - type: array - items: - type: string - unread-class: - type: string - children: - type: array - items: - allOf: - - $ref: ../components/schemas/CategoryObject.yaml#/CategoryObject - - type: object - properties: - tagWhitelist: - type: array - items: - type: string - unread-class: - type: string - children: - type: array - items: - $ref: ../components/schemas/CategoryObject.yaml#/CategoryObject - parent: - allOf: - - $ref: ../components/schemas/CategoryObject.yaml#/CategoryObject - - type: object - properties: - tagWhitelist: - type: array - items: - type: string - unread-class: - type: string - posts: - type: array - items: - type: object - properties: - pid: - type: number - timestamp: - type: number - content: - type: string - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - user: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - nullable: true - type: string - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to - users without an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction - with `icon:text` for the user's - auto-generated icon - example: "#f44336" - index: - type: number - cid: - type: number - description: A category identifier - parentCid: - type: number - description: The category identifier for the category that is the immediate - ancestor of the current category - topic: - type: object - properties: - slug: - type: string - title: - type: string - imageClass: - type: string - timesClicked: - type: number - posts: - type: array - items: - type: object - properties: - pid: - type: number - timestamp: - type: number - content: - type: string - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - user: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - nullable: true - type: string - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users - without an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's - auto-generated icon - example: "#f44336" - index: - type: number - cid: - type: number - description: A category identifier - topic: - type: object - properties: - slug: - type: string - title: - type: string - teaser: - type: object - properties: - url: - type: string - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - pid: - type: number - topic: - type: object - properties: - slug: - type: string - title: - type: string - imageClass: - type: string - - $ref: ../components/schemas/Pagination.yaml#/Pagination +get: + tags: + - home + description: > + This route is used to populate the homepage of NodeBB. It is the main + access point of the forum, and shows a list of categories for navigation + purposes. + summary: Get forum index data + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + title: + type: string + description: The page title + selectCategoryLabel: + type: string + description: Label to use for the category selector + categories: + description: A collection of category data objects + type: array + items: + allOf: + - $ref: ../components/schemas/CategoryObject.yaml#/CategoryObject + - type: object + properties: + tagWhitelist: + type: array + items: + type: string + unread-class: + type: string + children: + type: array + items: + allOf: + - $ref: ../components/schemas/CategoryObject.yaml#/CategoryObject + - type: object + properties: + tagWhitelist: + type: array + items: + type: string + unread-class: + type: string + children: + type: array + items: + $ref: ../components/schemas/CategoryObject.yaml#/CategoryObject + parent: + allOf: + - $ref: ../components/schemas/CategoryObject.yaml#/CategoryObject + - type: object + properties: + tagWhitelist: + type: array + items: + type: string + unread-class: + type: string + posts: + type: array + items: + type: object + properties: + pid: + type: number + timestamp: + type: number + content: + type: string + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + user: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + nullable: true + type: string + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to + users without an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction + with `icon:text` for the user's + auto-generated icon + example: "#f44336" + index: + type: number + cid: + type: number + description: A category identifier + parentCid: + type: number + description: The category identifier for the category that is the immediate + ancestor of the current category + topic: + type: object + properties: + slug: + type: string + title: + type: string + imageClass: + type: string + timesClicked: + type: number + posts: + type: array + items: + type: object + properties: + pid: + type: number + timestamp: + type: number + content: + type: string + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + user: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + nullable: true + type: string + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users + without an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's + auto-generated icon + example: "#f44336" + index: + type: number + cid: + type: number + description: A category identifier + topic: + type: object + properties: + slug: + type: string + title: + type: string + teaser: + type: object + properties: + url: + type: string + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + pid: + type: number + topic: + type: object + properties: + slug: + type: string + title: + type: string + imageClass: + type: string + - $ref: ../components/schemas/Pagination.yaml#/Pagination - $ref: ../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/ip-blacklist.yaml b/public/openapi/read/ip-blacklist.yaml index 332d2fc..b0ea962 100644 --- a/public/openapi/read/ip-blacklist.yaml +++ b/public/openapi/read/ip-blacklist.yaml @@ -1,7 +1,7 @@ -get: - tags: - - admin - summary: Get IP blacklist settings - responses: - "418": +get: + tags: + - admin + summary: Get IP blacklist settings + responses: + "418": description: "TODO: A proper response needs to be added. It is not really a teapot | Copy response from corresponding admin route" \ No newline at end of file diff --git a/public/openapi/read/login.yaml b/public/openapi/read/login.yaml index 4e5b394..11a292d 100644 --- a/public/openapi/read/login.yaml +++ b/public/openapi/read/login.yaml @@ -1,58 +1,58 @@ -get: - tags: - - authentication - summary: Log in a user - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - loginFormEntry: - type: array - items: - type: object - properties: - label: - type: string - description: A label for the added block - html: - type: string - description: HTML to render on the login page - styleName: - type: string - description: Custom identifier (value is added to `input[id]` and `label[for]`) - alternate_logins: - type: boolean - authentication: - type: array - items: - type: object - properties: - name: - type: string - url: - type: string - callbackURL: - type: string - icon: - type: string - scope: - type: string - prompt: - type: string - allowRegistration: - type: boolean - allowLoginWith: - type: string - title: - type: string - allowPasswordReset: - type: boolean - allowLocalLogin: - type: boolean - - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - authentication + summary: Log in a user + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + loginFormEntry: + type: array + items: + type: object + properties: + label: + type: string + description: A label for the added block + html: + type: string + description: HTML to render on the login page + styleName: + type: string + description: Custom identifier (value is added to `input[id]` and `label[for]`) + alternate_logins: + type: boolean + authentication: + type: array + items: + type: object + properties: + name: + type: string + url: + type: string + callbackURL: + type: string + icon: + type: string + scope: + type: string + prompt: + type: string + allowRegistration: + type: boolean + allowLoginWith: + type: string + title: + type: string + allowPasswordReset: + type: boolean + allowLocalLogin: + type: boolean + - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/me.yaml b/public/openapi/read/me.yaml index 6c3feba..f152327 100644 --- a/public/openapi/read/me.yaml +++ b/public/openapi/read/me.yaml @@ -1,10 +1,10 @@ -get: - tags: - - shorthand - summary: Access your own profile's sub-pages - description: >- - This shorthand is useful if you want to link to pages in your own account profile, but do not want (or have) the `userslug`. It is also especially useful as a - means to instruct users on how to do things, as you can easily redirect them to their own profile pages. - responses: - "200": +get: + tags: + - shorthand + summary: Access your own profile's sub-pages + description: >- + This shorthand is useful if you want to link to pages in your own account profile, but do not want (or have) the `userslug`. It is also especially useful as a + means to instruct users on how to do things, as you can easily redirect them to their own profile pages. + responses: + "200": description: "Canonical URL to your requested profile page" \ No newline at end of file diff --git a/public/openapi/read/notifications.yaml b/public/openapi/read/notifications.yaml index 59acc0a..f299c9e 100644 --- a/public/openapi/read/notifications.yaml +++ b/public/openapi/read/notifications.yaml @@ -1,112 +1,112 @@ -get: - tags: - - notifications - summary: Get notifications - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - notifications: - type: array - items: - type: object - properties: - bodyShort: - type: string - path: - type: string - nid: - type: string - from: - type: number - importance: - type: number - datetime: - type: number - datetimeISO: - type: string - user: - type: object - properties: - username: - type: string - description: A friendly name for a given user account - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - type: string - nullable: true - uid: - type: number - description: A user identifier - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without - an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's auto-generated - icon - example: "#f44336" - image: - type: string - nullable: true - read: - type: boolean - readClass: - type: string - filters: - type: array - items: - type: object - additionalProperties: {} - regularFilters: - type: array - items: - type: object - properties: - name: - type: string - filter: - type: string - selected: - type: boolean - required: - - name - - filter - moderatorFilters: - type: array - items: - type: object - properties: - name: - type: string - filter: - type: string - selectedFilter: - type: object - properties: - name: - type: string - filter: - type: string - selected: - type: boolean - title: - type: string - - $ref: ../components/schemas/Pagination.yaml#/Pagination - - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - notifications + summary: Get notifications + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + notifications: + type: array + items: + type: object + properties: + bodyShort: + type: string + path: + type: string + nid: + type: string + from: + type: number + importance: + type: number + datetime: + type: number + datetimeISO: + type: string + user: + type: object + properties: + username: + type: string + description: A friendly name for a given user account + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + type: string + nullable: true + uid: + type: number + description: A user identifier + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without + an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's auto-generated + icon + example: "#f44336" + image: + type: string + nullable: true + read: + type: boolean + readClass: + type: string + filters: + type: array + items: + type: object + additionalProperties: {} + regularFilters: + type: array + items: + type: object + properties: + name: + type: string + filter: + type: string + selected: + type: boolean + required: + - name + - filter + moderatorFilters: + type: array + items: + type: object + properties: + name: + type: string + filter: + type: string + selectedFilter: + type: object + properties: + name: + type: string + filter: + type: string + selected: + type: boolean + title: + type: string + - $ref: ../components/schemas/Pagination.yaml#/Pagination + - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/outgoing.yaml b/public/openapi/read/outgoing.yaml index ffde824..1f34b42 100644 --- a/public/openapi/read/outgoing.yaml +++ b/public/openapi/read/outgoing.yaml @@ -1,29 +1,29 @@ -get: - tags: - - other - summary: Warn before navigating externally - parameters: - - in: query - name: url - schema: - type: string - description: URL of the page to warn the user about - example: https://example.org - description: This route presents a warning to a user notifying them that the page they are about to view is hosted externally. They then have the option of continuing onwards or going back to where they came from. - responses: - "200": - description: Warning page presented - content: - application/json: - schema: - allOf: - - type: object - properties: - outgoing: - type: string - description: Escaped URL of the page to navigate to - title: - description: The page title - type: string - - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - other + summary: Warn before navigating externally + parameters: + - in: query + name: url + schema: + type: string + description: URL of the page to warn the user about + example: https://example.org + description: This route presents a warning to a user notifying them that the page they are about to view is hosted externally. They then have the option of continuing onwards or going back to where they came from. + responses: + "200": + description: Warning page presented + content: + application/json: + schema: + allOf: + - type: object + properties: + outgoing: + type: string + description: Escaped URL of the page to navigate to + title: + description: The page title + type: string + - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/popular.yaml b/public/openapi/read/popular.yaml index 4d87024..6d21555 100644 --- a/public/openapi/read/popular.yaml +++ b/public/openapi/read/popular.yaml @@ -1,111 +1,111 @@ -get: - tags: - - topics - summary: Get popular topics - description: Returns a list of topics sorted by most replies. In an event of a - tie breaker, the topic with the most views. Can be filtered by All Time, - Day, Week, or Month. - responses: - "200": - description: An array of topic objects sorted by most replies and views. - content: - application/json: - schema: - allOf: - - type: object - properties: - nextStart: - type: number - topicCount: - type: number - topics: - type: array - items: - $ref: ../components/schemas/TopicObject.yaml#/TopicObject - tids: - type: array - items: - type: number - canPost: - type: boolean - showSelect: - type: boolean - showTopicTools: - type: boolean - allCategoriesUrl: - type: string - selectedCategory: - type: object - properties: - icon: - type: string - name: - type: string - bgColor: - type: string - nullable: true - selectedCids: - type: array - items: - type: number - feeds:disableRSS: - type: number - rssFeedUrl: - type: string - title: - type: string - filters: - type: array - items: - type: object - properties: - name: - type: string - url: - type: string - selected: - type: boolean - filter: - type: string - icon: - type: string - selectedFilter: - type: object - properties: - name: - type: string - url: - type: string - selected: - type: boolean - filter: - type: string - icon: - type: string - terms: - type: array - items: - type: object - properties: - name: - type: string - url: - type: string - selected: - type: boolean - term: - type: string - selectedTerm: - type: object - properties: - name: - type: string - url: - type: string - selected: - type: boolean - term: - type: string - - $ref: ../components/schemas/Pagination.yaml#/Pagination - - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - topics + summary: Get popular topics + description: Returns a list of topics sorted by most replies. In an event of a + tie breaker, the topic with the most views. Can be filtered by All Time, + Day, Week, or Month. + responses: + "200": + description: An array of topic objects sorted by most replies and views. + content: + application/json: + schema: + allOf: + - type: object + properties: + nextStart: + type: number + topicCount: + type: number + topics: + type: array + items: + $ref: ../components/schemas/TopicObject.yaml#/TopicObject + tids: + type: array + items: + type: number + canPost: + type: boolean + showSelect: + type: boolean + showTopicTools: + type: boolean + allCategoriesUrl: + type: string + selectedCategory: + type: object + properties: + icon: + type: string + name: + type: string + bgColor: + type: string + nullable: true + selectedCids: + type: array + items: + type: number + feeds:disableRSS: + type: number + rssFeedUrl: + type: string + title: + type: string + filters: + type: array + items: + type: object + properties: + name: + type: string + url: + type: string + selected: + type: boolean + filter: + type: string + icon: + type: string + selectedFilter: + type: object + properties: + name: + type: string + url: + type: string + selected: + type: boolean + filter: + type: string + icon: + type: string + terms: + type: array + items: + type: object + properties: + name: + type: string + url: + type: string + selected: + type: boolean + term: + type: string + selectedTerm: + type: object + properties: + name: + type: string + url: + type: string + selected: + type: boolean + term: + type: string + - $ref: ../components/schemas/Pagination.yaml#/Pagination + - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/post-queue.yaml b/public/openapi/read/post-queue.yaml index 2edffc6..5e1f568 100644 --- a/public/openapi/read/post-queue.yaml +++ b/public/openapi/read/post-queue.yaml @@ -1,167 +1,167 @@ -get: - tags: - - admin - summary: Get flag data - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - title: - type: string - allCategoriesUrl: - type: string - selectedCategory: - type: object - properties: - icon: - type: string - name: - type: string - bgColor: - type: string - nullable: true - selectedCids: - type: array - items: - type: number - posts: - type: array - items: - allOf: - - type: object - properties: - id: - type: string - uid: - type: number - description: A user identifier - type: - type: string - data: - type: object - properties: - title: - type: string - content: - type: string - thumb: - type: string - cid: - oneOf: - - type: number - - type: string - tags: - type: array - items: {} - uid: - type: number - description: A user identifier - req: - type: object - properties: - uid: - type: number - description: A user identifier - ip: - type: string - host: - type: string - protocol: - type: string - secure: - type: boolean - url: - type: string - path: - type: string - headers: - type: object - properties: - x-real-ip: - type: string - x-forwarded-for: - type: string - x-forwarded-proto: - type: string - host: - type: string - x-nginx-proxy: - type: string - connection: - type: string - accept: - type: string - user-agent: - type: string - sec-fetch-site: - type: string - sec-fetch-mode: - type: string - referer: - type: string - accept-encoding: - type: string - accept-language: - type: string - cookie: - type: string - timestamp: - type: number - fromQueue: - type: boolean - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - rawContent: - type: string - tid: - type: number - description: A topic identifier - toPid: - nullable: true - user: - type: object - properties: - username: - type: string - description: A friendly name for a given user account - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - nullable: true - type: string - uid: - type: number - description: A user identifier - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without - an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's auto-generated - icon - example: "#f44336" - topic: - type: object - properties: - cid: - type: number - title: - type: string - titleRaw: - type: string - - $ref: ../components/schemas/CategoryObject.yaml#/CategoryObject - - $ref: ../components/schemas/Pagination.yaml#/Pagination - - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - admin + summary: Get flag data + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + title: + type: string + allCategoriesUrl: + type: string + selectedCategory: + type: object + properties: + icon: + type: string + name: + type: string + bgColor: + type: string + nullable: true + selectedCids: + type: array + items: + type: number + posts: + type: array + items: + allOf: + - type: object + properties: + id: + type: string + uid: + type: number + description: A user identifier + type: + type: string + data: + type: object + properties: + title: + type: string + content: + type: string + thumb: + type: string + cid: + oneOf: + - type: number + - type: string + tags: + type: array + items: {} + uid: + type: number + description: A user identifier + req: + type: object + properties: + uid: + type: number + description: A user identifier + ip: + type: string + host: + type: string + protocol: + type: string + secure: + type: boolean + url: + type: string + path: + type: string + headers: + type: object + properties: + x-real-ip: + type: string + x-forwarded-for: + type: string + x-forwarded-proto: + type: string + host: + type: string + x-nginx-proxy: + type: string + connection: + type: string + accept: + type: string + user-agent: + type: string + sec-fetch-site: + type: string + sec-fetch-mode: + type: string + referer: + type: string + accept-encoding: + type: string + accept-language: + type: string + cookie: + type: string + timestamp: + type: number + fromQueue: + type: boolean + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + rawContent: + type: string + tid: + type: number + description: A topic identifier + toPid: + nullable: true + user: + type: object + properties: + username: + type: string + description: A friendly name for a given user account + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + nullable: true + type: string + uid: + type: number + description: A user identifier + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without + an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's auto-generated + icon + example: "#f44336" + topic: + type: object + properties: + cid: + type: number + title: + type: string + titleRaw: + type: string + - $ref: ../components/schemas/CategoryObject.yaml#/CategoryObject + - $ref: ../components/schemas/Pagination.yaml#/Pagination + - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/post/pid.yaml b/public/openapi/read/post/pid.yaml index 6d29489..608b280 100644 --- a/public/openapi/read/post/pid.yaml +++ b/public/openapi/read/post/pid.yaml @@ -1,19 +1,19 @@ -get: - tags: - - shorthand - summary: Access a specific post - description: This route comes in handy when all you have is the `pid`, and you want to redirect users to the canonical URL for the topic, with the appropriate topic slug and post index. - parameters: - - name: pid - in: path - required: true - schema: - type: string - example: 1 - responses: - "200": - description: "Canonical URL of topic" - content: - text/plain: - schema: +get: + tags: + - shorthand + summary: Access a specific post + description: This route comes in handy when all you have is the `pid`, and you want to redirect users to the canonical URL for the topic, with the appropriate topic slug and post index. + parameters: + - name: pid + in: path + required: true + schema: + type: string + example: 1 + responses: + "200": + description: "Canonical URL of topic" + content: + text/plain: + schema: type: string \ No newline at end of file diff --git a/public/openapi/read/post/upload.yaml b/public/openapi/read/post/upload.yaml index 6b4c643..e8653d0 100644 --- a/public/openapi/read/post/upload.yaml +++ b/public/openapi/read/post/upload.yaml @@ -1,25 +1,25 @@ -post: - tags: - - posts - summary: Upload a file to a specific post - description: Provided by NodeBB core and used mainly by the composer, this route allows you to upload an image or file to a post. - responses: - "200": - description: "" - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../components/schemas/Status.yaml#/Status - response: - type: object - properties: - images: - type: array - items: - type: object - properties: - url: +post: + tags: + - posts + summary: Upload a file to a specific post + description: Provided by NodeBB core and used mainly by the composer, this route allows you to upload an image or file to a post. + responses: + "200": + description: "" + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../components/schemas/Status.yaml#/Status + response: + type: object + properties: + images: + type: array + items: + type: object + properties: + url: type: string \ No newline at end of file diff --git a/public/openapi/read/recent.yaml b/public/openapi/read/recent.yaml index 4e019cf..92a9eed 100644 --- a/public/openapi/read/recent.yaml +++ b/public/openapi/read/recent.yaml @@ -1,109 +1,109 @@ -get: - tags: - - topics - summary: Get recent topics - description: Returns a list of topics sorted by timestamp. - responses: - "200": - description: An array of topic objects sorted by timestamp. - content: - application/json: - schema: - allOf: - - type: object - properties: - nextStart: - type: number - topicCount: - type: number - topics: - type: array - items: - $ref: ../components/schemas/TopicObject.yaml#/TopicObject - tids: - type: array - items: - type: number - canPost: - type: boolean - showSelect: - type: boolean - showTopicTools: - type: boolean - allCategoriesUrl: - type: string - selectedCategory: - type: object - properties: - icon: - type: string - name: - type: string - bgColor: - type: string - nullable: true - selectedCids: - type: array - items: - type: number - feeds:disableRSS: - type: number - rssFeedUrl: - type: string - title: - type: string - filters: - type: array - items: - type: object - properties: - name: - type: string - url: - type: string - selected: - type: boolean - filter: - type: string - icon: - type: string - selectedFilter: - type: object - properties: - name: - type: string - url: - type: string - selected: - type: boolean - filter: - type: string - icon: - type: string - terms: - type: array - items: - type: object - properties: - name: - type: string - url: - type: string - selected: - type: boolean - term: - type: string - selectedTerm: - type: object - properties: - name: - type: string - url: - type: string - selected: - type: boolean - term: - type: string - - $ref: ../components/schemas/Pagination.yaml#/Pagination - - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - topics + summary: Get recent topics + description: Returns a list of topics sorted by timestamp. + responses: + "200": + description: An array of topic objects sorted by timestamp. + content: + application/json: + schema: + allOf: + - type: object + properties: + nextStart: + type: number + topicCount: + type: number + topics: + type: array + items: + $ref: ../components/schemas/TopicObject.yaml#/TopicObject + tids: + type: array + items: + type: number + canPost: + type: boolean + showSelect: + type: boolean + showTopicTools: + type: boolean + allCategoriesUrl: + type: string + selectedCategory: + type: object + properties: + icon: + type: string + name: + type: string + bgColor: + type: string + nullable: true + selectedCids: + type: array + items: + type: number + feeds:disableRSS: + type: number + rssFeedUrl: + type: string + title: + type: string + filters: + type: array + items: + type: object + properties: + name: + type: string + url: + type: string + selected: + type: boolean + filter: + type: string + icon: + type: string + selectedFilter: + type: object + properties: + name: + type: string + url: + type: string + selected: + type: boolean + filter: + type: string + icon: + type: string + terms: + type: array + items: + type: object + properties: + name: + type: string + url: + type: string + selected: + type: boolean + term: + type: string + selectedTerm: + type: object + properties: + name: + type: string + url: + type: string + selected: + type: boolean + term: + type: string + - $ref: ../components/schemas/Pagination.yaml#/Pagination + - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/recent/posts/term.yaml b/public/openapi/read/recent/posts/term.yaml index ae5fdec..57967cb 100644 --- a/public/openapi/read/recent/posts/term.yaml +++ b/public/openapi/read/recent/posts/term.yaml @@ -1,25 +1,25 @@ -get: - tags: - - posts - summary: Get recent posts - parameters: - - name: term - in: path - required: true - schema: - type: string - example: day - description: term is used to limit the returned posts to a specific term. Valid values are day, week, month. If you don't pass it in all posts will be returned. - - name: page - in: query - required: false - schema: - type: number - example: page=1 - responses: - "200": - description: "" - content: - application/json: - schema: +get: + tags: + - posts + summary: Get recent posts + parameters: + - name: term + in: path + required: true + schema: + type: string + example: day + description: term is used to limit the returned posts to a specific term. Valid values are day, week, month. If you don't pass it in all posts will be returned. + - name: page + in: query + required: false + schema: + type: number + example: page=1 + responses: + "200": + description: "" + content: + application/json: + schema: $ref: ../../../components/schemas/PostsObject.yaml#/PostsObject \ No newline at end of file diff --git a/public/openapi/read/register.yaml b/public/openapi/read/register.yaml index b4ec6d4..89dffc1 100644 --- a/public/openapi/read/register.yaml +++ b/public/openapi/read/register.yaml @@ -1,57 +1,57 @@ -get: - tags: - - authentication - summary: Register a new user - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - register_window:spansize: - type: string - alternate_logins: - type: boolean - authentication: - type: array - items: - type: object - properties: - name: - type: string - url: - type: string - callbackURL: - type: string - icon: - type: string - scope: - type: string - prompt: - type: string - minimumUsernameLength: - type: number - maximumUsernameLength: - type: number - minimumPasswordLength: - type: number - minimumPasswordStrength: - type: number - regFormEntry: - type: array - items: - type: object - properties: - label: - type: string - html: - type: string - styleName: - type: string - title: - type: string - - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - authentication + summary: Register a new user + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + register_window:spansize: + type: string + alternate_logins: + type: boolean + authentication: + type: array + items: + type: object + properties: + name: + type: string + url: + type: string + callbackURL: + type: string + icon: + type: string + scope: + type: string + prompt: + type: string + minimumUsernameLength: + type: number + maximumUsernameLength: + type: number + minimumPasswordLength: + type: number + minimumPasswordStrength: + type: number + regFormEntry: + type: array + items: + type: object + properties: + label: + type: string + html: + type: string + styleName: + type: string + title: + type: string + - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/register/complete.yaml b/public/openapi/read/register/complete.yaml index d6f8e48..b6060ce 100644 --- a/public/openapi/read/register/complete.yaml +++ b/public/openapi/read/register/complete.yaml @@ -1,30 +1,30 @@ -get: - tags: - - authentication - summary: Complete a user's registration - responses: - "302": - description: If there are no additional registration steps to complete, then the user is redirected back to the registration page (`/register`) - headers: - Location: - schema: - type: string - example: /register - "200": - description: '' - content: - application/json: - schema: - allOf: - - type: object - properties: - title: - type: string - errors: - type: array - items: {} - sections: - type: array - items: - type: string +get: + tags: + - authentication + summary: Complete a user's registration + responses: + "302": + description: If there are no additional registration steps to complete, then the user is redirected back to the registration page (`/register`) + headers: + Location: + schema: + type: string + example: /register + "200": + description: '' + content: + application/json: + schema: + allOf: + - type: object + properties: + title: + type: string + errors: + type: array + items: {} + sections: + type: array + items: + type: string - $ref: ../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/registration-queue.yaml b/public/openapi/read/registration-queue.yaml index dc44e9d..971e01a 100644 --- a/public/openapi/read/registration-queue.yaml +++ b/public/openapi/read/registration-queue.yaml @@ -1,7 +1,7 @@ -get: - tags: - - admin - summary: Get registration queue - responses: - "418": +get: + tags: + - admin + summary: Get registration queue + responses: + "418": description: "TODO: A proper response needs to be added. It is not really a teapot | Copy response from corresponding admin route" \ No newline at end of file diff --git a/public/openapi/read/reset.yaml b/public/openapi/read/reset.yaml index d8883c1..e4f9dbf 100644 --- a/public/openapi/read/reset.yaml +++ b/public/openapi/read/reset.yaml @@ -1,20 +1,20 @@ -get: - tags: - - authentication - summary: Get user password reset (step 1) - responses: - "200": - description: "A JSON object containing the 1st step of the user password reset flow" - content: - application/json: - schema: - allOf: - - type: object - properties: - code: - type: string - nullable: true - title: - type: string - - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - authentication + summary: Get user password reset (step 1) + responses: + "200": + description: "A JSON object containing the 1st step of the user password reset flow" + content: + application/json: + schema: + allOf: + - type: object + properties: + code: + type: string + nullable: true + title: + type: string + - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/reset/code.yaml b/public/openapi/read/reset/code.yaml index 7c0670b..fcccb07 100644 --- a/public/openapi/read/reset/code.yaml +++ b/public/openapi/read/reset/code.yaml @@ -1,32 +1,32 @@ -get: - tags: - - authentication - summary: Get user password reset (step 2) - parameters: - - name: code - in: path - required: true - schema: - type: string - example: testCode - responses: - "200": - description: "A JSON object containing the 2nd step of the user password reset flow" - content: - application/json: - schema: - allOf: - - type: object - properties: - valid: - type: boolean - code: - type: string - minimumPasswordLength: - type: number - minimumPasswordStrength: - type: number - title: - type: string - - $ref: ../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - authentication + summary: Get user password reset (step 2) + parameters: + - name: code + in: path + required: true + schema: + type: string + example: testCode + responses: + "200": + description: "A JSON object containing the 2nd step of the user password reset flow" + content: + application/json: + schema: + allOf: + - type: object + properties: + valid: + type: boolean + code: + type: string + minimumPasswordLength: + type: number + minimumPasswordStrength: + type: number + title: + type: string + - $ref: ../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/search.yaml b/public/openapi/read/search.yaml index 9ada567..2700291 100644 --- a/public/openapi/read/search.yaml +++ b/public/openapi/read/search.yaml @@ -1,77 +1,77 @@ -get: - tags: - - search - summary: Get search results - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - posts: - $ref: ../components/schemas/PostsObject.yaml#/PostsObject - matchCount: - type: number - pageCount: - type: number - time: - type: string - multiplePages: - type: boolean - search_query: - type: string - term: - type: string - allCategories: - type: array - items: - type: object - properties: - value: - oneOf: - - type: string - - type: number - text: - type: string - allCategoriesCount: - type: number - expandSearch: - type: boolean - showAsPosts: - type: boolean - showAsTopics: - type: boolean - title: - type: string - searchDefaultSortBy: - type: string - privileges: - type: object - properties: - search:users: - type: boolean - search:content: - type: boolean - search:tags: - type: boolean - required: - - posts - - matchCount - - pageCount - - time - - multiplePages - - search_query - - allCategories - - allCategoriesCount - - expandSearch - - showAsPosts - - showAsTopics - - title - - searchDefaultSortBy - - permissions - - $ref: ../components/schemas/Pagination.yaml#/Pagination - - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - search + summary: Get search results + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + posts: + $ref: ../components/schemas/PostsObject.yaml#/PostsObject + matchCount: + type: number + pageCount: + type: number + time: + type: string + multiplePages: + type: boolean + search_query: + type: string + term: + type: string + allCategories: + type: array + items: + type: object + properties: + value: + oneOf: + - type: string + - type: number + text: + type: string + allCategoriesCount: + type: number + expandSearch: + type: boolean + showAsPosts: + type: boolean + showAsTopics: + type: boolean + title: + type: string + searchDefaultSortBy: + type: string + privileges: + type: object + properties: + search:users: + type: boolean + search:content: + type: boolean + search:tags: + type: boolean + required: + - posts + - matchCount + - pageCount + - time + - multiplePages + - search_query + - allCategories + - allCategoriesCount + - expandSearch + - showAsPosts + - showAsTopics + - title + - searchDefaultSortBy + - permissions + - $ref: ../components/schemas/Pagination.yaml#/Pagination + - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/self.yaml b/public/openapi/read/self.yaml index e397970..711ebff 100644 --- a/public/openapi/read/self.yaml +++ b/public/openapi/read/self.yaml @@ -1,12 +1,12 @@ -get: - tags: - - shorthand - summary: Access your profile data - description: This shorthand returns the data for the logged in user, identical to the data returned at this route /user/ - responses: - "200": - description: "" - content: - application/json: - schema: +get: + tags: + - shorthand + summary: Access your profile data + description: This shorthand returns the data for the logged in user, identical to the data returned at this route /user/ + responses: + "200": + description: "" + content: + application/json: + schema: $ref: ../components/schemas/UserObject.yaml#/UserObjectFull \ No newline at end of file diff --git a/public/openapi/read/tags.yaml b/public/openapi/read/tags.yaml index 05f407e..33b3adb 100644 --- a/public/openapi/read/tags.yaml +++ b/public/openapi/read/tags.yaml @@ -1,27 +1,27 @@ -get: - tags: - - tags - summary: Get tags - description: Returns a list of tags sorted by the most topics - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - tags: - type: array - description: An array of tags sorted by the most topics - items: - $ref: ../components/schemas/TagObject.yaml#/TagObject - displayTagSearch: - type: boolean - nextStart: - type: number - title: - type: string - - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - tags + summary: Get tags + description: Returns a list of tags sorted by the most topics + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + tags: + type: array + description: An array of tags sorted by the most topics + items: + $ref: ../components/schemas/TagObject.yaml#/TagObject + displayTagSearch: + type: boolean + nextStart: + type: number + title: + type: string + - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/tags/tag.yaml b/public/openapi/read/tags/tag.yaml index 41557d7..6511c92 100644 --- a/public/openapi/read/tags/tag.yaml +++ b/public/openapi/read/tags/tag.yaml @@ -1,261 +1,261 @@ -get: - tags: - - tags - summary: Get tag data - description: Returns a list of topics that are tagged with {tag} - parameters: - - name: tag - description: The tag used to retrieve the topics - in: path - required: true - schema: - type: string - example: test - - name: page - description: Page number used in pagination - in: query - required: false - schema: - type: number - example: '' - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - topics: - type: array - description: An array of topics that are all tagged with {tag} - items: - type: object - properties: - tid: - type: number - description: A topic identifier - uid: - type: number - description: A user identifier - cid: - type: number - description: A category identifier - mainPid: - type: number - description: The post id of the first post in this topic (also called the - "original post") - title: - type: string - slug: - type: string - timestamp: - type: number - lastposttime: - type: number - postcount: - type: number - viewcount: - type: number - teaserPid: - oneOf: - - type: number - - type: string - deleted: - type: number - locked: - type: number - pinned: - type: number - description: Whether or not this particular topic is pinned to the top of the - category - upvotes: - type: number - downvotes: - type: number - titleRaw: - type: string - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - lastposttimeISO: - type: string - votes: - type: number - category: - type: object - properties: - cid: - type: number - description: A category identifier - name: - type: string - slug: - type: string - icon: - type: string - image: - nullable: true - imageClass: - nullable: true - type: string - bgColor: - type: string - color: - type: string - disabled: - type: number - user: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - reputation: - type: number - postcount: - type: number - picture: - nullable: true - type: string - signature: - nullable: true - type: string - banned: - type: number - status: - type: string - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without - an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's auto-generated - icon - example: "#f44336" - banned_until_readable: - type: string - fullname: - type: string - teaser: - type: object - properties: - pid: - type: number - uid: - type: number - description: A user identifier - timestamp: - type: number - tid: - type: number - description: A topic identifier - content: - type: string - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - user: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - nullable: true - type: string - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users - without an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's - auto-generated icon - example: "#f44336" - index: - type: number - tags: - type: array - items: - $ref: ../../components/schemas/TagObject.yaml#/TagObject - isOwner: - type: boolean - ignored: - type: boolean - unread: - type: boolean - bookmark: - nullable: true - unreplied: - type: boolean - icons: - type: array - items: {} - index: - type: number - thumb: - type: string - isQuestion: - nullable: true - type: number - isSolved: - type: number - tag: - type: string - title: - type: string - showSelect: - type: boolean - showTopicTools: - type: boolean - allCategoriesUrl: - type: string - selectedCategory: - type: object - properties: - icon: - type: string - name: - type: string - bgColor: - type: string - nullable: true - selectedCids: - type: array - items: - type: number - rssFeedUrl: - type: string - feeds:disableRSS: - type: boolean - required: - - topics - - tag - - title - - categories - - $ref: ../../components/schemas/Pagination.yaml#/Pagination - - $ref: ../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - tags + summary: Get tag data + description: Returns a list of topics that are tagged with {tag} + parameters: + - name: tag + description: The tag used to retrieve the topics + in: path + required: true + schema: + type: string + example: test + - name: page + description: Page number used in pagination + in: query + required: false + schema: + type: number + example: '' + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + topics: + type: array + description: An array of topics that are all tagged with {tag} + items: + type: object + properties: + tid: + type: number + description: A topic identifier + uid: + type: number + description: A user identifier + cid: + type: number + description: A category identifier + mainPid: + type: number + description: The post id of the first post in this topic (also called the + "original post") + title: + type: string + slug: + type: string + timestamp: + type: number + lastposttime: + type: number + postcount: + type: number + viewcount: + type: number + teaserPid: + oneOf: + - type: number + - type: string + deleted: + type: number + locked: + type: number + pinned: + type: number + description: Whether or not this particular topic is pinned to the top of the + category + upvotes: + type: number + downvotes: + type: number + titleRaw: + type: string + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + lastposttimeISO: + type: string + votes: + type: number + category: + type: object + properties: + cid: + type: number + description: A category identifier + name: + type: string + slug: + type: string + icon: + type: string + image: + nullable: true + imageClass: + nullable: true + type: string + bgColor: + type: string + color: + type: string + disabled: + type: number + user: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + reputation: + type: number + postcount: + type: number + picture: + nullable: true + type: string + signature: + nullable: true + type: string + banned: + type: number + status: + type: string + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without + an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's auto-generated + icon + example: "#f44336" + banned_until_readable: + type: string + fullname: + type: string + teaser: + type: object + properties: + pid: + type: number + uid: + type: number + description: A user identifier + timestamp: + type: number + tid: + type: number + description: A topic identifier + content: + type: string + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + user: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + nullable: true + type: string + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users + without an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's + auto-generated icon + example: "#f44336" + index: + type: number + tags: + type: array + items: + $ref: ../../components/schemas/TagObject.yaml#/TagObject + isOwner: + type: boolean + ignored: + type: boolean + unread: + type: boolean + bookmark: + nullable: true + unreplied: + type: boolean + icons: + type: array + items: {} + index: + type: number + thumb: + type: string + isQuestion: + nullable: true + type: number + isSolved: + type: number + tag: + type: string + title: + type: string + showSelect: + type: boolean + showTopicTools: + type: boolean + allCategoriesUrl: + type: string + selectedCategory: + type: object + properties: + icon: + type: string + name: + type: string + bgColor: + type: string + nullable: true + selectedCids: + type: array + items: + type: number + rssFeedUrl: + type: string + feeds:disableRSS: + type: boolean + required: + - topics + - tag + - title + - categories + - $ref: ../../components/schemas/Pagination.yaml#/Pagination + - $ref: ../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/top.yaml b/public/openapi/read/top.yaml index e9b552f..fadd801 100644 --- a/public/openapi/read/top.yaml +++ b/public/openapi/read/top.yaml @@ -1,122 +1,122 @@ -get: - tags: - - topics - summary: Get top topics - description: Returns a list of topics sorted by most upvotes. - responses: - "200": - description: An array of topic objects sorted by most upvotes. - content: - application/json: - schema: - allOf: - - type: object - properties: - nextStart: - type: number - topicCount: - type: number - topics: - type: array - items: - $ref: ../components/schemas/TopicObject.yaml#/TopicObject - tids: - type: array - items: - type: number - canPost: - type: boolean - showSelect: - type: boolean - showTopicTools: - type: boolean - allCategoriesUrl: - type: string - selectedCategory: - type: object - properties: - cid: - type: number - description: A category identifier - name: - type: string - level: - type: string - icon: - type: string - parentCid: - type: number - description: The category identifier for the category that is the immediate - ancestor of the current category - color: - type: string - bgColor: - type: string - selected: - type: boolean - nullable: true - selectedCids: - type: array - items: - type: number - feeds:disableRSS: - type: number - rssFeedUrl: - type: string - title: - type: string - filters: - type: array - items: - type: object - properties: - name: - type: string - url: - type: string - selected: - type: boolean - filter: - type: string - icon: - type: string - selectedFilter: - type: object - properties: - name: - type: string - url: - type: string - selected: - type: boolean - filter: - type: string - icon: - type: string - terms: - type: array - items: - type: object - properties: - name: - type: string - url: - type: string - selected: - type: boolean - term: - type: string - selectedTerm: - type: object - properties: - name: - type: string - url: - type: string - selected: - type: boolean - term: - type: string - - $ref: ../components/schemas/Pagination.yaml#/Pagination - - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - topics + summary: Get top topics + description: Returns a list of topics sorted by most upvotes. + responses: + "200": + description: An array of topic objects sorted by most upvotes. + content: + application/json: + schema: + allOf: + - type: object + properties: + nextStart: + type: number + topicCount: + type: number + topics: + type: array + items: + $ref: ../components/schemas/TopicObject.yaml#/TopicObject + tids: + type: array + items: + type: number + canPost: + type: boolean + showSelect: + type: boolean + showTopicTools: + type: boolean + allCategoriesUrl: + type: string + selectedCategory: + type: object + properties: + cid: + type: number + description: A category identifier + name: + type: string + level: + type: string + icon: + type: string + parentCid: + type: number + description: The category identifier for the category that is the immediate + ancestor of the current category + color: + type: string + bgColor: + type: string + selected: + type: boolean + nullable: true + selectedCids: + type: array + items: + type: number + feeds:disableRSS: + type: number + rssFeedUrl: + type: string + title: + type: string + filters: + type: array + items: + type: object + properties: + name: + type: string + url: + type: string + selected: + type: boolean + filter: + type: string + icon: + type: string + selectedFilter: + type: object + properties: + name: + type: string + url: + type: string + selected: + type: boolean + filter: + type: string + icon: + type: string + terms: + type: array + items: + type: object + properties: + name: + type: string + url: + type: string + selected: + type: boolean + term: + type: string + selectedTerm: + type: object + properties: + name: + type: string + url: + type: string + selected: + type: boolean + term: + type: string + - $ref: ../components/schemas/Pagination.yaml#/Pagination + - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/topic/pagination/topic_id.yaml b/public/openapi/read/topic/pagination/topic_id.yaml index 4d91144..1926ddc 100644 --- a/public/openapi/read/topic/pagination/topic_id.yaml +++ b/public/openapi/read/topic/pagination/topic_id.yaml @@ -1,19 +1,19 @@ -get: - tags: - - topics - summary: Get topic pagination data - description: This route retrieves pagination data for a given topic. It is used mainly client-side, as it return data necessary to update a pagination block client-side. - parameters: - - name: topic_id - in: path - required: true - schema: - type: string - example: 1 - responses: - "200": - description: "" - content: - application/json: - schema: +get: + tags: + - topics + summary: Get topic pagination data + description: This route retrieves pagination data for a given topic. It is used mainly client-side, as it return data necessary to update a pagination block client-side. + parameters: + - name: topic_id + in: path + required: true + schema: + type: string + example: 1 + responses: + "200": + description: "" + content: + application/json: + schema: $ref: ../../../components/schemas/Pagination.yaml#/Pagination \ No newline at end of file diff --git a/public/openapi/read/topic/teaser/topic_id.yaml b/public/openapi/read/topic/teaser/topic_id.yaml index 5b0450a..4aab998 100644 --- a/public/openapi/read/topic/teaser/topic_id.yaml +++ b/public/openapi/read/topic/teaser/topic_id.yaml @@ -1,18 +1,18 @@ -get: - tags: - - topics - summary: Get a topic's teaser post - parameters: - - name: topic_id - in: path - required: true - schema: - type: string - example: 1 - responses: - "200": - description: "A JSON object containing the teaser post for a topic" - content: - application/json: - schema: +get: + tags: + - topics + summary: Get a topic's teaser post + parameters: + - name: topic_id + in: path + required: true + schema: + type: string + example: 1 + responses: + "200": + description: "A JSON object containing the teaser post for a topic" + content: + application/json: + schema: $ref: ../../../components/schemas/PostsObject.yaml#/PostsObject \ No newline at end of file diff --git a/public/openapi/read/topic/thumb/upload.yaml b/public/openapi/read/topic/thumb/upload.yaml index 74b0966..029a3f6 100644 --- a/public/openapi/read/topic/thumb/upload.yaml +++ b/public/openapi/read/topic/thumb/upload.yaml @@ -1,35 +1,35 @@ -post: - tags: - - topics - summary: Upload topic thumb - requestBody: - required: true - content: - multipart/form-data: - schema: - type: object - properties: - files: - type: array - items: - type: string - format: binary - required: - - files - responses: - "200": - description: "Image uploaded" - content: - application/json: - schema: - type: object - properties: - name: - type: string - description: The filename - url: - type: string - description: URL of the uploaded image for use client-side - path: - type: string +post: + tags: + - topics + summary: Upload topic thumb + requestBody: + required: true + content: + multipart/form-data: + schema: + type: object + properties: + files: + type: array + items: + type: string + format: binary + required: + - files + responses: + "200": + description: "Image uploaded" + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: The filename + url: + type: string + description: URL of the uploaded image for use client-side + path: + type: string description: Path to the file in the local file system \ No newline at end of file diff --git a/public/openapi/read/topic/topic_id.yaml b/public/openapi/read/topic/topic_id.yaml index 4b89014..907d92f 100644 --- a/public/openapi/read/topic/topic_id.yaml +++ b/public/openapi/read/topic/topic_id.yaml @@ -1,392 +1,392 @@ -get: - tags: - - topics - summary: Get topic data - parameters: - - name: topic_id - in: path - required: true - schema: - type: string - example: 1 - - name: slug - description: This parameter is not required. If omitted, the request will be automatically redirected with the proper topic slug. - in: path - required: true - schema: - type: string - example: test-topic - - name: post_index - description: This parameter is not required. If omitted, the request will presume that you want the first post. The API response is largely unaffected by this parameter, it is used client-side (to send the user to the requested post), and changes the meta/link tags in the server-side generated HTML. - in: path - required: true - schema: - type: string - example: 1 - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../components/schemas/TopicObject.yaml#/TopicObjectSlim - - type: object - properties: - title: - type: string - slug: - type: string - teaserPid: - type: number - nullable: true - titleRaw: - type: string - tags: - type: array - items: - $ref: ../../components/schemas/TagObject.yaml#/TagObject - posts: - type: array - items: - type: object - properties: - pid: - type: number - uid: - type: number - description: A user identifier - tid: - type: number - description: A topic identifier - content: - type: string - timestamp: - type: number - votes: - type: number - deleted: - type: number - upvotes: - type: number - downvotes: - type: number - bookmarks: - type: number - deleterUid: - type: number - edited: - type: number - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - editedISO: - type: string - index: - type: number - user: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - reputation: - type: number - postcount: - type: number - topiccount: - type: number - picture: - type: string - nullable: true - signature: - type: string - banned: - type: number - banned:expire: - type: number - status: - type: string - lastonline: - type: number - groupTitle: - nullable: true - type: string - groupTitleArray: - type: array - items: - type: string - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without - an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's auto-generated - icon - example: "#f44336" - lastonlineISO: - type: string - banned_until: - type: number - banned_until_readable: - type: string - selectedGroups: - type: array - items: - type: object - properties: - name: - type: string - slug: - type: string - labelColor: - type: string - textColor: - type: string - icon: - type: string - userTitle: - type: string - custom_profile_info: - type: array - items: - type: object - properties: - content: - type: string - description: HTML that is injected into `topic.tpl` of themes that support custom profile info - editor: - nullable: true - bookmarked: - type: boolean - upvoted: - type: boolean - downvoted: - type: boolean - replies: - type: object - properties: - hasMore: - type: boolean - users: - type: array - items: - type: object - properties: - username: - type: string - description: A friendly name for a given user account - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - type: string - uid: - type: number - description: A user identifier - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without - an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's auto-generated - icon - example: "#f44336" - administrator: - type: boolean - text: - type: string - count: - type: number - selfPost: - type: boolean - topicOwnerPost: - type: boolean - display_edit_tools: - type: boolean - display_delete_tools: - type: boolean - display_moderator_tools: - type: boolean - display_move_tools: - type: boolean - display_post_menu: - type: boolean - flagId: - type: number - description: The flag identifier, if this particular post has been flagged before - events: - type: array - items: - type: object - properties: - type: - type: string - id: - type: number - timestamp: - type: number - timestampISO: - type: string - category: - $ref: ../../components/schemas/CategoryObject.yaml#/CategoryObject - tagWhitelist: - type: array - items: - type: string - minTags: - type: number - maxTags: - type: number - thread_tools: - type: array - items: - type: object - properties: - class: - type: string - title: - type: string - icon: - type: string - isFollowing: - type: boolean - isNotFollowing: - type: boolean - isIgnoring: - type: boolean - bookmark: - nullable: true - postSharing: - type: array - items: - type: object - properties: - id: - type: string - name: - type: string - class: - type: string - activated: - type: boolean - deleter: - nullable: true - merger: - nullable: true - related: - type: array - items: - $ref: ../../components/schemas/TopicObject.yaml#/TopicObject - unreplied: - type: boolean - icons: - type: array - items: - type: string - description: HTML that is rendered by the theme - privileges: - type: object - properties: - topics:reply: - type: boolean - topics:read: - type: boolean - topics:tag: - type: boolean - topics:delete: - type: boolean - posts:edit: - type: boolean - posts:history: - type: boolean - posts:delete: - type: boolean - posts:view_deleted: - type: boolean - read: - type: boolean - purge: - type: boolean - view_thread_tools: - type: boolean - editable: - type: boolean - deletable: - type: boolean - view_deleted: - type: boolean - view_scheduled: - type: boolean - isAdminOrMod: - type: boolean - disabled: - type: number - tid: - type: string - uid: - type: number - description: A user identifier - topicStaleDays: - type: number - reputation:disabled: - type: number - downvote:disabled: - type: number - feeds:disableRSS: - type: number - bookmarkThreshold: - type: number - necroThreshold: - type: number - postEditDuration: - type: number - postDeleteDuration: - type: number - scrollToMyPost: - type: boolean - updateUrlWithPostIndex: - type: boolean - allowMultipleBadges: - type: boolean - privateUploads: - type: boolean - rssFeedUrl: - type: string - postIndex: - type: number - loggedInUser: - $ref: ../../components/schemas/UserObject.yaml#/UserObject - - type: object - description: Optional properties that may or may not be present (except for `tid`, which is always present, and is only here as a hack to pass validation) - properties: - tid: - type: number - description: A topic identifier - thumb: - type: string - description: An uploaded topic thumbnail - required: - - tid - - $ref: ../../components/schemas/Pagination.yaml#/Pagination - - $ref: ../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - topics + summary: Get topic data + parameters: + - name: topic_id + in: path + required: true + schema: + type: string + example: 1 + - name: slug + description: This parameter is not required. If omitted, the request will be automatically redirected with the proper topic slug. + in: path + required: true + schema: + type: string + example: test-topic + - name: post_index + description: This parameter is not required. If omitted, the request will presume that you want the first post. The API response is largely unaffected by this parameter, it is used client-side (to send the user to the requested post), and changes the meta/link tags in the server-side generated HTML. + in: path + required: true + schema: + type: string + example: 1 + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../components/schemas/TopicObject.yaml#/TopicObjectSlim + - type: object + properties: + title: + type: string + slug: + type: string + teaserPid: + type: number + nullable: true + titleRaw: + type: string + tags: + type: array + items: + $ref: ../../components/schemas/TagObject.yaml#/TagObject + posts: + type: array + items: + type: object + properties: + pid: + type: number + uid: + type: number + description: A user identifier + tid: + type: number + description: A topic identifier + content: + type: string + timestamp: + type: number + votes: + type: number + deleted: + type: number + upvotes: + type: number + downvotes: + type: number + bookmarks: + type: number + deleterUid: + type: number + edited: + type: number + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + editedISO: + type: string + index: + type: number + user: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + reputation: + type: number + postcount: + type: number + topiccount: + type: number + picture: + type: string + nullable: true + signature: + type: string + banned: + type: number + banned:expire: + type: number + status: + type: string + lastonline: + type: number + groupTitle: + nullable: true + type: string + groupTitleArray: + type: array + items: + type: string + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without + an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's auto-generated + icon + example: "#f44336" + lastonlineISO: + type: string + banned_until: + type: number + banned_until_readable: + type: string + selectedGroups: + type: array + items: + type: object + properties: + name: + type: string + slug: + type: string + labelColor: + type: string + textColor: + type: string + icon: + type: string + userTitle: + type: string + custom_profile_info: + type: array + items: + type: object + properties: + content: + type: string + description: HTML that is injected into `topic.tpl` of themes that support custom profile info + editor: + nullable: true + bookmarked: + type: boolean + upvoted: + type: boolean + downvoted: + type: boolean + replies: + type: object + properties: + hasMore: + type: boolean + users: + type: array + items: + type: object + properties: + username: + type: string + description: A friendly name for a given user account + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + type: string + uid: + type: number + description: A user identifier + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without + an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's auto-generated + icon + example: "#f44336" + administrator: + type: boolean + text: + type: string + count: + type: number + selfPost: + type: boolean + topicOwnerPost: + type: boolean + display_edit_tools: + type: boolean + display_delete_tools: + type: boolean + display_moderator_tools: + type: boolean + display_move_tools: + type: boolean + display_post_menu: + type: boolean + flagId: + type: number + description: The flag identifier, if this particular post has been flagged before + events: + type: array + items: + type: object + properties: + type: + type: string + id: + type: number + timestamp: + type: number + timestampISO: + type: string + category: + $ref: ../../components/schemas/CategoryObject.yaml#/CategoryObject + tagWhitelist: + type: array + items: + type: string + minTags: + type: number + maxTags: + type: number + thread_tools: + type: array + items: + type: object + properties: + class: + type: string + title: + type: string + icon: + type: string + isFollowing: + type: boolean + isNotFollowing: + type: boolean + isIgnoring: + type: boolean + bookmark: + nullable: true + postSharing: + type: array + items: + type: object + properties: + id: + type: string + name: + type: string + class: + type: string + activated: + type: boolean + deleter: + nullable: true + merger: + nullable: true + related: + type: array + items: + $ref: ../../components/schemas/TopicObject.yaml#/TopicObject + unreplied: + type: boolean + icons: + type: array + items: + type: string + description: HTML that is rendered by the theme + privileges: + type: object + properties: + topics:reply: + type: boolean + topics:read: + type: boolean + topics:tag: + type: boolean + topics:delete: + type: boolean + posts:edit: + type: boolean + posts:history: + type: boolean + posts:delete: + type: boolean + posts:view_deleted: + type: boolean + read: + type: boolean + purge: + type: boolean + view_thread_tools: + type: boolean + editable: + type: boolean + deletable: + type: boolean + view_deleted: + type: boolean + view_scheduled: + type: boolean + isAdminOrMod: + type: boolean + disabled: + type: number + tid: + type: string + uid: + type: number + description: A user identifier + topicStaleDays: + type: number + reputation:disabled: + type: number + downvote:disabled: + type: number + feeds:disableRSS: + type: number + bookmarkThreshold: + type: number + necroThreshold: + type: number + postEditDuration: + type: number + postDeleteDuration: + type: number + scrollToMyPost: + type: boolean + updateUrlWithPostIndex: + type: boolean + allowMultipleBadges: + type: boolean + privateUploads: + type: boolean + rssFeedUrl: + type: string + postIndex: + type: number + loggedInUser: + $ref: ../../components/schemas/UserObject.yaml#/UserObject + - type: object + description: Optional properties that may or may not be present (except for `tid`, which is always present, and is only here as a hack to pass validation) + properties: + tid: + type: number + description: A topic identifier + thumb: + type: string + description: An uploaded topic thumbnail + required: + - tid + - $ref: ../../components/schemas/Pagination.yaml#/Pagination + - $ref: ../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/tos.yaml b/public/openapi/read/tos.yaml index 1c66f4b..9234737 100644 --- a/public/openapi/read/tos.yaml +++ b/public/openapi/read/tos.yaml @@ -1,18 +1,18 @@ -get: - tags: - - authentication - summary: Get forum terms of service - description: This route allows you to view the forum terms of service. - responses: - "200": - description: Terms of service retrieved. - content: - application/json: - schema: - allOf: - - type: object - properties: - termsOfUse: - type: string - description: Full text of the configured terms of service/terms of use. +get: + tags: + - authentication + summary: Get forum terms of service + description: This route allows you to view the forum terms of service. + responses: + "200": + description: Terms of service retrieved. + content: + application/json: + schema: + allOf: + - type: object + properties: + termsOfUse: + type: string + description: Full text of the configured terms of service/terms of use. - $ref: ../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/uid/uid.yaml b/public/openapi/read/uid/uid.yaml index dccb23e..52dc22a 100644 --- a/public/openapi/read/uid/uid.yaml +++ b/public/openapi/read/uid/uid.yaml @@ -1,19 +1,19 @@ -get: - tags: - - shorthand - summary: Access a user's profile pages - description: >- - This particular shorthand is useful if you are looking to redirect to a user's profile (or other associated pages), but do not know or want to retrieve their userslug, - which is part of the canonical url. - - For example, to go to `uid` 15's list of topics made, you can navigate to `/api/uid/15/topics`, which will send you to the appropriate canonical URL for that user's topics. - parameters: - - name: uid* - in: path - required: true - schema: - type: string - example: 1 - responses: - "200": +get: + tags: + - shorthand + summary: Access a user's profile pages + description: >- + This particular shorthand is useful if you are looking to redirect to a user's profile (or other associated pages), but do not know or want to retrieve their userslug, + which is part of the canonical url. + + For example, to go to `uid` 15's list of topics made, you can navigate to `/api/uid/15/topics`, which will send you to the appropriate canonical URL for that user's topics. + parameters: + - name: uid* + in: path + required: true + schema: + type: string + example: 1 + responses: + "200": description: "Canonical URL of user profile page" \ No newline at end of file diff --git a/public/openapi/read/unread.yaml b/public/openapi/read/unread.yaml index 4d6ad5d..2051cee 100644 --- a/public/openapi/read/unread.yaml +++ b/public/openapi/read/unread.yaml @@ -1,243 +1,243 @@ -get: - tags: - - topics - summary: Get unread topics - description: Returns a list of the current user's unread topics, sorted by the - last post's timestamp. - responses: - "200": - description: An array of unread topic objects sorted by the last post's timestamp. - content: - application/json: - schema: - allOf: - - type: object - properties: - showSelect: - type: boolean - showTopicTools: - type: boolean - nextStart: - type: number - topics: - type: array - items: - allOf: - - $ref: ../components/schemas/TopicObject.yaml#/TopicObjectSlim - - type: object - properties: - title: - type: string - slug: - type: string - teaserPid: - type: number - nullable: true - titleRaw: - type: string - category: - type: object - properties: - cid: - type: number - description: A category identifier - name: - type: string - slug: - type: string - icon: - type: string - backgroundImage: - nullable: true - imageClass: - nullable: true - type: string - bgColor: - type: string - color: - type: string - disabled: - type: number - user: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - fullname: - type: string - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - reputation: - type: number - postcount: - type: number - picture: - nullable: true - type: string - signature: - nullable: true - type: string - banned: - type: number - status: - type: string - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without - an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's auto-generated - icon - example: "#f44336" - banned_until_readable: - type: string - required: - - uid - - username - - userslug - - reputation - - postcount - - picture - - signature - - banned - - status - - icon:text - - icon:bgColor - - banned_until_readable - teaser: - type: object - nullable: true - properties: - pid: - type: number - uid: - type: number - description: A user identifier - timestamp: - type: number - tid: - type: number - description: A topic identifier - content: - type: string - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - user: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - nullable: true - type: string - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users - without an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's - auto-generated icon - example: "#f44336" - index: - type: number - tags: - type: array - items: - $ref: ../components/schemas/TagObject.yaml#/TagObject - isOwner: - type: boolean - ignored: - type: boolean - unread: - type: boolean - bookmark: - nullable: true - unreplied: - type: boolean - icons: - type: array - items: - type: string - index: - type: number - topicCount: - type: number - title: - type: string - pageCount: - type: number - allCategoriesUrl: - type: string - selectedCategory: - type: object - properties: - icon: - type: string - name: - type: string - bgColor: - type: string - nullable: true - selectCategoryLabel: - type: string - selectedCids: - type: array - items: - type: number - filters: - type: array - items: - type: object - properties: - name: - type: string - url: - type: string - selected: - type: boolean - filter: - type: string - icon: - type: string - selectedFilter: - type: object - properties: - name: - type: string - url: - type: string - selected: - type: boolean - filter: - type: string - icon: - type: string - - $ref: ../components/schemas/Pagination.yaml#/Pagination - - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - topics + summary: Get unread topics + description: Returns a list of the current user's unread topics, sorted by the + last post's timestamp. + responses: + "200": + description: An array of unread topic objects sorted by the last post's timestamp. + content: + application/json: + schema: + allOf: + - type: object + properties: + showSelect: + type: boolean + showTopicTools: + type: boolean + nextStart: + type: number + topics: + type: array + items: + allOf: + - $ref: ../components/schemas/TopicObject.yaml#/TopicObjectSlim + - type: object + properties: + title: + type: string + slug: + type: string + teaserPid: + type: number + nullable: true + titleRaw: + type: string + category: + type: object + properties: + cid: + type: number + description: A category identifier + name: + type: string + slug: + type: string + icon: + type: string + backgroundImage: + nullable: true + imageClass: + nullable: true + type: string + bgColor: + type: string + color: + type: string + disabled: + type: number + user: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + fullname: + type: string + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + reputation: + type: number + postcount: + type: number + picture: + nullable: true + type: string + signature: + nullable: true + type: string + banned: + type: number + status: + type: string + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without + an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's auto-generated + icon + example: "#f44336" + banned_until_readable: + type: string + required: + - uid + - username + - userslug + - reputation + - postcount + - picture + - signature + - banned + - status + - icon:text + - icon:bgColor + - banned_until_readable + teaser: + type: object + nullable: true + properties: + pid: + type: number + uid: + type: number + description: A user identifier + timestamp: + type: number + tid: + type: number + description: A topic identifier + content: + type: string + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + user: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + nullable: true + type: string + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users + without an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's + auto-generated icon + example: "#f44336" + index: + type: number + tags: + type: array + items: + $ref: ../components/schemas/TagObject.yaml#/TagObject + isOwner: + type: boolean + ignored: + type: boolean + unread: + type: boolean + bookmark: + nullable: true + unreplied: + type: boolean + icons: + type: array + items: + type: string + index: + type: number + topicCount: + type: number + title: + type: string + pageCount: + type: number + allCategoriesUrl: + type: string + selectedCategory: + type: object + properties: + icon: + type: string + name: + type: string + bgColor: + type: string + nullable: true + selectCategoryLabel: + type: string + selectedCids: + type: array + items: + type: number + filters: + type: array + items: + type: object + properties: + name: + type: string + url: + type: string + selected: + type: boolean + filter: + type: string + icon: + type: string + selectedFilter: + type: object + properties: + name: + type: string + url: + type: string + selected: + type: boolean + filter: + type: string + icon: + type: string + - $ref: ../components/schemas/Pagination.yaml#/Pagination + - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/unread/total.yaml b/public/openapi/read/unread/total.yaml index 60a5a18..38af6ff 100644 --- a/public/openapi/read/unread/total.yaml +++ b/public/openapi/read/unread/total.yaml @@ -1,11 +1,11 @@ -get: - tags: - - topics - summary: Get number of unread topics - responses: - "200": - description: "Success" - content: - text/plain: - schema: +get: + tags: + - topics + summary: Get number of unread topics + responses: + "200": + description: "Success" + content: + text/plain: + schema: type: number \ No newline at end of file diff --git a/public/openapi/read/user/email/email.yaml b/public/openapi/read/user/email/email.yaml index 131a37f..c44616b 100644 --- a/public/openapi/read/user/email/email.yaml +++ b/public/openapi/read/user/email/email.yaml @@ -1,21 +1,21 @@ -get: - tags: - - users - summary: Get user by email - description: | - This route retrieves a user's public profile data. If the calling user is the same as the profile, then it will also return data the user elected to hide (e.g. email/fullname). - Additionally, this route will only return data if the calling user is an admin or global moderator, or if the end user has elected to make their email public. Otherwise, it will simply return a `404 Not Found`. - parameters: - - name: email - in: path - required: true - schema: - type: string - example: 'test@example.org' - responses: - "200": - description: "" - content: - application/json: - schema: +get: + tags: + - users + summary: Get user by email + description: | + This route retrieves a user's public profile data. If the calling user is the same as the profile, then it will also return data the user elected to hide (e.g. email/fullname). + Additionally, this route will only return data if the calling user is an admin or global moderator, or if the end user has elected to make their email public. Otherwise, it will simply return a `404 Not Found`. + parameters: + - name: email + in: path + required: true + schema: + type: string + example: 'test@example.org' + responses: + "200": + description: "" + content: + application/json: + schema: $ref: ../../../components/schemas/UserObject.yaml#/UserObject \ No newline at end of file diff --git a/public/openapi/read/user/uid/uid.yaml b/public/openapi/read/user/uid/uid.yaml index c17bb99..80e44f8 100644 --- a/public/openapi/read/user/uid/uid.yaml +++ b/public/openapi/read/user/uid/uid.yaml @@ -1,19 +1,19 @@ -get: - tags: - - users - summary: Get user by uid - description: This route retrieves a user's public profile data. If the calling user is the same as the profile, then it will also return data the user elected to hide (e.g. email/fullname) - parameters: - - name: uid - in: path - required: true - schema: - type: string - example: 1 - responses: - "200": - description: "" - content: - application/json: - schema: +get: + tags: + - users + summary: Get user by uid + description: This route retrieves a user's public profile data. If the calling user is the same as the profile, then it will also return data the user elected to hide (e.g. email/fullname) + parameters: + - name: uid + in: path + required: true + schema: + type: string + example: 1 + responses: + "200": + description: "" + content: + application/json: + schema: $ref: ../../../components/schemas/UserObject.yaml#/UserObject \ No newline at end of file diff --git a/public/openapi/read/user/uid/userslug/export/type.yaml b/public/openapi/read/user/uid/userslug/export/type.yaml index e0ea7d9..30efdf1 100644 --- a/public/openapi/read/user/uid/userslug/export/type.yaml +++ b/public/openapi/read/user/uid/userslug/export/type.yaml @@ -1,19 +1,19 @@ -get: - tags: - - deprecated - summary: Export a user's posts/profile/uploads (.csv) - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "302": - description: A redirect to the new URL format (without the `/uid` prefix) - headers: - Location: - schema: - type: string +get: + tags: + - deprecated + summary: Export a user's posts/profile/uploads (.csv) + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "302": + description: A redirect to the new URL format (without the `/uid` prefix) + headers: + Location: + schema: + type: string example: /api/user/admin/export/posts \ No newline at end of file diff --git a/public/openapi/read/user/username/username.yaml b/public/openapi/read/user/username/username.yaml index 7ef85ee..f3dcc52 100644 --- a/public/openapi/read/user/username/username.yaml +++ b/public/openapi/read/user/username/username.yaml @@ -1,19 +1,19 @@ -get: - tags: - - users - summary: Get user by username - description: This route retrieves a user's public profile data. If the calling user is the same as the profile, then it will also return data the user elected to hide (e.g. email/fullname) - parameters: - - name: username - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "" - content: - application/json: - schema: +get: + tags: + - users + summary: Get user by username + description: This route retrieves a user's public profile data. If the calling user is the same as the profile, then it will also return data the user elected to hide (e.g. email/fullname) + parameters: + - name: username + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "" + content: + application/json: + schema: $ref: ../../../components/schemas/UserObject.yaml#/UserObject \ No newline at end of file diff --git a/public/openapi/read/user/userslug.yaml b/public/openapi/read/user/userslug.yaml index 4858383..98b5fc3 100644 --- a/public/openapi/read/user/userslug.yaml +++ b/public/openapi/read/user/userslug.yaml @@ -1,86 +1,86 @@ -get: - tags: - - users - summary: Get user profile - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../components/schemas/UserObject.yaml#/UserObjectFull - - type: object - properties: - posts: - $ref: ../../components/schemas/PostsObject.yaml#/PostsObject - latestPosts: - $ref: ../../components/schemas/PostsObject.yaml#/PostsObject - bestPosts: - $ref: ../../components/schemas/PostsObject.yaml#/PostsObject - hasPrivateChat: - type: number - title: - type: string - allowCoverPicture: - type: boolean - selectedGroup: - type: array - items: - type: object - properties: - name: - type: string - slug: - type: string - createtime: - type: number - userTitle: - type: string - description: - type: string - memberCount: - type: number - deleted: - type: string - hidden: - type: number - system: - type: number - private: - type: number - ownerUid: - type: number - icon: - type: string - labelColor: - type: string - cover:url: - type: string - cover:position: - type: string - userTitleEnabled: - type: number - disableJoinRequests: - type: number - disableLeave: - type: number - nameEncoded: - type: string - displayName: - type: string - textColor: - type: string - createtimeISO: - type: string - cover:thumb:url: - type: string - - $ref: ../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - users + summary: Get user profile + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../components/schemas/UserObject.yaml#/UserObjectFull + - type: object + properties: + posts: + $ref: ../../components/schemas/PostsObject.yaml#/PostsObject + latestPosts: + $ref: ../../components/schemas/PostsObject.yaml#/PostsObject + bestPosts: + $ref: ../../components/schemas/PostsObject.yaml#/PostsObject + hasPrivateChat: + type: number + title: + type: string + allowCoverPicture: + type: boolean + selectedGroup: + type: array + items: + type: object + properties: + name: + type: string + slug: + type: string + createtime: + type: number + userTitle: + type: string + description: + type: string + memberCount: + type: number + deleted: + type: string + hidden: + type: number + system: + type: number + private: + type: number + ownerUid: + type: number + icon: + type: string + labelColor: + type: string + cover:url: + type: string + cover:position: + type: string + userTitleEnabled: + type: number + disableJoinRequests: + type: number + disableLeave: + type: number + nameEncoded: + type: string + displayName: + type: string + textColor: + type: string + createtimeISO: + type: string + cover:thumb:url: + type: string + - $ref: ../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/user/userslug/best.yaml b/public/openapi/read/user/userslug/best.yaml index 657e54f..f48f6d0 100644 --- a/public/openapi/read/user/userslug/best.yaml +++ b/public/openapi/read/user/userslug/best.yaml @@ -1,45 +1,45 @@ -get: - tags: - - users - summary: Get a user's best performing posts - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull - - type: object - properties: - posts: - $ref: ../../../components/schemas/PostsObject.yaml#/PostsObject - nextStart: - type: number - noItemsFoundKey: - type: string - title: - type: string - showSort: - type: boolean - sortOptions: - type: array - items: - type: object - properties: - url: - type: string - name: - type: string - selected: - type: boolean - - $ref: ../../../components/schemas/Pagination.yaml#/Pagination - - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - users + summary: Get a user's best performing posts + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull + - type: object + properties: + posts: + $ref: ../../../components/schemas/PostsObject.yaml#/PostsObject + nextStart: + type: number + noItemsFoundKey: + type: string + title: + type: string + showSort: + type: boolean + sortOptions: + type: array + items: + type: object + properties: + url: + type: string + name: + type: string + selected: + type: boolean + - $ref: ../../../components/schemas/Pagination.yaml#/Pagination + - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/user/userslug/blocks.yaml b/public/openapi/read/user/userslug/blocks.yaml index d8147d9..097b02d 100644 --- a/public/openapi/read/user/userslug/blocks.yaml +++ b/public/openapi/read/user/userslug/blocks.yaml @@ -1,30 +1,30 @@ -get: - tags: - - users - summary: Get user's blocks - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull - - type: object - properties: - users: - type: array - items: - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectSlim - title: - type: string - - $ref: ../../../components/schemas/Pagination.yaml#/Pagination - - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - users + summary: Get user's blocks + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull + - type: object + properties: + users: + type: array + items: + $ref: ../../../components/schemas/UserObject.yaml#/UserObjectSlim + title: + type: string + - $ref: ../../../components/schemas/Pagination.yaml#/Pagination + - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/user/userslug/bookmarks.yaml b/public/openapi/read/user/userslug/bookmarks.yaml index b820b15..ed98fec 100644 --- a/public/openapi/read/user/userslug/bookmarks.yaml +++ b/public/openapi/read/user/userslug/bookmarks.yaml @@ -1,45 +1,45 @@ -get: - tags: - - users - summary: Get user's bookmarks - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull - - type: object - properties: - posts: - $ref: ../../../components/schemas/PostsObject.yaml#/PostsObject - nextStart: - type: number - noItemsFoundKey: - type: string - title: - type: string - showSort: - type: boolean - sortOptions: - type: array - items: - type: object - properties: - url: - type: string - name: - type: string - selected: - type: boolean - - $ref: ../../../components/schemas/Pagination.yaml#/Pagination - - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - users + summary: Get user's bookmarks + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull + - type: object + properties: + posts: + $ref: ../../../components/schemas/PostsObject.yaml#/PostsObject + nextStart: + type: number + noItemsFoundKey: + type: string + title: + type: string + showSort: + type: boolean + sortOptions: + type: array + items: + type: object + properties: + url: + type: string + name: + type: string + selected: + type: boolean + - $ref: ../../../components/schemas/Pagination.yaml#/Pagination + - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/user/userslug/categories.yaml b/public/openapi/read/user/userslug/categories.yaml index 20cc798..bb3496c 100644 --- a/public/openapi/read/user/userslug/categories.yaml +++ b/public/openapi/read/user/userslug/categories.yaml @@ -1,63 +1,63 @@ -get: - tags: - - users - summary: Get user's watched categories - description: This route retrieves the list of categories and their watch states - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull - - type: object - properties: - categories: - type: array - items: - type: object - properties: - cid: - type: number - description: A category identifier - name: - type: string - level: - type: string - icon: - type: string - parentCid: - type: number - description: The category identifier for the category that is the immediate - ancestor of the current category - color: - type: string - bgColor: - type: string - descriptionParsed: - type: string - depth: - type: number - slug: - type: string - isIgnored: - type: boolean - isWatched: - type: boolean - isNotWatched: - type: boolean - imageClass: - type: string - title: - type: string - - $ref: ../../../components/schemas/Pagination.yaml#/Pagination - - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - users + summary: Get user's watched categories + description: This route retrieves the list of categories and their watch states + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull + - type: object + properties: + categories: + type: array + items: + type: object + properties: + cid: + type: number + description: A category identifier + name: + type: string + level: + type: string + icon: + type: string + parentCid: + type: number + description: The category identifier for the category that is the immediate + ancestor of the current category + color: + type: string + bgColor: + type: string + descriptionParsed: + type: string + depth: + type: number + slug: + type: string + isIgnored: + type: boolean + isWatched: + type: boolean + isNotWatched: + type: boolean + imageClass: + type: string + title: + type: string + - $ref: ../../../components/schemas/Pagination.yaml#/Pagination + - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/user/userslug/chats/roomid.yaml b/public/openapi/read/user/userslug/chats/roomid.yaml index 72fc62a..6359c7e 100644 --- a/public/openapi/read/user/userslug/chats/roomid.yaml +++ b/public/openapi/read/user/userslug/chats/roomid.yaml @@ -1,314 +1,314 @@ -get: - tags: - - users - summary: Get chat room - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - - name: roomid - in: path - required: true - schema: - type: string - example: 1 - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - owner: - type: number - roomId: - type: number - roomName: - type: string - messages: - type: array - items: - type: object - properties: - content: - type: string - timestamp: - type: number - fromuid: - type: number - roomId: - type: string - deleted: - type: boolean - system: - type: boolean - edited: - type: number - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - editedISO: - type: string - messageId: - type: number - fromUser: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - type: string - nullable: true - status: - type: string - banned: - type: boolean - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without - an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's auto-generated - icon - example: "#f44336" - banned_until_readable: - type: string - deleted: - type: boolean - self: - type: number - newSet: - type: boolean - index: - type: number - cleanedContent: - type: string - isOwner: - type: boolean - isOwner: - type: boolean - users: - type: array - items: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - picture: - type: string - nullable: true - status: - type: string - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without an - avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with `icon:text` - for the user's auto-generated icon - example: "#f44336" - isOwner: - type: boolean - canReply: - type: boolean - groupChat: - type: boolean - usernames: - type: string - maximumUsersInChatRoom: - type: number - maximumChatMessageLength: - type: number - showUserInput: - type: boolean - isAdminOrGlobalMod: - type: boolean - rooms: - type: array - items: - type: object - properties: - owner: - oneOf: - - type: number - - type: string - roomId: - type: number - roomName: - type: string - users: - type: array - items: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - nullable: true - type: string - status: - type: string - lastonline: - type: number - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without - an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's auto-generated - icon - example: "#f44336" - lastonlineISO: - type: string - groupChat: - type: boolean - unread: - type: boolean - teaser: - type: object - properties: - fromuid: - type: number - content: - type: string - timestamp: - type: number - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - user: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - nullable: true - type: string - status: - type: string - lastonline: - type: number - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users - without an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's - auto-generated icon - example: "#f44336" - lastonlineISO: - type: string - nullable: true - lastUser: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - nullable: true - type: string - status: - type: string - lastonline: - type: number - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without - an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's auto-generated - icon - example: "#f44336" - lastonlineISO: - type: string - usernames: - type: string - nextStart: - type: number - title: - type: string - uid: - type: number - description: A user identifier - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - canViewInfo: - type: boolean +get: + tags: + - users + summary: Get chat room + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + - name: roomid + in: path + required: true + schema: + type: string + example: 1 + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + owner: + type: number + roomId: + type: number + roomName: + type: string + messages: + type: array + items: + type: object + properties: + content: + type: string + timestamp: + type: number + fromuid: + type: number + roomId: + type: string + deleted: + type: boolean + system: + type: boolean + edited: + type: number + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + editedISO: + type: string + messageId: + type: number + fromUser: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + type: string + nullable: true + status: + type: string + banned: + type: boolean + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without + an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's auto-generated + icon + example: "#f44336" + banned_until_readable: + type: string + deleted: + type: boolean + self: + type: number + newSet: + type: boolean + index: + type: number + cleanedContent: + type: string + isOwner: + type: boolean + isOwner: + type: boolean + users: + type: array + items: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + picture: + type: string + nullable: true + status: + type: string + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without an + avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with `icon:text` + for the user's auto-generated icon + example: "#f44336" + isOwner: + type: boolean + canReply: + type: boolean + groupChat: + type: boolean + usernames: + type: string + maximumUsersInChatRoom: + type: number + maximumChatMessageLength: + type: number + showUserInput: + type: boolean + isAdminOrGlobalMod: + type: boolean + rooms: + type: array + items: + type: object + properties: + owner: + oneOf: + - type: number + - type: string + roomId: + type: number + roomName: + type: string + users: + type: array + items: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + nullable: true + type: string + status: + type: string + lastonline: + type: number + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without + an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's auto-generated + icon + example: "#f44336" + lastonlineISO: + type: string + groupChat: + type: boolean + unread: + type: boolean + teaser: + type: object + properties: + fromuid: + type: number + content: + type: string + timestamp: + type: number + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + user: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + nullable: true + type: string + status: + type: string + lastonline: + type: number + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users + without an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's + auto-generated icon + example: "#f44336" + lastonlineISO: + type: string + nullable: true + lastUser: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + nullable: true + type: string + status: + type: string + lastonline: + type: number + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without + an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's auto-generated + icon + example: "#f44336" + lastonlineISO: + type: string + usernames: + type: string + nextStart: + type: number + title: + type: string + uid: + type: number + description: A user identifier + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + canViewInfo: + type: boolean - $ref: ../../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/user/userslug/consent.yaml b/public/openapi/read/user/userslug/consent.yaml index 2f0502a..97a38ae 100644 --- a/public/openapi/read/user/userslug/consent.yaml +++ b/public/openapi/read/user/userslug/consent.yaml @@ -1,34 +1,34 @@ -get: - tags: - - users - summary: Get user's GDPR consent settings - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull - - type: object - properties: - gdpr_consent: - type: boolean - digest: - type: object - properties: - frequency: - type: string - enabled: - type: boolean - title: - type: string - - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - users + summary: Get user's GDPR consent settings + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull + - type: object + properties: + gdpr_consent: + type: boolean + digest: + type: object + properties: + frequency: + type: string + enabled: + type: boolean + title: + type: string + - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/user/userslug/controversial.yaml b/public/openapi/read/user/userslug/controversial.yaml index c5a7fa2..1b03917 100644 --- a/public/openapi/read/user/userslug/controversial.yaml +++ b/public/openapi/read/user/userslug/controversial.yaml @@ -1,45 +1,45 @@ -get: - tags: - - users - summary: Get a user's worse performing posts ("controversial") - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull - - type: object - properties: - posts: - $ref: ../../../components/schemas/PostsObject.yaml#/PostsObject - nextStart: - type: number - noItemsFoundKey: - type: string - title: - type: string - showSort: - type: boolean - sortOptions: - type: array - items: - type: object - properties: - url: - type: string - name: - type: string - selected: - type: boolean - - $ref: ../../../components/schemas/Pagination.yaml#/Pagination - - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - users + summary: Get a user's worse performing posts ("controversial") + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull + - type: object + properties: + posts: + $ref: ../../../components/schemas/PostsObject.yaml#/PostsObject + nextStart: + type: number + noItemsFoundKey: + type: string + title: + type: string + showSort: + type: boolean + sortOptions: + type: array + items: + type: object + properties: + url: + type: string + name: + type: string + selected: + type: boolean + - $ref: ../../../components/schemas/Pagination.yaml#/Pagination + - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/user/userslug/downvoted.yaml b/public/openapi/read/user/userslug/downvoted.yaml index f920269..569c1bb 100644 --- a/public/openapi/read/user/userslug/downvoted.yaml +++ b/public/openapi/read/user/userslug/downvoted.yaml @@ -1,51 +1,51 @@ -get: - tags: - - users - summary: Get user's downvoted posts - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull - - type: object - properties: - posts: - $ref: ../../../components/schemas/PostsObject.yaml#/PostsObject - nextStart: - type: number - noItemsFoundKey: - type: string - description: Translation key for message notifying user that there were no posts found - title: - type: string - showSort: - type: boolean - sortOptions: - type: array - items: - type: object - properties: - url: - type: string - name: - type: string - selected: - type: boolean - required: - - posts - - nextStart - - noItemsFoundKey - - title - - $ref: ../../../components/schemas/Pagination.yaml#/Pagination - - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - users + summary: Get user's downvoted posts + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull + - type: object + properties: + posts: + $ref: ../../../components/schemas/PostsObject.yaml#/PostsObject + nextStart: + type: number + noItemsFoundKey: + type: string + description: Translation key for message notifying user that there were no posts found + title: + type: string + showSort: + type: boolean + sortOptions: + type: array + items: + type: object + properties: + url: + type: string + name: + type: string + selected: + type: boolean + required: + - posts + - nextStart + - noItemsFoundKey + - title + - $ref: ../../../components/schemas/Pagination.yaml#/Pagination + - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/user/userslug/edit.yaml b/public/openapi/read/user/userslug/edit.yaml index 734ea32..a69500d 100644 --- a/public/openapi/read/user/userslug/edit.yaml +++ b/public/openapi/read/user/userslug/edit.yaml @@ -1,66 +1,66 @@ -get: - tags: - - users - summary: Get user profile for editing - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull - - type: object - properties: - maximumSignatureLength: - type: number - maximumAboutMeLength: - type: number - maximumProfileImageSize: - type: number - allowProfilePicture: - type: boolean - allowCoverPicture: - type: boolean - allowProfileImageUploads: - type: number - allowedProfileImageExtensions: - type: string - allowMultipleBadges: - type: boolean - allowAccountDelete: - type: boolean - allowWebsite: - type: boolean - allowAboutMe: - type: boolean - allowSignature: - type: boolean - profileImageDimension: - type: number - defaultAvatar: - type: string - groupSelectSize: - type: number - title: - type: string - editButtons: - type: array - items: - type: object - properties: - link: - type: string - description: A relative path to the page linked to - text: - type: string - description: Button label - - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - users + summary: Get user profile for editing + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull + - type: object + properties: + maximumSignatureLength: + type: number + maximumAboutMeLength: + type: number + maximumProfileImageSize: + type: number + allowProfilePicture: + type: boolean + allowCoverPicture: + type: boolean + allowProfileImageUploads: + type: number + allowedProfileImageExtensions: + type: string + allowMultipleBadges: + type: boolean + allowAccountDelete: + type: boolean + allowWebsite: + type: boolean + allowAboutMe: + type: boolean + allowSignature: + type: boolean + profileImageDimension: + type: number + defaultAvatar: + type: string + groupSelectSize: + type: number + title: + type: string + editButtons: + type: array + items: + type: object + properties: + link: + type: string + description: A relative path to the page linked to + text: + type: string + description: Button label + - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/user/userslug/edit/email.yaml b/public/openapi/read/user/userslug/edit/email.yaml index b8fd327..1d63672 100644 --- a/public/openapi/read/user/userslug/edit/email.yaml +++ b/public/openapi/read/user/userslug/edit/email.yaml @@ -1,27 +1,27 @@ -get: - tags: - - users - summary: Get configs for email editing - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "" - content: - text/plain: - schema: - type: string - description: A relative path to the registration interstitial page so they can add or update an email for their account - example: /register/complete - "302": - description: Redirects the user to a registration interstitial page so they can add or update an email for their account - headers: - Location: - schema: - type: string +get: + tags: + - users + summary: Get configs for email editing + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "" + content: + text/plain: + schema: + type: string + description: A relative path to the registration interstitial page so they can add or update an email for their account + example: /register/complete + "302": + description: Redirects the user to a registration interstitial page so they can add or update an email for their account + headers: + Location: + schema: + type: string example: /register/complete \ No newline at end of file diff --git a/public/openapi/read/user/userslug/edit/password.yaml b/public/openapi/read/user/userslug/edit/password.yaml index 17cf092..04a43bf 100644 --- a/public/openapi/read/user/userslug/edit/password.yaml +++ b/public/openapi/read/user/userslug/edit/password.yaml @@ -1,31 +1,31 @@ -get: - tags: - - users - summary: Get configs for password editing - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../../../components/schemas/UserObject.yaml#/UserObjectFull - - type: object - properties: - hasPassword: - type: boolean - minimumPasswordLength: - type: number - minimumPasswordStrength: - type: number - title: - type: string - - $ref: ../../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - users + summary: Get configs for password editing + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../../../components/schemas/UserObject.yaml#/UserObjectFull + - type: object + properties: + hasPassword: + type: boolean + minimumPasswordLength: + type: number + minimumPasswordStrength: + type: number + title: + type: string + - $ref: ../../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/user/userslug/edit/username.yaml b/public/openapi/read/user/userslug/edit/username.yaml index 1776132..2f384da 100644 --- a/public/openapi/read/user/userslug/edit/username.yaml +++ b/public/openapi/read/user/userslug/edit/username.yaml @@ -1,27 +1,27 @@ -get: - tags: - - users - summary: Get configs for username editing - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../../../components/schemas/UserObject.yaml#/UserObjectFull - - type: object - properties: - hasPassword: - type: boolean - title: - type: string - - $ref: ../../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - users + summary: Get configs for username editing + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../../../components/schemas/UserObject.yaml#/UserObjectFull + - type: object + properties: + hasPassword: + type: boolean + title: + type: string + - $ref: ../../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/user/userslug/export/posts.yaml b/public/openapi/read/user/userslug/export/posts.yaml index 80132ab..62bc1df 100644 --- a/public/openapi/read/user/userslug/export/posts.yaml +++ b/public/openapi/read/user/userslug/export/posts.yaml @@ -1,20 +1,20 @@ -get: - tags: - - users - summary: Export a user's posts (.csv) - description: This route retrieves an existing export of user's posts. To create one go to `/user/{userslug}/consent` - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "A CSV file containing a user's posts" - content: - text/csv: - schema: - type: string +get: + tags: + - users + summary: Export a user's posts (.csv) + description: This route retrieves an existing export of user's posts. To create one go to `/user/{userslug}/consent` + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "A CSV file containing a user's posts" + content: + text/csv: + schema: + type: string format: binary \ No newline at end of file diff --git a/public/openapi/read/user/userslug/export/profile.yaml b/public/openapi/read/user/userslug/export/profile.yaml index da0b6be..6bf855c 100644 --- a/public/openapi/read/user/userslug/export/profile.yaml +++ b/public/openapi/read/user/userslug/export/profile.yaml @@ -1,20 +1,20 @@ -get: - tags: - - users - summary: Export a user's profile data (.json) - description: This route retrieves an existing export of user's profile data. To create one go to `/user/{userslug}/consent` - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "A JSON file containing the user profile" - content: - text/json: - schema: - type: string +get: + tags: + - users + summary: Export a user's profile data (.json) + description: This route retrieves an existing export of user's profile data. To create one go to `/user/{userslug}/consent` + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "A JSON file containing the user profile" + content: + text/json: + schema: + type: string format: binary \ No newline at end of file diff --git a/public/openapi/read/user/userslug/export/uploads.yaml b/public/openapi/read/user/userslug/export/uploads.yaml index cbe7a9a..6415e2f 100644 --- a/public/openapi/read/user/userslug/export/uploads.yaml +++ b/public/openapi/read/user/userslug/export/uploads.yaml @@ -1,20 +1,20 @@ -get: - tags: - - users - summary: Export a user's uploads (.zip) - description: This route retrieves an existing export of user's profile data. To create one go to `/user/{userslug}/consent` - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: Successful export of user uploads - content: - application/zip: - schema: - type: string +get: + tags: + - users + summary: Export a user's uploads (.zip) + description: This route retrieves an existing export of user's profile data. To create one go to `/user/{userslug}/consent` + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: Successful export of user uploads + content: + application/zip: + schema: + type: string format: binary \ No newline at end of file diff --git a/public/openapi/read/user/userslug/followers.yaml b/public/openapi/read/user/userslug/followers.yaml index a4abeaa..353fce6 100644 --- a/public/openapi/read/user/userslug/followers.yaml +++ b/public/openapi/read/user/userslug/followers.yaml @@ -1,91 +1,91 @@ -get: - tags: - - users - summary: Get followers - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - - name: page - in: query - schema: - type: number - example: '' - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull - - type: object - properties: - title: - type: string - users: - type: array - items: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - nullable: true - type: string - status: - type: string - postcount: - type: number - reputation: - type: number - email:confirmed: - type: number - description: Whether the user has confirmed their email address or not - lastonline: - type: number - flags: - nullable: true - banned: - type: number - banned:expire: - type: number - joindate: - type: number - description: A UNIX timestamp representing the moment the user's account was - created - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without an - avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with `icon:text` - for the user's auto-generated icon - example: "#f44336" - joindateISO: - type: string - lastonlineISO: - type: string - banned_until: - type: number - banned_until_readable: - type: string - administrator: - type: boolean - - $ref: ../../../components/schemas/Pagination.yaml#/Pagination - - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - users + summary: Get followers + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + - name: page + in: query + schema: + type: number + example: '' + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull + - type: object + properties: + title: + type: string + users: + type: array + items: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + nullable: true + type: string + status: + type: string + postcount: + type: number + reputation: + type: number + email:confirmed: + type: number + description: Whether the user has confirmed their email address or not + lastonline: + type: number + flags: + nullable: true + banned: + type: number + banned:expire: + type: number + joindate: + type: number + description: A UNIX timestamp representing the moment the user's account was + created + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without an + avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with `icon:text` + for the user's auto-generated icon + example: "#f44336" + joindateISO: + type: string + lastonlineISO: + type: string + banned_until: + type: number + banned_until_readable: + type: string + administrator: + type: boolean + - $ref: ../../../components/schemas/Pagination.yaml#/Pagination + - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/user/userslug/following.yaml b/public/openapi/read/user/userslug/following.yaml index 3329b8a..5aea4fb 100644 --- a/public/openapi/read/user/userslug/following.yaml +++ b/public/openapi/read/user/userslug/following.yaml @@ -1,91 +1,91 @@ -get: - tags: - - users - summary: Get followed users - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - - name: page - in: query - schema: - type: number - example: '' - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull - - type: object - properties: - title: - type: string - users: - type: array - items: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - nullable: true - type: string - status: - type: string - postcount: - type: number - reputation: - type: number - email:confirmed: - type: number - description: Whether the user has confirmed their email address or not - lastonline: - type: number - flags: - nullable: true - banned: - type: number - banned:expire: - type: number - joindate: - type: number - description: A UNIX timestamp representing the moment the user's account was - created - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without an - avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with `icon:text` - for the user's auto-generated icon - example: "#f44336" - joindateISO: - type: string - lastonlineISO: - type: string - banned_until: - type: number - banned_until_readable: - type: string - administrator: - type: boolean - - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - - $ref: ../../../components/schemas/Pagination.yaml#/Pagination +get: + tags: + - users + summary: Get followed users + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + - name: page + in: query + schema: + type: number + example: '' + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull + - type: object + properties: + title: + type: string + users: + type: array + items: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + nullable: true + type: string + status: + type: string + postcount: + type: number + reputation: + type: number + email:confirmed: + type: number + description: Whether the user has confirmed their email address or not + lastonline: + type: number + flags: + nullable: true + banned: + type: number + banned:expire: + type: number + joindate: + type: number + description: A UNIX timestamp representing the moment the user's account was + created + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without an + avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with `icon:text` + for the user's auto-generated icon + example: "#f44336" + joindateISO: + type: string + lastonlineISO: + type: string + banned_until: + type: number + banned_until_readable: + type: string + administrator: + type: boolean + - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs + - $ref: ../../../components/schemas/Pagination.yaml#/Pagination - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/user/userslug/groups.yaml b/public/openapi/read/user/userslug/groups.yaml index ba1cd9d..25006e5 100644 --- a/public/openapi/read/user/userslug/groups.yaml +++ b/public/openapi/read/user/userslug/groups.yaml @@ -1,32 +1,32 @@ -get: - tags: - - users - summary: Get user's groups - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull - - type: object - properties: - title: - type: string - template: - type: object - properties: - name: - type: string - account/groups: - type: boolean - - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - users + summary: Get user's groups + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull + - type: object + properties: + title: + type: string + template: + type: object + properties: + name: + type: string + account/groups: + type: boolean + - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/user/userslug/ignored.yaml b/public/openapi/read/user/userslug/ignored.yaml index 0ab5e8b..220dd6d 100644 --- a/public/openapi/read/user/userslug/ignored.yaml +++ b/public/openapi/read/user/userslug/ignored.yaml @@ -1,47 +1,47 @@ -get: - tags: - - users - summary: Get user's ignored topics - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull - - type: object - properties: - topics: - type: array - items: - $ref: ../../../components/schemas/TopicObject.yaml#/TopicObject - nextStart: - type: number - noItemsFoundKey: - type: string - title: - type: string - showSort: - type: boolean - sortOptions: - type: array - items: - type: object - properties: - url: - type: string - name: - type: string - selected: - type: boolean - - $ref: ../../../components/schemas/Pagination.yaml#/Pagination - - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - users + summary: Get user's ignored topics + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull + - type: object + properties: + topics: + type: array + items: + $ref: ../../../components/schemas/TopicObject.yaml#/TopicObject + nextStart: + type: number + noItemsFoundKey: + type: string + title: + type: string + showSort: + type: boolean + sortOptions: + type: array + items: + type: object + properties: + url: + type: string + name: + type: string + selected: + type: boolean + - $ref: ../../../components/schemas/Pagination.yaml#/Pagination + - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/user/userslug/info.yaml b/public/openapi/read/user/userslug/info.yaml index e56f76e..6c08cc5 100644 --- a/public/openapi/read/user/userslug/info.yaml +++ b/public/openapi/read/user/userslug/info.yaml @@ -1,181 +1,181 @@ -get: - tags: - - users - summary: Get user moderation info - description: Administrators and Global Moderators get access to the `/info` page, which shows some backend data that is useful from a moderation point-of-view (such as IP addresses, recent bans, moderation history, etc). - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull - - type: object - properties: - history: - type: object - properties: - flags: - type: array - items: - type: object - properties: - pid: - type: number - timestamp: - type: number - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - timestampReadable: - type: string - additionalProperties: - description: Contextual data is added to this object (such as topic data, etc.) - bans: - type: array - items: - type: object - properties: - uid: - type: number - timestamp: - type: number - expire: - type: number - fromUid: - type: number - user: - type: object - properties: - username: - type: string - description: A friendly name for a given user account - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - type: string - uid: - type: number - description: A user identifier - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without - an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's auto-generated - icon - example: "#f44336" - until: - type: number - untilReadable: - type: string - timestampReadable: - type: string - timestampISO: - type: string - reason: - type: string - sessions: - type: array - items: - type: object - properties: - ip: - type: string - uuid: - type: string - datetime: - type: number - platform: - type: string - browser: - type: string - version: - type: string - current: - type: boolean - datetimeISO: - type: string - usernames: - type: array - items: - type: object - properties: - value: - type: string - timestamp: - type: number - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - emails: - type: array - items: - type: object - properties: - value: - type: string - timestamp: - type: number - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - moderationNotes: - type: array - items: - type: object - properties: - uid: - type: number - note: - type: string - timestamp: - type: number - timestampISO: - type: string - user: - type: object - properties: - username: - type: string - description: A friendly name for a given user account - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - type: string - uid: - type: number - description: A user identifier - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without - an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's auto-generated - icon - example: "#f44336" - title: - type: string - - $ref: ../../../components/schemas/Pagination.yaml#/Pagination - - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - users + summary: Get user moderation info + description: Administrators and Global Moderators get access to the `/info` page, which shows some backend data that is useful from a moderation point-of-view (such as IP addresses, recent bans, moderation history, etc). + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull + - type: object + properties: + history: + type: object + properties: + flags: + type: array + items: + type: object + properties: + pid: + type: number + timestamp: + type: number + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + timestampReadable: + type: string + additionalProperties: + description: Contextual data is added to this object (such as topic data, etc.) + bans: + type: array + items: + type: object + properties: + uid: + type: number + timestamp: + type: number + expire: + type: number + fromUid: + type: number + user: + type: object + properties: + username: + type: string + description: A friendly name for a given user account + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + type: string + uid: + type: number + description: A user identifier + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without + an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's auto-generated + icon + example: "#f44336" + until: + type: number + untilReadable: + type: string + timestampReadable: + type: string + timestampISO: + type: string + reason: + type: string + sessions: + type: array + items: + type: object + properties: + ip: + type: string + uuid: + type: string + datetime: + type: number + platform: + type: string + browser: + type: string + version: + type: string + current: + type: boolean + datetimeISO: + type: string + usernames: + type: array + items: + type: object + properties: + value: + type: string + timestamp: + type: number + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + emails: + type: array + items: + type: object + properties: + value: + type: string + timestamp: + type: number + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + moderationNotes: + type: array + items: + type: object + properties: + uid: + type: number + note: + type: string + timestamp: + type: number + timestampISO: + type: string + user: + type: object + properties: + username: + type: string + description: A friendly name for a given user account + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + type: string + uid: + type: number + description: A user identifier + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without + an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's auto-generated + icon + example: "#f44336" + title: + type: string + - $ref: ../../../components/schemas/Pagination.yaml#/Pagination + - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/user/userslug/posts.yaml b/public/openapi/read/user/userslug/posts.yaml index a2b6c63..53ad166 100644 --- a/public/openapi/read/user/userslug/posts.yaml +++ b/public/openapi/read/user/userslug/posts.yaml @@ -1,45 +1,45 @@ -get: - tags: - - users - summary: Get a user's posts - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull - - type: object - properties: - posts: - $ref: ../../../components/schemas/PostsObject.yaml#/PostsObject - nextStart: - type: number - noItemsFoundKey: - type: string - title: - type: string - showSort: - type: boolean - sortOptions: - type: array - items: - type: object - properties: - url: - type: string - name: - type: string - selected: - type: boolean - - $ref: ../../../components/schemas/Pagination.yaml#/Pagination - - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - users + summary: Get a user's posts + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull + - type: object + properties: + posts: + $ref: ../../../components/schemas/PostsObject.yaml#/PostsObject + nextStart: + type: number + noItemsFoundKey: + type: string + title: + type: string + showSort: + type: boolean + sortOptions: + type: array + items: + type: object + properties: + url: + type: string + name: + type: string + selected: + type: boolean + - $ref: ../../../components/schemas/Pagination.yaml#/Pagination + - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/user/userslug/session/uuid.yaml b/public/openapi/read/user/userslug/session/uuid.yaml index e75daf6..5042099 100644 --- a/public/openapi/read/user/userslug/session/uuid.yaml +++ b/public/openapi/read/user/userslug/session/uuid.yaml @@ -1,20 +1,20 @@ -delete: - tags: - - users - summary: Revoke a user session - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - - name: uuid - in: path - required: true - schema: - type: string - example: testuuid - responses: - "200": +delete: + tags: + - users + summary: Revoke a user session + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + - name: uuid + in: path + required: true + schema: + type: string + example: testuuid + responses: + "200": description: User session revoked \ No newline at end of file diff --git a/public/openapi/read/user/userslug/sessions.yaml b/public/openapi/read/user/userslug/sessions.yaml index 2c9a439..64092e4 100644 --- a/public/openapi/read/user/userslug/sessions.yaml +++ b/public/openapi/read/user/userslug/sessions.yaml @@ -1,46 +1,46 @@ -get: - tags: - - users - summary: Get user's active sessions - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull - - type: object - properties: - sessions: - type: array - items: - type: object - properties: - ip: - type: string - uuid: - type: string - datetime: - type: number - platform: - type: string - browser: - type: string - version: - type: string - current: - type: boolean - datetimeISO: - type: string - title: - type: string - - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - users + summary: Get user's active sessions + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull + - type: object + properties: + sessions: + type: array + items: + type: object + properties: + ip: + type: string + uuid: + type: string + datetime: + type: number + platform: + type: string + browser: + type: string + version: + type: string + current: + type: boolean + datetimeISO: + type: string + title: + type: string + - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/user/userslug/settings.yaml b/public/openapi/read/user/userslug/settings.yaml index e74a44f..bdbca9f 100644 --- a/public/openapi/read/user/userslug/settings.yaml +++ b/public/openapi/read/user/userslug/settings.yaml @@ -1,139 +1,139 @@ -get: - tags: - - users - summary: Get user's settings - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull - - type: object - properties: - settings: - $ref: ../../../components/schemas/SettingsObj.yaml#/Settings - languages: - type: array - items: - type: object - properties: - name: - type: string - code: - type: string - dir: - type: string - selected: - type: boolean - acpLanguages: - type: array - items: - type: object - properties: - name: - type: string - code: - type: string - dir: - type: string - selected: - type: boolean - customSettings: - type: array - items: - type: object - properties: {} - additionalProperties: {} - homePageRoutes: - type: array - items: - type: object - properties: - route: - type: string - name: - type: string - selected: - type: boolean - notificationSettings: - type: array - items: - type: object - properties: - name: - type: string - label: - type: string - none: - type: boolean - notification: - type: boolean - email: - type: boolean - notificationemail: - type: boolean - disableEmailSubscriptions: - type: number - dailyDigestFreqOptions: - type: array - items: - type: object - properties: - value: - type: string - name: - type: string - selected: - type: boolean - bootswatchSkinOptions: - type: array - items: - type: object - properties: - name: - type: string - value: - type: string - selected: - type: boolean - upvoteNotifFreq: - type: array - items: - type: object - properties: - name: - type: string - selected: - type: boolean - categoryWatchState: - type: object - properties: - watching: - type: boolean - disableCustomUserSkins: - type: number - allowUserHomePage: - type: number - hideFullname: - type: number - hideEmail: - type: number - inTopicSearchAvailable: - type: boolean - maxTopicsPerPage: - type: number - maxPostsPerPage: - type: number - title: - type: string - - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - users + summary: Get user's settings + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull + - type: object + properties: + settings: + $ref: ../../../components/schemas/SettingsObj.yaml#/Settings + languages: + type: array + items: + type: object + properties: + name: + type: string + code: + type: string + dir: + type: string + selected: + type: boolean + acpLanguages: + type: array + items: + type: object + properties: + name: + type: string + code: + type: string + dir: + type: string + selected: + type: boolean + customSettings: + type: array + items: + type: object + properties: {} + additionalProperties: {} + homePageRoutes: + type: array + items: + type: object + properties: + route: + type: string + name: + type: string + selected: + type: boolean + notificationSettings: + type: array + items: + type: object + properties: + name: + type: string + label: + type: string + none: + type: boolean + notification: + type: boolean + email: + type: boolean + notificationemail: + type: boolean + disableEmailSubscriptions: + type: number + dailyDigestFreqOptions: + type: array + items: + type: object + properties: + value: + type: string + name: + type: string + selected: + type: boolean + bootswatchSkinOptions: + type: array + items: + type: object + properties: + name: + type: string + value: + type: string + selected: + type: boolean + upvoteNotifFreq: + type: array + items: + type: object + properties: + name: + type: string + selected: + type: boolean + categoryWatchState: + type: object + properties: + watching: + type: boolean + disableCustomUserSkins: + type: number + allowUserHomePage: + type: number + hideFullname: + type: number + hideEmail: + type: number + inTopicSearchAvailable: + type: boolean + maxTopicsPerPage: + type: number + maxPostsPerPage: + type: number + title: + type: string + - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/user/userslug/topics.yaml b/public/openapi/read/user/userslug/topics.yaml index 64b9efd..4a2f1b2 100644 --- a/public/openapi/read/user/userslug/topics.yaml +++ b/public/openapi/read/user/userslug/topics.yaml @@ -1,47 +1,47 @@ -get: - tags: - - users - summary: Get a user's topics - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull - - type: object - properties: - topics: - type: array - items: - $ref: ../../../components/schemas/TopicObject.yaml#/TopicObject - nextStart: - type: number - noItemsFoundKey: - type: string - title: - type: string - showSort: - type: boolean - sortOptions: - type: array - items: - type: object - properties: - url: - type: string - name: - type: string - selected: - type: boolean - - $ref: ../../../components/schemas/Pagination.yaml#/Pagination - - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - users + summary: Get a user's topics + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull + - type: object + properties: + topics: + type: array + items: + $ref: ../../../components/schemas/TopicObject.yaml#/TopicObject + nextStart: + type: number + noItemsFoundKey: + type: string + title: + type: string + showSort: + type: boolean + sortOptions: + type: array + items: + type: object + properties: + url: + type: string + name: + type: string + selected: + type: boolean + - $ref: ../../../components/schemas/Pagination.yaml#/Pagination + - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/user/userslug/uploads.yaml b/public/openapi/read/user/userslug/uploads.yaml index f8b74cc..be05512 100644 --- a/public/openapi/read/user/userslug/uploads.yaml +++ b/public/openapi/read/user/userslug/uploads.yaml @@ -1,37 +1,37 @@ -get: - tags: - - users - summary: Get user's uploads - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull - - type: object - properties: - uploads: - type: array - items: - type: object - properties: - name: - type: string - url: - type: string - privateUploads: - type: boolean - title: - type: string - - $ref: ../../../components/schemas/Pagination.yaml#/Pagination - - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - users + summary: Get user's uploads + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull + - type: object + properties: + uploads: + type: array + items: + type: object + properties: + name: + type: string + url: + type: string + privateUploads: + type: boolean + title: + type: string + - $ref: ../../../components/schemas/Pagination.yaml#/Pagination + - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/user/userslug/upvoted.yaml b/public/openapi/read/user/userslug/upvoted.yaml index 8162329..cd50d82 100644 --- a/public/openapi/read/user/userslug/upvoted.yaml +++ b/public/openapi/read/user/userslug/upvoted.yaml @@ -1,51 +1,51 @@ -get: - tags: - - users - summary: Get user's upvoted posts - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull - - type: object - properties: - posts: - $ref: ../../../components/schemas/PostsObject.yaml#/PostsObject - nextStart: - type: number - noItemsFoundKey: - type: string - description: Translation key for message notifying user that there were no posts found - title: - type: string - showSort: - type: boolean - sortOptions: - type: array - items: - type: object - properties: - url: - type: string - name: - type: string - selected: - type: boolean - required: - - posts - - nextStart - - noItemsFoundKey - - title - - $ref: ../../../components/schemas/Pagination.yaml#/Pagination - - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - users + summary: Get user's upvoted posts + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull + - type: object + properties: + posts: + $ref: ../../../components/schemas/PostsObject.yaml#/PostsObject + nextStart: + type: number + noItemsFoundKey: + type: string + description: Translation key for message notifying user that there were no posts found + title: + type: string + showSort: + type: boolean + sortOptions: + type: array + items: + type: object + properties: + url: + type: string + name: + type: string + selected: + type: boolean + required: + - posts + - nextStart + - noItemsFoundKey + - title + - $ref: ../../../components/schemas/Pagination.yaml#/Pagination + - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/user/userslug/watched.yaml b/public/openapi/read/user/userslug/watched.yaml index 11e6cf9..60dfb63 100644 --- a/public/openapi/read/user/userslug/watched.yaml +++ b/public/openapi/read/user/userslug/watched.yaml @@ -1,49 +1,49 @@ -get: - tags: - - users - summary: Get user's watched topics - parameters: - - name: userslug - in: path - required: true - schema: - type: string - example: admin - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull - - type: object - properties: - moderationNote: - type: string - topics: - type: array - items: - $ref: ../../../components/schemas/TopicObject.yaml#/TopicObject - nextStart: - type: number - noItemsFoundKey: - type: string - title: - type: string - showSort: - type: boolean - sortOptions: - type: array - items: - type: object - properties: - url: - type: string - name: - type: string - selected: - type: boolean - - $ref: ../../../components/schemas/Pagination.yaml#/Pagination - - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - users + summary: Get user's watched topics + parameters: + - name: userslug + in: path + required: true + schema: + type: string + example: admin + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - $ref: ../../../components/schemas/UserObject.yaml#/UserObjectFull + - type: object + properties: + moderationNote: + type: string + topics: + type: array + items: + $ref: ../../../components/schemas/TopicObject.yaml#/TopicObject + nextStart: + type: number + noItemsFoundKey: + type: string + title: + type: string + showSort: + type: boolean + sortOptions: + type: array + items: + type: object + properties: + url: + type: string + name: + type: string + selected: + type: boolean + - $ref: ../../../components/schemas/Pagination.yaml#/Pagination + - $ref: ../../../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../../../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/read/users.yaml b/public/openapi/read/users.yaml index 160aa92..048cf4e 100644 --- a/public/openapi/read/users.yaml +++ b/public/openapi/read/users.yaml @@ -1,119 +1,119 @@ -get: - tags: - - users - summary: Get users - parameters: - - in: query - name: section - schema: - type: string - enum: ['joindate', 'online', 'sort-posts', 'sort-reputation', 'banned', 'flagged'] - required: false - description: Allows filtering of the user list via pre-defined sections - example: 'joindate' - - in: query - name: term - schema: - type: string - required: false - description: Allows for searching of user list - example: '' - responses: - "200": - description: "" - content: - application/json: - schema: - allOf: - - type: object - properties: - users: - type: array - items: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - nullable: true - type: string - status: - type: string - postcount: - type: number - reputation: - type: number - email:confirmed: - type: number - description: Whether the user has confirmed their email address or not - lastonline: - type: number - flags: - nullable: true - banned: - type: number - banned:expire: - type: number - joindate: - type: number - description: A UNIX timestamp representing the moment the user's account was - created - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users without an - avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with `icon:text` - for the user's auto-generated icon - example: "#f44336" - joindateISO: - type: string - lastonlineISO: - type: string - banned_until: - type: number - banned_until_readable: - type: string - userCount: - type: number - title: - type: string - isAdminOrGlobalMod: - type: boolean - isAdmin: - type: boolean - isGlobalMod: - type: boolean - displayUserSearch: - type: boolean - section_joindate: - type: boolean - maximumInvites: - type: number - inviteOnly: - type: boolean - adminInviteOnly: - type: boolean - invites: - type: number - showInviteButton: - type: boolean - reputation:disabled: - type: number - - $ref: ../components/schemas/Pagination.yaml#/Pagination - - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs +get: + tags: + - users + summary: Get users + parameters: + - in: query + name: section + schema: + type: string + enum: ['joindate', 'online', 'sort-posts', 'sort-reputation', 'banned', 'flagged'] + required: false + description: Allows filtering of the user list via pre-defined sections + example: 'joindate' + - in: query + name: term + schema: + type: string + required: false + description: Allows for searching of user list + example: '' + responses: + "200": + description: "" + content: + application/json: + schema: + allOf: + - type: object + properties: + users: + type: array + items: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + nullable: true + type: string + status: + type: string + postcount: + type: number + reputation: + type: number + email:confirmed: + type: number + description: Whether the user has confirmed their email address or not + lastonline: + type: number + flags: + nullable: true + banned: + type: number + banned:expire: + type: number + joindate: + type: number + description: A UNIX timestamp representing the moment the user's account was + created + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users without an + avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with `icon:text` + for the user's auto-generated icon + example: "#f44336" + joindateISO: + type: string + lastonlineISO: + type: string + banned_until: + type: number + banned_until_readable: + type: string + userCount: + type: number + title: + type: string + isAdminOrGlobalMod: + type: boolean + isAdmin: + type: boolean + isGlobalMod: + type: boolean + displayUserSearch: + type: boolean + section_joindate: + type: boolean + maximumInvites: + type: number + inviteOnly: + type: boolean + adminInviteOnly: + type: boolean + invites: + type: number + showInviteButton: + type: boolean + reputation:disabled: + type: number + - $ref: ../components/schemas/Pagination.yaml#/Pagination + - $ref: ../components/schemas/Breadcrumbs.yaml#/Breadcrumbs - $ref: ../components/schemas/CommonProps.yaml#/CommonProps \ No newline at end of file diff --git a/public/openapi/write.yaml b/public/openapi/write.yaml index 6f55dbc..07bc8cc 100644 --- a/public/openapi/write.yaml +++ b/public/openapi/write.yaml @@ -1,178 +1,178 @@ -openapi: 3.0.0 -info: - title: NodeBB Write API - description: >- - # Overview - - The following document outlines every route exposed by the NodeBB Write API. As of NodeBB v1.15.0, NodeBB will use these routes to make changes to the database (e.g. creating new posts, editing user profiles, etc.) - - We invite you to build external integrations with NodeBB using this document as a guide. - - # History - - Up until v1.15.0, NodeBB utilised the [WebSocket](https://en.wikipedia.org/wiki/WebSocket) protocol to communicate with the backend. However, it was decided in early 2020 that this usage of WebSocket – while functional – led to occasional wheel reinvention and disregarded an otherwise fully-featured technology (that is, REST). - - Years prior to this determination, many users of NodeBB had asked for a RESTful API to call against NodeBB, which led to the creation of [`nodebb-plugin-write-api`](https://github.com/NodeBB/nodebb-plugin-write-api). In tandem with the above decision, the Write API was merged into NodeBB core in late 2020. - - v3 of the Write API (this document) achieves rough feature parity with v2 of the Write API plugin. - - # Authentication - - Please see the ["Authentication" section under the Read API](../read/#section/Overview/Authentication) for more information on how to authenticate against this API in order to make calls. - version: 1.19.0 - contact: - email: support@nodebb.org - license: - name: GPL-3.0 -servers: - - url: /api/v3 -tags: - - name: utilities - description: Utility calls to test Write API functionality - - name: users - description: Account related calls (create, modify, delete, etc.) - - name: groups - description: Calls related to user groups - - name: categories - description: Administrative calls to manage categories - - name: topics - description: Topic-based calls (create, modify, delete, etc.) - - name: posts - description: Individual post-related calls (create, modify, delete, etc.) - - name: chats - description: Calls related to the user private messaging system - - name: admin - description: Administrative calls - - name: files - description: File upload routes -paths: - /ping: - $ref: 'write/ping.yaml' - /utilities/login: - $ref: 'write/login.yaml' - /users/: - $ref: 'write/users.yaml' - /users/{uid}: - $ref: 'write/users/uid.yaml' - /users/{uid}/picture: - $ref: 'write/users/uid/picture.yaml' - /users/{uid}/content: - $ref: 'write/users/uid/content.yaml' - /users/{uid}/account: - $ref: 'write/users/uid/account.yaml' - /users/{uid}/settings: - $ref: 'write/users/uid/settings.yaml' - /users/{uid}/password: - $ref: 'write/users/uid/password.yaml' - /users/{uid}/follow: - $ref: 'write/users/uid/follow.yaml' - /users/{uid}/ban: - $ref: 'write/users/uid/ban.yaml' - /users/{uid}/mute: - $ref: 'write/users/uid/mute.yaml' - /users/{uid}/tokens: - $ref: 'write/users/uid/tokens.yaml' - /users/{uid}/tokens/{token}: - $ref: 'write/users/uid/tokens/token.yaml' - /users/{uid}/sessions/{uuid}: - $ref: 'write/users/uid/sessions/uuid.yaml' - /users/{uid}/invites: - $ref: 'write/users/uid/invites.yaml' - /users/{uid}/invites/groups: - $ref: 'write/users/uid/invites/groups.yaml' - /users/{uid}/emails: - $ref: 'write/users/uid/emails.yaml' - /users/{uid}/emails/{email}: - $ref: 'write/users/uid/emails/email.yaml' - /users/{uid}/emails/{email}/confirm: - $ref: 'write/users/uid/emails/email/confirm.yaml' - /users/{uid}/exports/{type}: - $ref: 'write/users/uid/exports/type.yaml' - /groups/: - $ref: 'write/groups.yaml' - /groups/{slug}: - $ref: 'write/groups/slug.yaml' - /groups/{slug}/membership/{uid}: - $ref: 'write/groups/slug/membership/uid.yaml' - /groups/{slug}/ownership/{uid}: - $ref: 'write/groups/slug/ownership/uid.yaml' - /categories/: - $ref: 'write/categories.yaml' - /categories/{cid}: - $ref: 'write/categories/cid.yaml' - /categories/{cid}/privileges: - $ref: 'write/categories/cid/privileges.yaml' - /categories/{cid}/privileges/{privilege}: - $ref: 'write/categories/cid/privileges/privilege.yaml' - /categories/{cid}/moderator/{uid}: - $ref: 'write/categories/cid/moderator/uid.yaml' - /topics/: - $ref: 'write/topics.yaml' - /topics/{tid}: - $ref: 'write/topics/tid.yaml' - /topics/{tid}/state: - $ref: 'write/topics/tid/state.yaml' - /topics/{tid}/lock: - $ref: 'write/topics/tid/lock.yaml' - /topics/{tid}/pin: - $ref: 'write/topics/tid/pin.yaml' - /topics/{tid}/follow: - $ref: 'write/topics/tid/follow.yaml' - /topics/{tid}/ignore: - $ref: 'write/topics/tid/ignore.yaml' - /topics/{tid}/tags: - $ref: 'write/topics/tid/tags.yaml' - /topics/{tid}/thumbs: - $ref: 'write/topics/tid/thumbs.yaml' - /topics/{tid}/thumbs/order: - $ref: 'write/topics/tid/thumbs/order.yaml' - /topics/{tid}/events: - $ref: 'write/topics/tid/events.yaml' - /topics/{tid}/events/{eventId}: - $ref: 'write/topics/tid/events/eventId.yaml' - /posts/{pid}: - $ref: 'write/posts/pid.yaml' - /posts/{pid}/state: - $ref: 'write/posts/pid/state.yaml' - /posts/{pid}/move: - $ref: 'write/posts/pid/move.yaml' - /posts/{pid}/vote: - $ref: 'write/posts/pid/vote.yaml' - /posts/{pid}/bookmark: - $ref: 'write/posts/pid/bookmark.yaml' - /posts/{pid}/diffs: - $ref: 'write/posts/pid/diffs.yaml' - /posts/{pid}/diffs/{since}: - $ref: 'write/posts/pid/diffs/since.yaml' - /posts/{pid}/diffs/{timestamp}: - $ref: 'write/posts/pid/diffs/timestamp.yaml' - /chats/: - $ref: 'write/chats.yaml' - /chats/{roomId}: - $ref: 'write/chats/roomId.yaml' - /chats/{roomId}/users: - $ref: 'write/chats/roomId/users.yaml' - /chats/{roomId}/users/{uid}: - $ref: 'write/chats/roomId/users/uid.yaml' - /chats/{roomId}/messages: - $ref: 'write/chats/roomId/messages.yaml' - /chats/{roomId}/messages/{mid}: - $ref: 'write/chats/roomId/messages/mid.yaml' - /flags/: - $ref: 'write/flags.yaml' - /flags/{flagId}: - $ref: 'write/flags/flagId.yaml' - /flags/{flagId}/notes: - $ref: 'write/flags/flagId/notes.yaml' - /flags/{flagId}/notes/{datetime}: - $ref: 'write/flags/flagId/notes/datetime.yaml' - /admin/settings/{setting}: - $ref: 'write/admin/settings/setting.yaml' - /admin/analytics: - $ref: 'write/admin/analytics.yaml' - /admin/analytics/{set}: - $ref: 'write/admin/analytics/set.yaml' - /files/: - $ref: 'write/files.yaml' - /files/folder: +openapi: 3.0.0 +info: + title: NodeBB Write API + description: >- + # Overview + + The following document outlines every route exposed by the NodeBB Write API. As of NodeBB v1.15.0, NodeBB will use these routes to make changes to the database (e.g. creating new posts, editing user profiles, etc.) + + We invite you to build external integrations with NodeBB using this document as a guide. + + # History + + Up until v1.15.0, NodeBB utilised the [WebSocket](https://en.wikipedia.org/wiki/WebSocket) protocol to communicate with the backend. However, it was decided in early 2020 that this usage of WebSocket – while functional – led to occasional wheel reinvention and disregarded an otherwise fully-featured technology (that is, REST). + + Years prior to this determination, many users of NodeBB had asked for a RESTful API to call against NodeBB, which led to the creation of [`nodebb-plugin-write-api`](https://github.com/NodeBB/nodebb-plugin-write-api). In tandem with the above decision, the Write API was merged into NodeBB core in late 2020. + + v3 of the Write API (this document) achieves rough feature parity with v2 of the Write API plugin. + + # Authentication + + Please see the ["Authentication" section under the Read API](../read/#section/Overview/Authentication) for more information on how to authenticate against this API in order to make calls. + version: 1.19.0 + contact: + email: support@nodebb.org + license: + name: GPL-3.0 +servers: + - url: /api/v3 +tags: + - name: utilities + description: Utility calls to test Write API functionality + - name: users + description: Account related calls (create, modify, delete, etc.) + - name: groups + description: Calls related to user groups + - name: categories + description: Administrative calls to manage categories + - name: topics + description: Topic-based calls (create, modify, delete, etc.) + - name: posts + description: Individual post-related calls (create, modify, delete, etc.) + - name: chats + description: Calls related to the user private messaging system + - name: admin + description: Administrative calls + - name: files + description: File upload routes +paths: + /ping: + $ref: 'write/ping.yaml' + /utilities/login: + $ref: 'write/login.yaml' + /users/: + $ref: 'write/users.yaml' + /users/{uid}: + $ref: 'write/users/uid.yaml' + /users/{uid}/picture: + $ref: 'write/users/uid/picture.yaml' + /users/{uid}/content: + $ref: 'write/users/uid/content.yaml' + /users/{uid}/account: + $ref: 'write/users/uid/account.yaml' + /users/{uid}/settings: + $ref: 'write/users/uid/settings.yaml' + /users/{uid}/password: + $ref: 'write/users/uid/password.yaml' + /users/{uid}/follow: + $ref: 'write/users/uid/follow.yaml' + /users/{uid}/ban: + $ref: 'write/users/uid/ban.yaml' + /users/{uid}/mute: + $ref: 'write/users/uid/mute.yaml' + /users/{uid}/tokens: + $ref: 'write/users/uid/tokens.yaml' + /users/{uid}/tokens/{token}: + $ref: 'write/users/uid/tokens/token.yaml' + /users/{uid}/sessions/{uuid}: + $ref: 'write/users/uid/sessions/uuid.yaml' + /users/{uid}/invites: + $ref: 'write/users/uid/invites.yaml' + /users/{uid}/invites/groups: + $ref: 'write/users/uid/invites/groups.yaml' + /users/{uid}/emails: + $ref: 'write/users/uid/emails.yaml' + /users/{uid}/emails/{email}: + $ref: 'write/users/uid/emails/email.yaml' + /users/{uid}/emails/{email}/confirm: + $ref: 'write/users/uid/emails/email/confirm.yaml' + /users/{uid}/exports/{type}: + $ref: 'write/users/uid/exports/type.yaml' + /groups/: + $ref: 'write/groups.yaml' + /groups/{slug}: + $ref: 'write/groups/slug.yaml' + /groups/{slug}/membership/{uid}: + $ref: 'write/groups/slug/membership/uid.yaml' + /groups/{slug}/ownership/{uid}: + $ref: 'write/groups/slug/ownership/uid.yaml' + /categories/: + $ref: 'write/categories.yaml' + /categories/{cid}: + $ref: 'write/categories/cid.yaml' + /categories/{cid}/privileges: + $ref: 'write/categories/cid/privileges.yaml' + /categories/{cid}/privileges/{privilege}: + $ref: 'write/categories/cid/privileges/privilege.yaml' + /categories/{cid}/moderator/{uid}: + $ref: 'write/categories/cid/moderator/uid.yaml' + /topics/: + $ref: 'write/topics.yaml' + /topics/{tid}: + $ref: 'write/topics/tid.yaml' + /topics/{tid}/state: + $ref: 'write/topics/tid/state.yaml' + /topics/{tid}/lock: + $ref: 'write/topics/tid/lock.yaml' + /topics/{tid}/pin: + $ref: 'write/topics/tid/pin.yaml' + /topics/{tid}/follow: + $ref: 'write/topics/tid/follow.yaml' + /topics/{tid}/ignore: + $ref: 'write/topics/tid/ignore.yaml' + /topics/{tid}/tags: + $ref: 'write/topics/tid/tags.yaml' + /topics/{tid}/thumbs: + $ref: 'write/topics/tid/thumbs.yaml' + /topics/{tid}/thumbs/order: + $ref: 'write/topics/tid/thumbs/order.yaml' + /topics/{tid}/events: + $ref: 'write/topics/tid/events.yaml' + /topics/{tid}/events/{eventId}: + $ref: 'write/topics/tid/events/eventId.yaml' + /posts/{pid}: + $ref: 'write/posts/pid.yaml' + /posts/{pid}/state: + $ref: 'write/posts/pid/state.yaml' + /posts/{pid}/move: + $ref: 'write/posts/pid/move.yaml' + /posts/{pid}/vote: + $ref: 'write/posts/pid/vote.yaml' + /posts/{pid}/bookmark: + $ref: 'write/posts/pid/bookmark.yaml' + /posts/{pid}/diffs: + $ref: 'write/posts/pid/diffs.yaml' + /posts/{pid}/diffs/{since}: + $ref: 'write/posts/pid/diffs/since.yaml' + /posts/{pid}/diffs/{timestamp}: + $ref: 'write/posts/pid/diffs/timestamp.yaml' + /chats/: + $ref: 'write/chats.yaml' + /chats/{roomId}: + $ref: 'write/chats/roomId.yaml' + /chats/{roomId}/users: + $ref: 'write/chats/roomId/users.yaml' + /chats/{roomId}/users/{uid}: + $ref: 'write/chats/roomId/users/uid.yaml' + /chats/{roomId}/messages: + $ref: 'write/chats/roomId/messages.yaml' + /chats/{roomId}/messages/{mid}: + $ref: 'write/chats/roomId/messages/mid.yaml' + /flags/: + $ref: 'write/flags.yaml' + /flags/{flagId}: + $ref: 'write/flags/flagId.yaml' + /flags/{flagId}/notes: + $ref: 'write/flags/flagId/notes.yaml' + /flags/{flagId}/notes/{datetime}: + $ref: 'write/flags/flagId/notes/datetime.yaml' + /admin/settings/{setting}: + $ref: 'write/admin/settings/setting.yaml' + /admin/analytics: + $ref: 'write/admin/analytics.yaml' + /admin/analytics/{set}: + $ref: 'write/admin/analytics/set.yaml' + /files/: + $ref: 'write/files.yaml' + /files/folder: $ref: 'write/files/folder.yaml' \ No newline at end of file diff --git a/public/openapi/write/admin/analytics.yaml b/public/openapi/write/admin/analytics.yaml index 06f68a3..ff02111 100644 --- a/public/openapi/write/admin/analytics.yaml +++ b/public/openapi/write/admin/analytics.yaml @@ -1,20 +1,20 @@ -get: - tags: - - admin - summary: get analytics keys - description: This operation returns the list metrics tracked by NodeBB. It is only accessible to administrators. - responses: - '200': - description: Analytics keys retrieved - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../components/schemas/Status.yaml#/Status - response: - type: object - properties: - keys: +get: + tags: + - admin + summary: get analytics keys + description: This operation returns the list metrics tracked by NodeBB. It is only accessible to administrators. + responses: + '200': + description: Analytics keys retrieved + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../components/schemas/Status.yaml#/Status + response: + type: object + properties: + keys: type: array \ No newline at end of file diff --git a/public/openapi/write/admin/analytics/set.yaml b/public/openapi/write/admin/analytics/set.yaml index 31f6346..625b796 100644 --- a/public/openapi/write/admin/analytics/set.yaml +++ b/public/openapi/write/admin/analytics/set.yaml @@ -1,46 +1,46 @@ -get: - tags: - - admin - summary: get analytics data - description: This operation retrieves analytics data from NodeBB. It is only accessible to administrators. - parameters: - - in: path - name: set - schema: - type: string - required: true - description: analytics set to retrieve - example: topics - - in: query - name: units - schema: - type: string - enum: [hours, days] - description: Whether to display dashboard data segmented daily or hourly - example: days - - in: query - name: until - schema: - type: number - description: A UNIX timestamp denoting the end of the analytics reporting period - example: '' - - in: query - name: count - schema: - type: number - description: The number of entries to return (e.g. if `units` is `hourly`, and `count` is `24`, the result set will contain 24 hours' worth of analytics) - example: 20 - responses: - '200': - description: Analytics set retrieved - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: array - items: +get: + tags: + - admin + summary: get analytics data + description: This operation retrieves analytics data from NodeBB. It is only accessible to administrators. + parameters: + - in: path + name: set + schema: + type: string + required: true + description: analytics set to retrieve + example: topics + - in: query + name: units + schema: + type: string + enum: [hours, days] + description: Whether to display dashboard data segmented daily or hourly + example: days + - in: query + name: until + schema: + type: number + description: A UNIX timestamp denoting the end of the analytics reporting period + example: '' + - in: query + name: count + schema: + type: number + description: The number of entries to return (e.g. if `units` is `hourly`, and `count` is `24`, the result set will contain 24 hours' worth of analytics) + example: 20 + responses: + '200': + description: Analytics set retrieved + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: array + items: type: number \ No newline at end of file diff --git a/public/openapi/write/admin/settings/setting.yaml b/public/openapi/write/admin/settings/setting.yaml index 009f478..22935eb 100644 --- a/public/openapi/write/admin/settings/setting.yaml +++ b/public/openapi/write/admin/settings/setting.yaml @@ -1,37 +1,37 @@ -put: - tags: - - admin - summary: update configuration setting - description: This operation updates a configuration setting in the backend. The calling user must have the `admin:settings` privilege (or be a superadmin) in order for this call to proceed. - parameters: - - in: path - name: setting - schema: - type: string - required: true - description: backend id of the setting to update - example: maximumRelatedTopics - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - value: - type: string - description: the value of the new setting - example: 2 - responses: - '200': - description: Admin setting updated - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object +put: + tags: + - admin + summary: update configuration setting + description: This operation updates a configuration setting in the backend. The calling user must have the `admin:settings` privilege (or be a superadmin) in order for this call to proceed. + parameters: + - in: path + name: setting + schema: + type: string + required: true + description: backend id of the setting to update + example: maximumRelatedTopics + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + value: + type: string + description: the value of the new setting + example: 2 + responses: + '200': + description: Admin setting updated + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object properties: {} \ No newline at end of file diff --git a/public/openapi/write/categories.yaml b/public/openapi/write/categories.yaml index 5c26b53..da4b3f9 100644 --- a/public/openapi/write/categories.yaml +++ b/public/openapi/write/categories.yaml @@ -1,66 +1,66 @@ -post: - tags: - - categories - summary: create a category - description: This operation creates a new category - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - name: - type: string - example: My New Category - description: - type: string - example: Lorem ipsum, dolor sit amet - parentCid: - type: number - example: 0 - cloneFromCid: - type: number - example: 0 - icon: - type: string - example: bullhorn - description: A ForkAwesome icon without the `fa-` prefix - bgColor: - type: string - example: '#ffffff' - color: - type: string - example: '#000000' - link: - type: string - example: 'https://example.org' - class: - type: string - example: 'col-md-3 col-xs-6' - backgroundImage: - type: string - example: '/assets/relative/path/to/image' - required: - - name - responses: - '200': - description: category successfully created - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../components/schemas/Status.yaml#/Status - response: - allOf: - - $ref: ../components/schemas/CategoryObject.yaml#/CategoryObject - - type: object - properties: - tagWhitelist: - type: array - items: - type: string - unread-class: +post: + tags: + - categories + summary: create a category + description: This operation creates a new category + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + name: + type: string + example: My New Category + description: + type: string + example: Lorem ipsum, dolor sit amet + parentCid: + type: number + example: 0 + cloneFromCid: + type: number + example: 0 + icon: + type: string + example: bullhorn + description: A ForkAwesome icon without the `fa-` prefix + bgColor: + type: string + example: '#ffffff' + color: + type: string + example: '#000000' + link: + type: string + example: 'https://example.org' + class: + type: string + example: 'col-md-3 col-xs-6' + backgroundImage: + type: string + example: '/assets/relative/path/to/image' + required: + - name + responses: + '200': + description: category successfully created + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../components/schemas/Status.yaml#/Status + response: + allOf: + - $ref: ../components/schemas/CategoryObject.yaml#/CategoryObject + - type: object + properties: + tagWhitelist: + type: array + items: + type: string + unread-class: type: string \ No newline at end of file diff --git a/public/openapi/write/categories/cid.yaml b/public/openapi/write/categories/cid.yaml index bcb5022..8011182 100644 --- a/public/openapi/write/categories/cid.yaml +++ b/public/openapi/write/categories/cid.yaml @@ -1,93 +1,93 @@ -get: - tags: - - categories - summary: get a category - description: This operation retrieves a category's data - parameters: - - in: path - name: cid - schema: - type: string - required: true - description: a valid category id - example: 2 - responses: - '200': - description: Category successfully retrieved - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../components/schemas/Status.yaml#/Status - response: - $ref: ../../components/schemas/CategoryObject.yaml#/CategoryObject -put: - tags: - - categories - summary: update a category - description: This operation updates an existing category. - parameters: - - in: path - name: cid - schema: - type: number - required: true - description: a valid category id - example: 2 - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: {} - additionalProperties: {} - responses: - '200': - description: category successfully updated - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../components/schemas/Status.yaml#/Status - response: - allOf: - - $ref: ../../components/schemas/CategoryObject.yaml#/CategoryObject - - type: object - properties: - tagWhitelist: - type: array - items: - type: string - unread-class: - type: string -delete: - tags: - - categories - summary: delete a category - description: This operation deletes and purges a category and all of its topics and posts (careful, there is no confirmation!) - parameters: - - in: path - name: cid - schema: - type: number - required: true - description: a valid category id - example: 2 - responses: - '200': - description: Category successfully deleted - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../components/schemas/Status.yaml#/Status - response: - type: object +get: + tags: + - categories + summary: get a category + description: This operation retrieves a category's data + parameters: + - in: path + name: cid + schema: + type: string + required: true + description: a valid category id + example: 2 + responses: + '200': + description: Category successfully retrieved + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../components/schemas/Status.yaml#/Status + response: + $ref: ../../components/schemas/CategoryObject.yaml#/CategoryObject +put: + tags: + - categories + summary: update a category + description: This operation updates an existing category. + parameters: + - in: path + name: cid + schema: + type: number + required: true + description: a valid category id + example: 2 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: {} + additionalProperties: {} + responses: + '200': + description: category successfully updated + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../components/schemas/Status.yaml#/Status + response: + allOf: + - $ref: ../../components/schemas/CategoryObject.yaml#/CategoryObject + - type: object + properties: + tagWhitelist: + type: array + items: + type: string + unread-class: + type: string +delete: + tags: + - categories + summary: delete a category + description: This operation deletes and purges a category and all of its topics and posts (careful, there is no confirmation!) + parameters: + - in: path + name: cid + schema: + type: number + required: true + description: a valid category id + example: 2 + responses: + '200': + description: Category successfully deleted + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../components/schemas/Status.yaml#/Status + response: + type: object properties: {} \ No newline at end of file diff --git a/public/openapi/write/categories/cid/moderator/uid.yaml b/public/openapi/write/categories/cid/moderator/uid.yaml index 4dc5e57..79101fc 100644 --- a/public/openapi/write/categories/cid/moderator/uid.yaml +++ b/public/openapi/write/categories/cid/moderator/uid.yaml @@ -1,64 +1,64 @@ -put: - tags: - - categories - summary: Make a user moderator of category - description: This operation makes a user the moderator of a specific category - parameters: - - in: path - name: cid - schema: - type: string - required: true - description: a valid category id - example: 1 - - in: path - name: uid - schema: - type: string - required: true - description: The uid of the user that will be the moderator - example: 2 - responses: - '200': - description: User successfully made moderator - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../../components/schemas/Status.yaml#/Status - response: - type: object -delete: - tags: - - categories - summary: Remove a category moderator - description: This operation removes a user from category moderators - parameters: - - in: path - name: cid - schema: - type: string - required: true - description: a valid category id - example: 1 - - in: path - name: uid - schema: - type: string - required: true - description: The uid of the user that will be removed from moderators - example: 2 - responses: - '200': - description: User successfully made moderator - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../../components/schemas/Status.yaml#/Status - response: +put: + tags: + - categories + summary: Make a user moderator of category + description: This operation makes a user the moderator of a specific category + parameters: + - in: path + name: cid + schema: + type: string + required: true + description: a valid category id + example: 1 + - in: path + name: uid + schema: + type: string + required: true + description: The uid of the user that will be the moderator + example: 2 + responses: + '200': + description: User successfully made moderator + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../components/schemas/Status.yaml#/Status + response: + type: object +delete: + tags: + - categories + summary: Remove a category moderator + description: This operation removes a user from category moderators + parameters: + - in: path + name: cid + schema: + type: string + required: true + description: a valid category id + example: 1 + - in: path + name: uid + schema: + type: string + required: true + description: The uid of the user that will be removed from moderators + example: 2 + responses: + '200': + description: User successfully made moderator + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../components/schemas/Status.yaml#/Status + response: type: object \ No newline at end of file diff --git a/public/openapi/write/categories/cid/privileges.yaml b/public/openapi/write/categories/cid/privileges.yaml index 209b0ad..671e76b 100644 --- a/public/openapi/write/categories/cid/privileges.yaml +++ b/public/openapi/write/categories/cid/privileges.yaml @@ -1,94 +1,94 @@ -get: - tags: - - categories - summary: get a category's privilege set - description: This operation retrieves a category's privilege set. - parameters: - - in: path - name: cid - schema: - type: string - required: true - description: a valid category id, `0` for global privileges, `admin` for admin privileges - example: 1 - responses: - '200': - description: Category privileges successfully retrieved - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object - properties: - labels: - type: object - properties: - users: - type: array - items: - type: string - description: Language key of the privilege name's user-friendly name - groups: - type: array - items: - type: string - description: Language key of the privilege name's user-friendly name - users: - type: array - items: - type: object - properties: - name: - type: string - nameEscaped: - type: string - privileges: - type: object - additionalProperties: - type: boolean - description: A set of privileges with either true or false - isPrivate: - type: boolean - isSystem: - type: boolean - groups: - type: array - items: - type: object - properties: - name: - type: string - nameEscaped: - type: string - privileges: - type: object - additionalProperties: - type: boolean - description: A set of privileges with either true or false - isPrivate: - type: boolean - isSystem: - type: boolean - keys: - type: object - properties: - users: - type: array - items: - type: string - description: "Privilege name" - groups: - type: array - items: - type: string - description: "Privilege name" - columnCountUserOther: - type: number - description: "The number of additional user privileges added by plugins" - columnCountGroupOther: - type: number +get: + tags: + - categories + summary: get a category's privilege set + description: This operation retrieves a category's privilege set. + parameters: + - in: path + name: cid + schema: + type: string + required: true + description: a valid category id, `0` for global privileges, `admin` for admin privileges + example: 1 + responses: + '200': + description: Category privileges successfully retrieved + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: + labels: + type: object + properties: + users: + type: array + items: + type: string + description: Language key of the privilege name's user-friendly name + groups: + type: array + items: + type: string + description: Language key of the privilege name's user-friendly name + users: + type: array + items: + type: object + properties: + name: + type: string + nameEscaped: + type: string + privileges: + type: object + additionalProperties: + type: boolean + description: A set of privileges with either true or false + isPrivate: + type: boolean + isSystem: + type: boolean + groups: + type: array + items: + type: object + properties: + name: + type: string + nameEscaped: + type: string + privileges: + type: object + additionalProperties: + type: boolean + description: A set of privileges with either true or false + isPrivate: + type: boolean + isSystem: + type: boolean + keys: + type: object + properties: + users: + type: array + items: + type: string + description: "Privilege name" + groups: + type: array + items: + type: string + description: "Privilege name" + columnCountUserOther: + type: number + description: "The number of additional user privileges added by plugins" + columnCountGroupOther: + type: number description: "The number of additional group privileges added by plugins" \ No newline at end of file diff --git a/public/openapi/write/categories/cid/privileges/privilege.yaml b/public/openapi/write/categories/cid/privileges/privilege.yaml index 1303640..e073ce7 100644 --- a/public/openapi/write/categories/cid/privileges/privilege.yaml +++ b/public/openapi/write/categories/cid/privileges/privilege.yaml @@ -1,222 +1,222 @@ -put: - tags: - - categories - summary: Grant category privilege for user/group - description: This operation grants a category privilege for a specific user or group - parameters: - - in: path - name: cid - schema: - type: string - required: true - description: a valid category id, `0` for global privileges, `admin` for admin privileges - example: 1 - - in: path - name: privilege - schema: - type: string - required: true - description: The specific privilege you would like to grant. Privileges for groups must be prefixed `group:` - example: 'groups:ban' - requestBody: - content: - application/json: - schema: - type: object - properties: - member: - type: string - description: A valid user id or group name - example: 'guests' - responses: - '200': - description: Privilege successfully granted - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../../components/schemas/Status.yaml#/Status - response: - type: object - properties: - labels: - type: object - properties: - users: - type: array - items: - type: string - description: Language key of the privilege name's user-friendly name - groups: - type: array - items: - type: string - description: Language key of the privilege name's user-friendly name - users: - type: array - items: - type: object - properties: - name: - type: string - nameEscaped: - type: string - privileges: - type: object - additionalProperties: - type: boolean - description: A set of privileges with either true or false - isPrivate: - type: boolean - isSystem: - type: boolean - groups: - type: array - items: - type: object - properties: - name: - type: string - nameEscaped: - type: string - privileges: - type: object - additionalProperties: - type: boolean - description: A set of privileges with either true or false - isPrivate: - type: boolean - isSystem: - type: boolean - keys: - type: object - properties: - users: - type: array - items: - type: string - description: "Privilege name" - groups: - type: array - items: - type: string - description: "Privilege name" - columnCountUserOther: - type: number - description: "The number of additional user privileges added by plugins" - columnCountGroupOther: - type: number - description: "The number of additional user privileges added by plugins" -delete: - tags: - - categories - summary: Rescinds category privilege for user/group - description: This operation rescinds a category privilege for a specific user or group - parameters: - - in: path - name: cid - schema: - type: string - required: true - description: a valid category id, `0` for global privileges, `admin` for admin privileges - example: 1 - - in: path - name: privilege - schema: - type: string - required: true - description: The specific privilege you would like to rescind. Privileges for groups must be prefixed `group:` - example: 'groups:ban' - requestBody: - content: - application/json: - schema: - type: object - properties: - member: - type: string - description: A valid user id or group name - example: 'guests' - responses: - '200': - description: Privilege successfully rescinded - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../../components/schemas/Status.yaml#/Status - response: - type: object - properties: - labels: - type: object - properties: - users: - type: array - items: - type: string - description: Language key of the privilege name's user-friendly name - groups: - type: array - items: - type: string - description: Language key of the privilege name's user-friendly name - users: - type: array - items: - type: object - properties: - name: - type: string - nameEscaped: - type: string - privileges: - type: object - additionalProperties: - type: boolean - description: A set of privileges with either true or false - isPrivate: - type: boolean - isSystem: - type: boolean - groups: - type: array - items: - type: object - properties: - name: - type: string - nameEscaped: - type: string - privileges: - type: object - additionalProperties: - type: boolean - description: A set of privileges with either true or false - isPrivate: - type: boolean - isSystem: - type: boolean - keys: - type: object - properties: - users: - type: array - items: - type: string - description: "Privilege name" - groups: - type: array - items: - type: string - description: "Privilege name" - columnCountUserOther: - type: number - description: "The number of additional user privileges added by plugins" - columnCountGroupOther: - type: number +put: + tags: + - categories + summary: Grant category privilege for user/group + description: This operation grants a category privilege for a specific user or group + parameters: + - in: path + name: cid + schema: + type: string + required: true + description: a valid category id, `0` for global privileges, `admin` for admin privileges + example: 1 + - in: path + name: privilege + schema: + type: string + required: true + description: The specific privilege you would like to grant. Privileges for groups must be prefixed `group:` + example: 'groups:ban' + requestBody: + content: + application/json: + schema: + type: object + properties: + member: + type: string + description: A valid user id or group name + example: 'guests' + responses: + '200': + description: Privilege successfully granted + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: + labels: + type: object + properties: + users: + type: array + items: + type: string + description: Language key of the privilege name's user-friendly name + groups: + type: array + items: + type: string + description: Language key of the privilege name's user-friendly name + users: + type: array + items: + type: object + properties: + name: + type: string + nameEscaped: + type: string + privileges: + type: object + additionalProperties: + type: boolean + description: A set of privileges with either true or false + isPrivate: + type: boolean + isSystem: + type: boolean + groups: + type: array + items: + type: object + properties: + name: + type: string + nameEscaped: + type: string + privileges: + type: object + additionalProperties: + type: boolean + description: A set of privileges with either true or false + isPrivate: + type: boolean + isSystem: + type: boolean + keys: + type: object + properties: + users: + type: array + items: + type: string + description: "Privilege name" + groups: + type: array + items: + type: string + description: "Privilege name" + columnCountUserOther: + type: number + description: "The number of additional user privileges added by plugins" + columnCountGroupOther: + type: number + description: "The number of additional user privileges added by plugins" +delete: + tags: + - categories + summary: Rescinds category privilege for user/group + description: This operation rescinds a category privilege for a specific user or group + parameters: + - in: path + name: cid + schema: + type: string + required: true + description: a valid category id, `0` for global privileges, `admin` for admin privileges + example: 1 + - in: path + name: privilege + schema: + type: string + required: true + description: The specific privilege you would like to rescind. Privileges for groups must be prefixed `group:` + example: 'groups:ban' + requestBody: + content: + application/json: + schema: + type: object + properties: + member: + type: string + description: A valid user id or group name + example: 'guests' + responses: + '200': + description: Privilege successfully rescinded + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: + labels: + type: object + properties: + users: + type: array + items: + type: string + description: Language key of the privilege name's user-friendly name + groups: + type: array + items: + type: string + description: Language key of the privilege name's user-friendly name + users: + type: array + items: + type: object + properties: + name: + type: string + nameEscaped: + type: string + privileges: + type: object + additionalProperties: + type: boolean + description: A set of privileges with either true or false + isPrivate: + type: boolean + isSystem: + type: boolean + groups: + type: array + items: + type: object + properties: + name: + type: string + nameEscaped: + type: string + privileges: + type: object + additionalProperties: + type: boolean + description: A set of privileges with either true or false + isPrivate: + type: boolean + isSystem: + type: boolean + keys: + type: object + properties: + users: + type: array + items: + type: string + description: "Privilege name" + groups: + type: array + items: + type: string + description: "Privilege name" + columnCountUserOther: + type: number + description: "The number of additional user privileges added by plugins" + columnCountGroupOther: + type: number description: "The number of additional user privileges added by plugins" \ No newline at end of file diff --git a/public/openapi/write/chats.yaml b/public/openapi/write/chats.yaml index 519b9f6..86916fb 100644 --- a/public/openapi/write/chats.yaml +++ b/public/openapi/write/chats.yaml @@ -1,192 +1,192 @@ -get: - tags: - - chats - summary: list recent chat rooms - description: This operation lists recently used chat rooms that the calling user is a part of - parameters: - - in: query - name: perPage - schema: - type: number - description: The number of chat rooms displayed per page - example: 20 - - in: query - name: page - schema: - type: number - description: The page number - example: 1 - responses: - '200': - description: chat rooms successfully listed - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../components/schemas/Status.yaml#/Status - response: - allOf: - - $ref: ../components/schemas/Chats.yaml#/RoomObject - - type: object - properties: - unread: - type: boolean - description: Whether or not the chat has unread messages within - teaser: - type: object - nullable: true - properties: - fromuid: - type: number - content: - type: string - timestamp: - type: number - timestampISO: - type: string - user: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - nullable: true - type: string - status: - type: string - lastonline: - type: number - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users - without an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's - auto-generated icon - example: "#f44336" - lastonlineISO: - type: string - users: - type: array - items: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - nullable: true - type: string - status: - type: string - lastonline: - type: number - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users - without an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's - auto-generated icon - example: "#f44336" - lastonlineISO: - type: string - lastUser: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - nullable: true - type: string - status: - type: string - lastonline: - type: number - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users - without an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's - auto-generated icon - example: "#f44336" - lastonlineISO: - type: string - usernames: - type: string -post: - tags: - - chats - summary: create a chat room - description: This operation creates a new chat room and adds users to the room, if provided. - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - uids: - type: array - example: [2] - required: - - uids - responses: - '200': - description: chat room successfully created - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../components/schemas/Status.yaml#/Status - response: +get: + tags: + - chats + summary: list recent chat rooms + description: This operation lists recently used chat rooms that the calling user is a part of + parameters: + - in: query + name: perPage + schema: + type: number + description: The number of chat rooms displayed per page + example: 20 + - in: query + name: page + schema: + type: number + description: The page number + example: 1 + responses: + '200': + description: chat rooms successfully listed + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../components/schemas/Status.yaml#/Status + response: + allOf: + - $ref: ../components/schemas/Chats.yaml#/RoomObject + - type: object + properties: + unread: + type: boolean + description: Whether or not the chat has unread messages within + teaser: + type: object + nullable: true + properties: + fromuid: + type: number + content: + type: string + timestamp: + type: number + timestampISO: + type: string + user: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + nullable: true + type: string + status: + type: string + lastonline: + type: number + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users + without an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's + auto-generated icon + example: "#f44336" + lastonlineISO: + type: string + users: + type: array + items: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + nullable: true + type: string + status: + type: string + lastonline: + type: number + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users + without an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's + auto-generated icon + example: "#f44336" + lastonlineISO: + type: string + lastUser: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + nullable: true + type: string + status: + type: string + lastonline: + type: number + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users + without an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's + auto-generated icon + example: "#f44336" + lastonlineISO: + type: string + usernames: + type: string +post: + tags: + - chats + summary: create a chat room + description: This operation creates a new chat room and adds users to the room, if provided. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + uids: + type: array + example: [2] + required: + - uids + responses: + '200': + description: chat room successfully created + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../components/schemas/Status.yaml#/Status + response: $ref: ../components/schemas/Chats.yaml#/RoomObject \ No newline at end of file diff --git a/public/openapi/write/chats/roomId.yaml b/public/openapi/write/chats/roomId.yaml index 3473c92..6650d62 100644 --- a/public/openapi/write/chats/roomId.yaml +++ b/public/openapi/write/chats/roomId.yaml @@ -1,128 +1,128 @@ -head: - tags: - - chats - summary: check if a chat room exists - parameters: - - in: path - name: roomId - schema: - type: number - required: true - description: room ID to check - example: 1 - responses: - '200': - description: chat room found - '404': - description: chat room not found -get: - tags: - - chats - summary: get a chat room - description: This operation retrieves a chat room's data including users and messages - parameters: - - in: path - name: roomId - schema: - type: number - required: true - description: a valid chat room id - example: 1 - responses: - '200': - description: Chat room successfully retrieved - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../components/schemas/Status.yaml#/Status - response: - $ref: ../../components/schemas/Chats.yaml#/RoomObjectFull -post: - tags: - - chats - summary: send a chat message - description: This operation sends a chat message to a chat room - parameters: - - in: path - name: roomId - schema: - type: number - required: true - description: a valid chat room id - example: 1 - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - message: - type: string - example: This is a test message - required: - - message - responses: - '200': - description: message successfully sent - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../components/schemas/Status.yaml#/Status - response: - allOf: - - $ref: ../../components/schemas/Chats.yaml#/MessageObject - - type: object - properties: - self: - type: number - description: Whether or not the message was sent by the calling user (which if you're using this route, will always be 1) - newSet: - type: boolean - description: Whether the message is considered part of a new "set" of messages. It is used in the frontend UI for explicitly denoting that a time gap existed between messages. - cleanedContent: - type: string - mid: - type: number -put: - tags: - - chats - summary: rename a chat room - description: This operation renames a chat room. - parameters: - - in: path - name: roomId - schema: - type: number - required: true - description: a valid room id - example: 1 - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - name: - type: string - description: the new name of the room - example: 'casper the friendly room' - responses: - '200': - description: Chat room renamed - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../components/schemas/Status.yaml#/Status - response: +head: + tags: + - chats + summary: check if a chat room exists + parameters: + - in: path + name: roomId + schema: + type: number + required: true + description: room ID to check + example: 1 + responses: + '200': + description: chat room found + '404': + description: chat room not found +get: + tags: + - chats + summary: get a chat room + description: This operation retrieves a chat room's data including users and messages + parameters: + - in: path + name: roomId + schema: + type: number + required: true + description: a valid chat room id + example: 1 + responses: + '200': + description: Chat room successfully retrieved + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../components/schemas/Status.yaml#/Status + response: + $ref: ../../components/schemas/Chats.yaml#/RoomObjectFull +post: + tags: + - chats + summary: send a chat message + description: This operation sends a chat message to a chat room + parameters: + - in: path + name: roomId + schema: + type: number + required: true + description: a valid chat room id + example: 1 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + message: + type: string + example: This is a test message + required: + - message + responses: + '200': + description: message successfully sent + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../components/schemas/Status.yaml#/Status + response: + allOf: + - $ref: ../../components/schemas/Chats.yaml#/MessageObject + - type: object + properties: + self: + type: number + description: Whether or not the message was sent by the calling user (which if you're using this route, will always be 1) + newSet: + type: boolean + description: Whether the message is considered part of a new "set" of messages. It is used in the frontend UI for explicitly denoting that a time gap existed between messages. + cleanedContent: + type: string + mid: + type: number +put: + tags: + - chats + summary: rename a chat room + description: This operation renames a chat room. + parameters: + - in: path + name: roomId + schema: + type: number + required: true + description: a valid room id + example: 1 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: the new name of the room + example: 'casper the friendly room' + responses: + '200': + description: Chat room renamed + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../components/schemas/Status.yaml#/Status + response: $ref: ../../components/schemas/Chats.yaml#/RoomObjectFull \ No newline at end of file diff --git a/public/openapi/write/chats/roomId/messages.yaml b/public/openapi/write/chats/roomId/messages.yaml index ee981a8..0039db3 100644 --- a/public/openapi/write/chats/roomId/messages.yaml +++ b/public/openapi/write/chats/roomId/messages.yaml @@ -1,54 +1,54 @@ -get: - tags: - - chats - summary: get chat room messages - description: This operation retrieves the messages in a chat room, with pagination options accepted - parameters: - - in: path - name: roomId - schema: - type: number - required: true - description: a valid chat room id - example: 1 - - in: query - name: uid - schema: - type: number - description: a valid user id - example: 1 - - in: query - name: start - schema: - type: number - description: At which chat message index to start returning messages from - example: 0 - responses: - '200': - description: Messages successfully retrieved - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object - properties: - messages: - type: array - items: - allOf: - - $ref: ../../../components/schemas/Chats.yaml#/MessageObject - - type: object - description: Optional properties that may or may not be present (except for `messageId`, which is always present, and is only here as a hack to pass validation) - properties: - messageId: - type: number - index: - type: number - isOwner: - type: boolean - required: +get: + tags: + - chats + summary: get chat room messages + description: This operation retrieves the messages in a chat room, with pagination options accepted + parameters: + - in: path + name: roomId + schema: + type: number + required: true + description: a valid chat room id + example: 1 + - in: query + name: uid + schema: + type: number + description: a valid user id + example: 1 + - in: query + name: start + schema: + type: number + description: At which chat message index to start returning messages from + example: 0 + responses: + '200': + description: Messages successfully retrieved + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: + messages: + type: array + items: + allOf: + - $ref: ../../../components/schemas/Chats.yaml#/MessageObject + - type: object + description: Optional properties that may or may not be present (except for `messageId`, which is always present, and is only here as a hack to pass validation) + properties: + messageId: + type: number + index: + type: number + isOwner: + type: boolean + required: - messageId \ No newline at end of file diff --git a/public/openapi/write/chats/roomId/messages/mid.yaml b/public/openapi/write/chats/roomId/messages/mid.yaml index 5053f15..0c72881 100644 --- a/public/openapi/write/chats/roomId/messages/mid.yaml +++ b/public/openapi/write/chats/roomId/messages/mid.yaml @@ -1,141 +1,141 @@ -get: - tags: - - chats - summary: get a chat message - description: This operation retrieves a single chat room message, by its id - parameters: - - in: path - name: roomId - schema: - type: number - required: true - description: a valid chat room id - example: 1 - - in: path - name: mid - schema: - type: number - required: true - description: a valid message id - example: 1 - responses: - '200': - description: Message successfully retrieved - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../../components/schemas/Status.yaml#/Status - response: - $ref: ../../../../components/schemas/Chats.yaml#/MessageObject -put: - tags: - - chats - summary: edit a chat message - description: This operation edits a chat message. - parameters: - - in: path - name: roomId - schema: - type: number - required: true - description: a valid chat room id - example: 1 - - in: path - name: mid - schema: - type: number - required: true - description: a valid message id - example: 5 - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - message: - type: string - description: message content - example: 'edited message' - responses: - '200': - description: Message successfully edited - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../../components/schemas/Status.yaml#/Status - response: - $ref: ../../../../components/schemas/Chats.yaml#/MessageObject -delete: - tags: - - chats - summary: delete a chat message - description: This operation deletes a chat message - parameters: - - in: path - name: roomId - schema: - type: number - required: true - description: a valid chat room id - example: 1 - - in: path - name: mid - schema: - type: number - required: true - description: a valid message id - example: 5 - responses: - '200': - description: Message successfully deleted - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../../components/schemas/Status.yaml#/Status - response: - type: object - properties: {} -post: - tags: - - chats - summary: restore a chat message - description: This operation restores a delete chat message - parameters: - - in: path - name: roomId - schema: - type: number - required: true - description: a valid chat room id - example: 1 - - in: path - name: mid - schema: - type: number - required: true - description: a valid message id - example: 5 - responses: - '200': - description: message successfully restored - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../../components/schemas/Status.yaml#/Status - response: - type: object +get: + tags: + - chats + summary: get a chat message + description: This operation retrieves a single chat room message, by its id + parameters: + - in: path + name: roomId + schema: + type: number + required: true + description: a valid chat room id + example: 1 + - in: path + name: mid + schema: + type: number + required: true + description: a valid message id + example: 1 + responses: + '200': + description: Message successfully retrieved + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../components/schemas/Status.yaml#/Status + response: + $ref: ../../../../components/schemas/Chats.yaml#/MessageObject +put: + tags: + - chats + summary: edit a chat message + description: This operation edits a chat message. + parameters: + - in: path + name: roomId + schema: + type: number + required: true + description: a valid chat room id + example: 1 + - in: path + name: mid + schema: + type: number + required: true + description: a valid message id + example: 5 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + message: + type: string + description: message content + example: 'edited message' + responses: + '200': + description: Message successfully edited + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../components/schemas/Status.yaml#/Status + response: + $ref: ../../../../components/schemas/Chats.yaml#/MessageObject +delete: + tags: + - chats + summary: delete a chat message + description: This operation deletes a chat message + parameters: + - in: path + name: roomId + schema: + type: number + required: true + description: a valid chat room id + example: 1 + - in: path + name: mid + schema: + type: number + required: true + description: a valid message id + example: 5 + responses: + '200': + description: Message successfully deleted + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: {} +post: + tags: + - chats + summary: restore a chat message + description: This operation restores a delete chat message + parameters: + - in: path + name: roomId + schema: + type: number + required: true + description: a valid chat room id + example: 1 + - in: path + name: mid + schema: + type: number + required: true + description: a valid message id + example: 5 + responses: + '200': + description: message successfully restored + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../components/schemas/Status.yaml#/Status + response: + type: object properties: {} \ No newline at end of file diff --git a/public/openapi/write/chats/roomId/users.yaml b/public/openapi/write/chats/roomId/users.yaml index c963665..610a05e 100644 --- a/public/openapi/write/chats/roomId/users.yaml +++ b/public/openapi/write/chats/roomId/users.yaml @@ -1,103 +1,103 @@ -get: - tags: - - chats - summary: get chat room users - description: This operation retrieves the users in a chat room message - parameters: - - in: path - name: roomId - schema: - type: number - required: true - description: a valid chat room id - example: 1 - responses: - '200': - description: Users successfully retrieved - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - $ref: ../../../components/schemas/Chats.yaml#/RoomUserList -post: - tags: - - chats - summary: add users to chat room - description: This operation invites users to a chat room - parameters: - - in: path - name: roomId - schema: - type: number - required: true - description: a valid chat room id - example: 1 - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - uids: - type: array - description: A list of valid uids - example: [2, 4] - items: - type: number - description: A valid uid - responses: - '200': - description: users successfully invited to chat room - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - $ref: ../../../components/schemas/Chats.yaml#/RoomUserList -delete: - tags: - - chats - summary: leave/remove users from chat room - description: This operation removes (kicks) multiple user from a chat room, or leaves the chat room if the requested user is the same as the calling user. - parameters: - - in: path - name: roomId - schema: - type: number - required: true - description: a valid chat room id - example: 1 - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - uids: - type: array - description: A list of valid uids - example: [2] - items: - type: number - description: A valid uid - responses: - '200': - description: users successfully removed from chat room - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: +get: + tags: + - chats + summary: get chat room users + description: This operation retrieves the users in a chat room message + parameters: + - in: path + name: roomId + schema: + type: number + required: true + description: a valid chat room id + example: 1 + responses: + '200': + description: Users successfully retrieved + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + $ref: ../../../components/schemas/Chats.yaml#/RoomUserList +post: + tags: + - chats + summary: add users to chat room + description: This operation invites users to a chat room + parameters: + - in: path + name: roomId + schema: + type: number + required: true + description: a valid chat room id + example: 1 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + uids: + type: array + description: A list of valid uids + example: [2, 4] + items: + type: number + description: A valid uid + responses: + '200': + description: users successfully invited to chat room + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + $ref: ../../../components/schemas/Chats.yaml#/RoomUserList +delete: + tags: + - chats + summary: leave/remove users from chat room + description: This operation removes (kicks) multiple user from a chat room, or leaves the chat room if the requested user is the same as the calling user. + parameters: + - in: path + name: roomId + schema: + type: number + required: true + description: a valid chat room id + example: 1 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + uids: + type: array + description: A list of valid uids + example: [2] + items: + type: number + description: A valid uid + responses: + '200': + description: users successfully removed from chat room + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: $ref: ../../../components/schemas/Chats.yaml#/RoomUserList \ No newline at end of file diff --git a/public/openapi/write/chats/roomId/users/uid.yaml b/public/openapi/write/chats/roomId/users/uid.yaml index 5bd028e..a7a7d29 100644 --- a/public/openapi/write/chats/roomId/users/uid.yaml +++ b/public/openapi/write/chats/roomId/users/uid.yaml @@ -1,32 +1,32 @@ -delete: - tags: - - chats - summary: leave/remove one user from chat room - description: This operation removes (kicks) a single user from a chat room, or leaves the chat room if the requested user is the same as the calling user. - parameters: - - in: path - name: roomId - schema: - type: number - required: true - description: a valid chat room id - example: 1 - - in: path - name: uid - schema: - type: number - required: true - description: a valid user id - example: 4 - responses: - '200': - description: user successfully removed from chat room - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../../components/schemas/Status.yaml#/Status - response: +delete: + tags: + - chats + summary: leave/remove one user from chat room + description: This operation removes (kicks) a single user from a chat room, or leaves the chat room if the requested user is the same as the calling user. + parameters: + - in: path + name: roomId + schema: + type: number + required: true + description: a valid chat room id + example: 1 + - in: path + name: uid + schema: + type: number + required: true + description: a valid user id + example: 4 + responses: + '200': + description: user successfully removed from chat room + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../components/schemas/Status.yaml#/Status + response: $ref: ../../../../components/schemas/Chats.yaml#/RoomUserList \ No newline at end of file diff --git a/public/openapi/write/files.yaml b/public/openapi/write/files.yaml index 23c497d..518d309 100644 --- a/public/openapi/write/files.yaml +++ b/public/openapi/write/files.yaml @@ -1,31 +1,31 @@ -delete: - tags: - - files - summary: delete uploaded file - description: This operation deletes a file uploaded to NodeBB - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - path: - type: string - description: Path to the file (relative to the configured `upload_path`) - example: files/test.txt - required: - - path - responses: - '200': - description: File deleted - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../components/schemas/Status.yaml#/Status - response: - type: object +delete: + tags: + - files + summary: delete uploaded file + description: This operation deletes a file uploaded to NodeBB + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + path: + type: string + description: Path to the file (relative to the configured `upload_path`) + example: files/test.txt + required: + - path + responses: + '200': + description: File deleted + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../components/schemas/Status.yaml#/Status + response: + type: object properties: {} \ No newline at end of file diff --git a/public/openapi/write/flags.yaml b/public/openapi/write/flags.yaml index 88d63dc..9d9a2b4 100644 --- a/public/openapi/write/flags.yaml +++ b/public/openapi/write/flags.yaml @@ -1,38 +1,38 @@ -post: - tags: - - flags - summary: create a flag - description: This operation creates a new flag (with a report). If a flag already exists for a given user or post, a report will be appended to the existing flag. The response will change depending on the privilege level of the calling uid. Privileged users (moderators and up) will see the full flag details, whereas regular users will see an empty (but successful) response. - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - type: - type: string - enum: ['post', 'user'] - example: 'post' - id: - type: number - example: 2 - reason: - type: string - example: 'Spam' - required: - - type - - id - - reason - responses: - '200': - description: flag successfully created - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../components/schemas/Status.yaml#/Status - response: +post: + tags: + - flags + summary: create a flag + description: This operation creates a new flag (with a report). If a flag already exists for a given user or post, a report will be appended to the existing flag. The response will change depending on the privilege level of the calling uid. Privileged users (moderators and up) will see the full flag details, whereas regular users will see an empty (but successful) response. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + type: + type: string + enum: ['post', 'user'] + example: 'post' + id: + type: number + example: 2 + reason: + type: string + example: 'Spam' + required: + - type + - id + - reason + responses: + '200': + description: flag successfully created + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../components/schemas/Status.yaml#/Status + response: $ref: ../components/schemas/FlagObject.yaml#/FlagObject \ No newline at end of file diff --git a/public/openapi/write/flags/flagId.yaml b/public/openapi/write/flags/flagId.yaml index 7f30e92..c7b6d20 100644 --- a/public/openapi/write/flags/flagId.yaml +++ b/public/openapi/write/flags/flagId.yaml @@ -1,95 +1,95 @@ -get: - tags: - - flags - summary: get a flag - description: This operation retrieve a flag's details. It is only available to privileged users (that is, moderators, global moderators, and administrators). - parameters: - - in: path - name: flagId - schema: - type: number - required: true - description: a valid flag id - example: 1 - responses: - '200': - description: flag successfully retrieved - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../components/schemas/Status.yaml#/Status - response: - $ref: ../../components/schemas/FlagObject.yaml#/FlagObject -put: - tags: - - flags - summary: update a flag - description: This operation updates a flag's details. It is only available to privileged users (that is, moderators, global moderators, and administrators). - parameters: - - in: path - name: flagId - schema: - type: number - required: true - description: a valid flag id - example: 1 - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - datetime: - type: number - example: 1625859990035 - state: - type: string - enum: ['open', 'wip', 'resolved', 'rejected'] - example: 'wip' - assignee: - type: number - example: 1 - responses: - '200': - description: flag successfully updated - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../components/schemas/Status.yaml#/Status - response: - $ref: ../../components/schemas/FlagObject.yaml#/FlagHistoryObject -delete: - tags: - - flags - summary: delete a flag - description: | - This operation deletes a flag. Unlike posts and topics, flags are not marked as deleted. - This deletion endpoint will purge the flag and all of its associated content from the database. - parameters: - - in: path - name: flagId - schema: - type: number - required: true - description: a valid flag id - example: 1 - responses: - '200': - description: Flag successfully deleted - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../components/schemas/Status.yaml#/Status - response: - type: object +get: + tags: + - flags + summary: get a flag + description: This operation retrieve a flag's details. It is only available to privileged users (that is, moderators, global moderators, and administrators). + parameters: + - in: path + name: flagId + schema: + type: number + required: true + description: a valid flag id + example: 1 + responses: + '200': + description: flag successfully retrieved + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../components/schemas/Status.yaml#/Status + response: + $ref: ../../components/schemas/FlagObject.yaml#/FlagObject +put: + tags: + - flags + summary: update a flag + description: This operation updates a flag's details. It is only available to privileged users (that is, moderators, global moderators, and administrators). + parameters: + - in: path + name: flagId + schema: + type: number + required: true + description: a valid flag id + example: 1 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + datetime: + type: number + example: 1625859990035 + state: + type: string + enum: ['open', 'wip', 'resolved', 'rejected'] + example: 'wip' + assignee: + type: number + example: 1 + responses: + '200': + description: flag successfully updated + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../components/schemas/Status.yaml#/Status + response: + $ref: ../../components/schemas/FlagObject.yaml#/FlagHistoryObject +delete: + tags: + - flags + summary: delete a flag + description: | + This operation deletes a flag. Unlike posts and topics, flags are not marked as deleted. + This deletion endpoint will purge the flag and all of its associated content from the database. + parameters: + - in: path + name: flagId + schema: + type: number + required: true + description: a valid flag id + example: 1 + responses: + '200': + description: Flag successfully deleted + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../components/schemas/Status.yaml#/Status + response: + type: object properties: {} \ No newline at end of file diff --git a/public/openapi/write/flags/flagId/notes.yaml b/public/openapi/write/flags/flagId/notes.yaml index 1a52881..f30c966 100644 --- a/public/openapi/write/flags/flagId/notes.yaml +++ b/public/openapi/write/flags/flagId/notes.yaml @@ -1,42 +1,42 @@ -post: - tags: - - flags - summary: append a flag note - description: This operation append a shared note for a given flag. It is only available to privileged users (that is, moderators, global moderators, and administrators). - parameters: - - in: path - name: flagId - schema: - type: number - required: true - description: a valid flag id - example: 2 - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - note: - type: string - example: 'test note' - datetime: - type: number - example: 1626446956652 - required: - - note - responses: - '200': - description: flag note successfully added or updated - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - allOf: - - $ref: ../../../components/schemas/FlagObject.yaml#/FlagNotesObject +post: + tags: + - flags + summary: append a flag note + description: This operation append a shared note for a given flag. It is only available to privileged users (that is, moderators, global moderators, and administrators). + parameters: + - in: path + name: flagId + schema: + type: number + required: true + description: a valid flag id + example: 2 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + note: + type: string + example: 'test note' + datetime: + type: number + example: 1626446956652 + required: + - note + responses: + '200': + description: flag note successfully added or updated + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + allOf: + - $ref: ../../../components/schemas/FlagObject.yaml#/FlagNotesObject - $ref: ../../../components/schemas/FlagObject.yaml#/FlagHistoryObject \ No newline at end of file diff --git a/public/openapi/write/flags/flagId/notes/datetime.yaml b/public/openapi/write/flags/flagId/notes/datetime.yaml index bfd296b..63e1d0a 100644 --- a/public/openapi/write/flags/flagId/notes/datetime.yaml +++ b/public/openapi/write/flags/flagId/notes/datetime.yaml @@ -1,34 +1,34 @@ -delete: - tags: - - flags - summary: delete a flag note - description: This operation deletes a shared note for a given flag. It is only available to privileged users (that is, moderators, global moderators, and administrators). - parameters: - - in: path - name: flagId - schema: - type: number - required: true - description: a valid flag id - example: 2 - - in: path - name: datetime - schema: - type: number - required: true - description: A valid UNIX timestamp - example: 1626446956652 - responses: - '200': - description: Flag note deleted - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../../components/schemas/Status.yaml#/Status - response: - allOf: - - $ref: ../../../../components/schemas/FlagObject.yaml#/FlagNotesObject +delete: + tags: + - flags + summary: delete a flag note + description: This operation deletes a shared note for a given flag. It is only available to privileged users (that is, moderators, global moderators, and administrators). + parameters: + - in: path + name: flagId + schema: + type: number + required: true + description: a valid flag id + example: 2 + - in: path + name: datetime + schema: + type: number + required: true + description: A valid UNIX timestamp + example: 1626446956652 + responses: + '200': + description: Flag note deleted + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../components/schemas/Status.yaml#/Status + response: + allOf: + - $ref: ../../../../components/schemas/FlagObject.yaml#/FlagNotesObject - $ref: ../../../../components/schemas/FlagObject.yaml#/FlagHistoryObject \ No newline at end of file diff --git a/public/openapi/write/groups.yaml b/public/openapi/write/groups.yaml index 8d325c7..bc6ed3e 100644 --- a/public/openapi/write/groups.yaml +++ b/public/openapi/write/groups.yaml @@ -1,58 +1,58 @@ -post: - tags: - - groups - summary: create a new group - description: This operation creates a new group - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - name: - type: string - example: 'My Test Group' - timestamp: - type: number - disableJoinRequests: - type: number - enum: [0, 1] - disableLeave: - type: number - enum: [0, 1] - hidden: - type: number - enum: [0, 1] - example: 1 - ownerUid: - type: number - private: - type: number - enum: [0, 1] - description: - type: string - userTitleEnabled: - type: number - enum: [0, 1] - createtime: - type: number - memberPostCids: - type: array - items: - type: number - example: [1, 2, 3] - required: - - name - responses: - '200': - description: group successfully created - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../components/schemas/Status.yaml#/Status - response: +post: + tags: + - groups + summary: create a new group + description: This operation creates a new group + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + name: + type: string + example: 'My Test Group' + timestamp: + type: number + disableJoinRequests: + type: number + enum: [0, 1] + disableLeave: + type: number + enum: [0, 1] + hidden: + type: number + enum: [0, 1] + example: 1 + ownerUid: + type: number + private: + type: number + enum: [0, 1] + description: + type: string + userTitleEnabled: + type: number + enum: [0, 1] + createtime: + type: number + memberPostCids: + type: array + items: + type: number + example: [1, 2, 3] + required: + - name + responses: + '200': + description: group successfully created + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../components/schemas/Status.yaml#/Status + response: $ref: ../components/schemas/GroupObject.yaml#/GroupDataObject \ No newline at end of file diff --git a/public/openapi/write/groups/slug.yaml b/public/openapi/write/groups/slug.yaml index 4959da9..681623b 100644 --- a/public/openapi/write/groups/slug.yaml +++ b/public/openapi/write/groups/slug.yaml @@ -1,80 +1,80 @@ -head: - tags: - - groups - summary: check if a group exists - parameters: - - in: path - name: slug - schema: - type: string - required: true - description: group slug (that also acts as its identifier) to check - example: my-test-group - responses: - '200': - description: group found - '404': - description: group not found -put: - tags: - - groups - summary: update group data - parameters: - - in: path - name: slug - schema: - type: string - required: true - description: slug of the group you wish to update - example: my-test-group - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - icon: - type: string - example: fa-times - additionalProperties: - description: An object of group properties you wish to update - example: - responses: - '200': - description: group successfully updated - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../components/schemas/Status.yaml#/Status - response: - $ref: ../../components/schemas/GroupObject.yaml#/GroupDataObject -delete: - tags: - - groups - summary: Delete an existing group - description: This operation deletes an existing group, all members within this group will cease to be members after the group is deleted. - parameters: - - in: path - name: slug - schema: - type: string - required: true - description: slug of the group you wish to delete - example: my-test-group - responses: - '200': - description: group successfully deleted - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../components/schemas/Status.yaml#/Status - response: - type: object +head: + tags: + - groups + summary: check if a group exists + parameters: + - in: path + name: slug + schema: + type: string + required: true + description: group slug (that also acts as its identifier) to check + example: my-test-group + responses: + '200': + description: group found + '404': + description: group not found +put: + tags: + - groups + summary: update group data + parameters: + - in: path + name: slug + schema: + type: string + required: true + description: slug of the group you wish to update + example: my-test-group + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + icon: + type: string + example: fa-times + additionalProperties: + description: An object of group properties you wish to update + example: + responses: + '200': + description: group successfully updated + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../components/schemas/Status.yaml#/Status + response: + $ref: ../../components/schemas/GroupObject.yaml#/GroupDataObject +delete: + tags: + - groups + summary: Delete an existing group + description: This operation deletes an existing group, all members within this group will cease to be members after the group is deleted. + parameters: + - in: path + name: slug + schema: + type: string + required: true + description: slug of the group you wish to delete + example: my-test-group + responses: + '200': + description: group successfully deleted + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../components/schemas/Status.yaml#/Status + response: + type: object properties: {} \ No newline at end of file diff --git a/public/openapi/write/groups/slug/membership/uid.yaml b/public/openapi/write/groups/slug/membership/uid.yaml index 9a5fd7d..04551b5 100644 --- a/public/openapi/write/groups/slug/membership/uid.yaml +++ b/public/openapi/write/groups/slug/membership/uid.yaml @@ -1,66 +1,66 @@ -put: - tags: - - groups - summary: join a group - description: This operation joins an existing group, or causes another user to join a group. If the group is private and you are not an administrator, this method will cause that user to request membership, instead. For user _invitations_, you'll want to call `PUT /groups/{slug}/invites/{uid}`. - parameters: - - in: path - name: slug - schema: - type: string - required: true - description: slug of the group you would like to join - example: test-group - - in: path - name: uid - schema: - type: number - required: true - description: uid of the user to join the group - example: 1 - responses: - '200': - description: group successfully joined, or membership requested - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../../components/schemas/Status.yaml#/Status - response: - type: object - properties: {} -delete: - tags: - - groups - summary: leave a group - description: This operation leaves a group. - parameters: - - in: path - name: slug - schema: - type: string - required: true - description: slug of the group you would like to leave - example: test-group - - in: path - name: uid - schema: - type: number - required: true - description: uid of the user to leave the group - example: 1 - responses: - '200': - description: group successfully left - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../../components/schemas/Status.yaml#/Status - response: - type: object +put: + tags: + - groups + summary: join a group + description: This operation joins an existing group, or causes another user to join a group. If the group is private and you are not an administrator, this method will cause that user to request membership, instead. For user _invitations_, you'll want to call `PUT /groups/{slug}/invites/{uid}`. + parameters: + - in: path + name: slug + schema: + type: string + required: true + description: slug of the group you would like to join + example: test-group + - in: path + name: uid + schema: + type: number + required: true + description: uid of the user to join the group + example: 1 + responses: + '200': + description: group successfully joined, or membership requested + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: {} +delete: + tags: + - groups + summary: leave a group + description: This operation leaves a group. + parameters: + - in: path + name: slug + schema: + type: string + required: true + description: slug of the group you would like to leave + example: test-group + - in: path + name: uid + schema: + type: number + required: true + description: uid of the user to leave the group + example: 1 + responses: + '200': + description: group successfully left + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../components/schemas/Status.yaml#/Status + response: + type: object properties: {} \ No newline at end of file diff --git a/public/openapi/write/groups/slug/ownership/uid.yaml b/public/openapi/write/groups/slug/ownership/uid.yaml index ba8e165..8e12413 100644 --- a/public/openapi/write/groups/slug/ownership/uid.yaml +++ b/public/openapi/write/groups/slug/ownership/uid.yaml @@ -1,66 +1,66 @@ -put: - tags: - - groups - summary: grant group ownership - description: This operation grants ownership privilege to a user. - parameters: - - in: path - name: slug - schema: - type: string - required: true - description: slug of the group you would like to grant ownership - example: test-group - - in: path - name: uid - schema: - type: number - required: true - description: uid of the user to grant ownership - example: 1 - responses: - '200': - description: ownership successfully granted - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../../components/schemas/Status.yaml#/Status - response: - type: object - properties: {} -delete: - tags: - - groups - summary: rescind group ownership - description: 'This operation rescinds ownership privilege from a user. **Note**: Every group needs at least one owner, so if you are attempting to remove the last owner of a group, this call will fail.' - parameters: - - in: path - name: slug - schema: - type: string - required: true - description: slug of the group you would like to rescind ownership - example: test-group - - in: path - name: uid - schema: - type: number - required: true - description: uid of the user to rescind ownership from - example: 2 - responses: - '200': - description: ownership successfully rescinded - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../../components/schemas/Status.yaml#/Status - response: - type: object +put: + tags: + - groups + summary: grant group ownership + description: This operation grants ownership privilege to a user. + parameters: + - in: path + name: slug + schema: + type: string + required: true + description: slug of the group you would like to grant ownership + example: test-group + - in: path + name: uid + schema: + type: number + required: true + description: uid of the user to grant ownership + example: 1 + responses: + '200': + description: ownership successfully granted + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: {} +delete: + tags: + - groups + summary: rescind group ownership + description: 'This operation rescinds ownership privilege from a user. **Note**: Every group needs at least one owner, so if you are attempting to remove the last owner of a group, this call will fail.' + parameters: + - in: path + name: slug + schema: + type: string + required: true + description: slug of the group you would like to rescind ownership + example: test-group + - in: path + name: uid + schema: + type: number + required: true + description: uid of the user to rescind ownership from + example: 2 + responses: + '200': + description: ownership successfully rescinded + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../components/schemas/Status.yaml#/Status + response: + type: object properties: {} \ No newline at end of file diff --git a/public/openapi/write/login.yaml b/public/openapi/write/login.yaml index 001cd5d..4fb9a20 100644 --- a/public/openapi/write/login.yaml +++ b/public/openapi/write/login.yaml @@ -1,32 +1,32 @@ -post: - tags: - - utilities - summary: verify login credentials - description: | - This route accepts a username/password or email/password pair (dependent on forum settings), returning a standard user object if credentials are validated successfully. - This route also initializes a standard login session and returns a valid cookie that can be used in subsequent API calls as though it were a browser session. - **Note**: Cookie-based sessions require a CSRF token for non-`GET` routes. - requestBody: - content: - application/json: - schema: - type: object - properties: - username: - type: string - example: admin - password: - type: string - example: '123456' - responses: - '200': - description: credentials successfully validated - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../components/schemas/Status.yaml#/Status - response: +post: + tags: + - utilities + summary: verify login credentials + description: | + This route accepts a username/password or email/password pair (dependent on forum settings), returning a standard user object if credentials are validated successfully. + This route also initializes a standard login session and returns a valid cookie that can be used in subsequent API calls as though it were a browser session. + **Note**: Cookie-based sessions require a CSRF token for non-`GET` routes. + requestBody: + content: + application/json: + schema: + type: object + properties: + username: + type: string + example: admin + password: + type: string + example: '123456' + responses: + '200': + description: credentials successfully validated + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../components/schemas/Status.yaml#/Status + response: $ref: ../components/schemas/UserObject.yaml#/UserObjectSlim \ No newline at end of file diff --git a/public/openapi/write/ping.yaml b/public/openapi/write/ping.yaml index 67d3dd6..318bee9 100644 --- a/public/openapi/write/ping.yaml +++ b/public/openapi/write/ping.yaml @@ -1,57 +1,57 @@ -get: - tags: - - utilities - summary: test route - description: This route responds with a simple `200 OK` if the Write API is enabled. Since there is no way of disabling the Write API, this will always return a success. However, it is also a good way to ensure the instance you are calling supports v3 of the Write API. - responses: - '200': - description: pingback - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../components/schemas/Status.yaml#/Status - response: - type: object - properties: - pong: - type: boolean - example: true -post: - tags: - - utilities - summary: test route - description: | - Requires authentication. This route bounces back the data payload sent to it, and the uid the token resolved to. - - It is also a good way to ensure the instance you are calling supports v3 of the Write API. Also, as it requires authentication, it is a good way to check if the passed-in token is a valid token. - requestBody: - required: false - content: - application/json: - schema: - type: object - properties: {} - additionalProperties: {} - responses: - '200': - description: pingback - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../components/schemas/Status.yaml#/Status - response: - type: object - properties: - uid: - type: number - description: The `uid` that the passed-in token resolves to. - received: - type: object - description: A free-form object containing the data that was passed to it. It reflects the data payload as the Write API understands it, and it may be useful to call this route to see how a request body is parsed, if at all. +get: + tags: + - utilities + summary: test route + description: This route responds with a simple `200 OK` if the Write API is enabled. Since there is no way of disabling the Write API, this will always return a success. However, it is also a good way to ensure the instance you are calling supports v3 of the Write API. + responses: + '200': + description: pingback + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../components/schemas/Status.yaml#/Status + response: + type: object + properties: + pong: + type: boolean + example: true +post: + tags: + - utilities + summary: test route + description: | + Requires authentication. This route bounces back the data payload sent to it, and the uid the token resolved to. + + It is also a good way to ensure the instance you are calling supports v3 of the Write API. Also, as it requires authentication, it is a good way to check if the passed-in token is a valid token. + requestBody: + required: false + content: + application/json: + schema: + type: object + properties: {} + additionalProperties: {} + responses: + '200': + description: pingback + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../components/schemas/Status.yaml#/Status + response: + type: object + properties: + uid: + type: number + description: The `uid` that the passed-in token resolves to. + received: + type: object + description: A free-form object containing the data that was passed to it. It reflects the data payload as the Write API understands it, and it may be useful to call this route to see how a request body is parsed, if at all. additionalProperties: {} \ No newline at end of file diff --git a/public/openapi/write/posts/pid.yaml b/public/openapi/write/posts/pid.yaml index 593a7ac..3743ab2 100644 --- a/public/openapi/write/posts/pid.yaml +++ b/public/openapi/write/posts/pid.yaml @@ -1,141 +1,141 @@ -get: - tags: - - posts - summary: get a post - description: This operation retrieves a post's data - parameters: - - in: path - name: pid - schema: - type: string - required: true - description: a valid post id - example: 1 - responses: - '200': - description: Post successfully retrieved - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../components/schemas/Status.yaml#/Status - response: - type: object - properties: - pid: - type: number - uid: - type: number - description: A user identifier - tid: - type: number - description: A topic identifier - content: - type: string - timestamp: - type: number - flagId: - type: number - deleted: - type: number - upvotes: - type: number - downvotes: - type: number - deleterUid: - type: number - edited: - type: number - replies: - type: number - bookmarks: - type: number - votes: - type: number - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - editedISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - upvoted: - type: boolean - downvoted: - type: boolean -put: - tags: - - posts - summary: edit a post - description: This operation edits a post - parameters: - - in: path - name: pid - schema: - type: string - required: true - description: a valid post id - example: 1 - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - content: - type: string - description: New post content - example: New post content - title: - type: string - description: Topic title, only accepted for main posts - example: New title - required: - - content - responses: - '200': - description: Post successfully edited - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../components/schemas/Status.yaml#/Status - response: - allOf: - - $ref: ../../components/schemas/PostObject.yaml#/PostObject - - type: object - properties: - edited: - type: boolean - deleterUid: - type: number -delete: - tags: - - posts - summary: purge a post - description: This operation purges a post. - parameters: - - in: path - name: pid - schema: - type: string - required: true - description: a valid post id - example: 1 - responses: - '200': - description: Post successfully purged - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../components/schemas/Status.yaml#/Status - response: - type: object +get: + tags: + - posts + summary: get a post + description: This operation retrieves a post's data + parameters: + - in: path + name: pid + schema: + type: string + required: true + description: a valid post id + example: 1 + responses: + '200': + description: Post successfully retrieved + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../components/schemas/Status.yaml#/Status + response: + type: object + properties: + pid: + type: number + uid: + type: number + description: A user identifier + tid: + type: number + description: A topic identifier + content: + type: string + timestamp: + type: number + flagId: + type: number + deleted: + type: number + upvotes: + type: number + downvotes: + type: number + deleterUid: + type: number + edited: + type: number + replies: + type: number + bookmarks: + type: number + votes: + type: number + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + editedISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + upvoted: + type: boolean + downvoted: + type: boolean +put: + tags: + - posts + summary: edit a post + description: This operation edits a post + parameters: + - in: path + name: pid + schema: + type: string + required: true + description: a valid post id + example: 1 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + content: + type: string + description: New post content + example: New post content + title: + type: string + description: Topic title, only accepted for main posts + example: New title + required: + - content + responses: + '200': + description: Post successfully edited + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../components/schemas/Status.yaml#/Status + response: + allOf: + - $ref: ../../components/schemas/PostObject.yaml#/PostObject + - type: object + properties: + edited: + type: boolean + deleterUid: + type: number +delete: + tags: + - posts + summary: purge a post + description: This operation purges a post. + parameters: + - in: path + name: pid + schema: + type: string + required: true + description: a valid post id + example: 1 + responses: + '200': + description: Post successfully purged + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../components/schemas/Status.yaml#/Status + response: + type: object properties: {} \ No newline at end of file diff --git a/public/openapi/write/posts/pid/bookmark.yaml b/public/openapi/write/posts/pid/bookmark.yaml index 2ebce0e..40501c2 100644 --- a/public/openapi/write/posts/pid/bookmark.yaml +++ b/public/openapi/write/posts/pid/bookmark.yaml @@ -1,52 +1,52 @@ -put: - tags: - - posts - summary: bookmark a post - description: This operation bookmarks a post. - parameters: - - in: path - name: pid - schema: - type: string - required: true - description: a valid post id - example: 2 - responses: - '200': - description: Post successfully bookmarked - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object - properties: {} -delete: - tags: - - posts - summary: unbookmark a post - description: This operation unbookmarks a post. - parameters: - - in: path - name: pid - schema: - type: string - required: true - description: a valid post id - example: 2 - responses: - '200': - description: Post successfully unbookmarked - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object +put: + tags: + - posts + summary: bookmark a post + description: This operation bookmarks a post. + parameters: + - in: path + name: pid + schema: + type: string + required: true + description: a valid post id + example: 2 + responses: + '200': + description: Post successfully bookmarked + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: {} +delete: + tags: + - posts + summary: unbookmark a post + description: This operation unbookmarks a post. + parameters: + - in: path + name: pid + schema: + type: string + required: true + description: a valid post id + example: 2 + responses: + '200': + description: Post successfully unbookmarked + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object properties: {} \ No newline at end of file diff --git a/public/openapi/write/posts/pid/diffs.yaml b/public/openapi/write/posts/pid/diffs.yaml index ea76f7e..455888c 100644 --- a/public/openapi/write/posts/pid/diffs.yaml +++ b/public/openapi/write/posts/pid/diffs.yaml @@ -1,43 +1,43 @@ -get: - tags: - - posts - summary: get post edit history - description: This operation retrieves a post's edit history - parameters: - - in: path - name: pid - schema: - type: string - required: true - description: a valid post id - example: 2 - responses: - '200': - description: Post history successfully retrieved. - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object - properties: - timestamps: - type: array - items: - type: string - revisions: - type: array - items: - type: object - properties: - timestamp: - type: string - username: - type: string - editable: - type: boolean - deletable: - type: boolean +get: + tags: + - posts + summary: get post edit history + description: This operation retrieves a post's edit history + parameters: + - in: path + name: pid + schema: + type: string + required: true + description: a valid post id + example: 2 + responses: + '200': + description: Post history successfully retrieved. + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: + timestamps: + type: array + items: + type: string + revisions: + type: array + items: + type: object + properties: + timestamp: + type: string + username: + type: string + editable: + type: boolean + deletable: + type: boolean diff --git a/public/openapi/write/posts/pid/diffs/since.yaml b/public/openapi/write/posts/pid/diffs/since.yaml index 8db8c6f..462931c 100644 --- a/public/openapi/write/posts/pid/diffs/since.yaml +++ b/public/openapi/write/posts/pid/diffs/since.yaml @@ -1,65 +1,65 @@ -get: - tags: - - posts - summary: get single post edit history - description: This operation retrieves a post's edit history - parameters: - - in: path - name: pid - schema: - type: string - required: true - description: a valid post id - example: 2 - - in: path - name: since - schema: - type: number - required: true - description: a valid UNIX timestamp - example: 0 - responses: - '200': - description: Post history successfully retrieved. - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../../components/schemas/Status.yaml#/Status - response: - $ref: ../../../../components/schemas/PostObject.yaml#/PostObject -put: - tags: - - posts - summary: revert a post - description: This operation reverts a post to an earlier version. The revert process will append a new history item to the post's edit history. - parameters: - - in: path - name: pid - schema: - type: string - required: true - description: a valid post id - example: 2 - - in: path - name: since - schema: - type: number - required: true - description: a valid UNIX timestamp - example: 0 - responses: - '200': - description: Post successfully reverted - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../../components/schemas/Status.yaml#/Status - response: - type: object +get: + tags: + - posts + summary: get single post edit history + description: This operation retrieves a post's edit history + parameters: + - in: path + name: pid + schema: + type: string + required: true + description: a valid post id + example: 2 + - in: path + name: since + schema: + type: number + required: true + description: a valid UNIX timestamp + example: 0 + responses: + '200': + description: Post history successfully retrieved. + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../components/schemas/Status.yaml#/Status + response: + $ref: ../../../../components/schemas/PostObject.yaml#/PostObject +put: + tags: + - posts + summary: revert a post + description: This operation reverts a post to an earlier version. The revert process will append a new history item to the post's edit history. + parameters: + - in: path + name: pid + schema: + type: string + required: true + description: a valid post id + example: 2 + - in: path + name: since + schema: + type: number + required: true + description: a valid UNIX timestamp + example: 0 + responses: + '200': + description: Post successfully reverted + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../components/schemas/Status.yaml#/Status + response: + type: object properties: {} \ No newline at end of file diff --git a/public/openapi/write/posts/pid/move.yaml b/public/openapi/write/posts/pid/move.yaml index 7198554..0a3e785 100644 --- a/public/openapi/write/posts/pid/move.yaml +++ b/public/openapi/write/posts/pid/move.yaml @@ -1,36 +1,36 @@ -put: - tags: - - posts - summary: move a post - description: This operation moves a post to a different topic. - parameters: - - in: path - name: pid - schema: - type: number - required: true - description: a valid post id - example: 5 - requestBody: - content: - application/json: - schema: - type: object - properties: - tid: - type: number - description: a valid topic id - example: 4 - responses: - '200': - description: Post successfully moved - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object +put: + tags: + - posts + summary: move a post + description: This operation moves a post to a different topic. + parameters: + - in: path + name: pid + schema: + type: number + required: true + description: a valid post id + example: 5 + requestBody: + content: + application/json: + schema: + type: object + properties: + tid: + type: number + description: a valid topic id + example: 4 + responses: + '200': + description: Post successfully moved + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object properties: {} \ No newline at end of file diff --git a/public/openapi/write/posts/pid/state.yaml b/public/openapi/write/posts/pid/state.yaml index 6403b74..9830f09 100644 --- a/public/openapi/write/posts/pid/state.yaml +++ b/public/openapi/write/posts/pid/state.yaml @@ -1,52 +1,52 @@ -delete: - tags: - - posts - summary: deletes a post - description: This operation soft deletes a post. - parameters: - - in: path - name: pid - schema: - type: string - required: true - description: a valid post id - example: 2 - responses: - '200': - description: Post successfully deleted - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object - properties: {} -put: - tags: - - posts - summary: restore a post - description: This operation restores a post. - parameters: - - in: path - name: pid - schema: - type: string - required: true - description: a valid post id - example: 2 - responses: - '200': - description: Topic successfully restored - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object +delete: + tags: + - posts + summary: deletes a post + description: This operation soft deletes a post. + parameters: + - in: path + name: pid + schema: + type: string + required: true + description: a valid post id + example: 2 + responses: + '200': + description: Post successfully deleted + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: {} +put: + tags: + - posts + summary: restore a post + description: This operation restores a post. + parameters: + - in: path + name: pid + schema: + type: string + required: true + description: a valid post id + example: 2 + responses: + '200': + description: Topic successfully restored + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object properties: {} \ No newline at end of file diff --git a/public/openapi/write/posts/pid/vote.yaml b/public/openapi/write/posts/pid/vote.yaml index 0cdb895..89fdb20 100644 --- a/public/openapi/write/posts/pid/vote.yaml +++ b/public/openapi/write/posts/pid/vote.yaml @@ -1,63 +1,63 @@ -put: - tags: - - posts - summary: vote on a post - description: This operation casts a vote on a post. - parameters: - - in: path - name: pid - schema: - type: string - required: true - description: a valid post id - example: 2 - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - delta: - type: number - description: Positive integer for upvote, negative integer for downvote (0 to unvote.) - example: 1 - responses: - '200': - description: Post successfully upvoted - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object - properties: {} -delete: - tags: - - posts - summary: unvote a post - description: This operation removes a pre-cast vote on a post. - parameters: - - in: path - name: pid - schema: - type: string - required: true - description: a valid post id - example: 2 - responses: - '200': - description: Post successfully unvoted - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object +put: + tags: + - posts + summary: vote on a post + description: This operation casts a vote on a post. + parameters: + - in: path + name: pid + schema: + type: string + required: true + description: a valid post id + example: 2 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + delta: + type: number + description: Positive integer for upvote, negative integer for downvote (0 to unvote.) + example: 1 + responses: + '200': + description: Post successfully upvoted + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: {} +delete: + tags: + - posts + summary: unvote a post + description: This operation removes a pre-cast vote on a post. + parameters: + - in: path + name: pid + schema: + type: string + required: true + description: a valid post id + example: 2 + responses: + '200': + description: Post successfully unvoted + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object properties: {} \ No newline at end of file diff --git a/public/openapi/write/topics.yaml b/public/openapi/write/topics.yaml index ba00cf0..7d7274d 100644 --- a/public/openapi/write/topics.yaml +++ b/public/openapi/write/topics.yaml @@ -1,46 +1,46 @@ -post: - tags: - - topics - summary: create a new topic - description: This operation creates a new topic with a post. Topic creation without a post is not allowed via the Write API as it is an internal-only method. - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - cid: - type: number - example: 1 - title: - type: string - example: Test topic - content: - type: string - example: This is the test topic's content - tags: - type: array - items: - type: string - example: [test, topic] - required: - - cid - - title - - content - responses: - '200': - description: topic successfully created - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../components/schemas/Status.yaml#/Status - response: - allOf: - - $ref: ../components/schemas/TopicObject.yaml#/TopicObject - - type: object - properties: +post: + tags: + - topics + summary: create a new topic + description: This operation creates a new topic with a post. Topic creation without a post is not allowed via the Write API as it is an internal-only method. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + cid: + type: number + example: 1 + title: + type: string + example: Test topic + content: + type: string + example: This is the test topic's content + tags: + type: array + items: + type: string + example: [test, topic] + required: + - cid + - title + - content + responses: + '200': + description: topic successfully created + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../components/schemas/Status.yaml#/Status + response: + allOf: + - $ref: ../components/schemas/TopicObject.yaml#/TopicObject + - type: object + properties: mainPost: {} \ No newline at end of file diff --git a/public/openapi/write/topics/tid.yaml b/public/openapi/write/topics/tid.yaml index 8e68efe..66f65fa 100644 --- a/public/openapi/write/topics/tid.yaml +++ b/public/openapi/write/topics/tid.yaml @@ -1,92 +1,92 @@ -get: - tags: - - topics - summary: get a topic - description: This operation retrieves a topic's data - parameters: - - in: path - name: tid - schema: - type: string - required: true - description: a valid topic id - example: 1 - responses: - '200': - description: Topic successfully retrieved - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../components/schemas/Status.yaml#/Status - response: - $ref: ../../components/schemas/TopicObject.yaml#/TopicObjectSlim -post: - tags: - - topics - summary: reply to a topic - description: This operation creates a new reply to an existing topic. - parameters: - - in: path - name: tid - schema: - type: string - required: true - description: a valid topic id - example: 2 - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - content: - type: string - example: This is a test reply - timestamp: - type: number - toPid: - type: number - required: - - content - responses: - '200': - description: post successfully created - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../components/schemas/Status.yaml#/Status - response: - $ref: ../../components/schemas/PostObject.yaml#/PostObject -delete: - tags: - - topics - summary: delete a topic - description: This operation purges a topic and all of its posts (careful, there is no confirmation!) - parameters: - - in: path - name: tid - schema: - type: string - required: true - description: a valid topic id - example: 3 - responses: - '200': - description: Topic successfully purged - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../components/schemas/Status.yaml#/Status - response: - type: object +get: + tags: + - topics + summary: get a topic + description: This operation retrieves a topic's data + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 1 + responses: + '200': + description: Topic successfully retrieved + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../components/schemas/Status.yaml#/Status + response: + $ref: ../../components/schemas/TopicObject.yaml#/TopicObjectSlim +post: + tags: + - topics + summary: reply to a topic + description: This operation creates a new reply to an existing topic. + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 2 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + content: + type: string + example: This is a test reply + timestamp: + type: number + toPid: + type: number + required: + - content + responses: + '200': + description: post successfully created + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../components/schemas/Status.yaml#/Status + response: + $ref: ../../components/schemas/PostObject.yaml#/PostObject +delete: + tags: + - topics + summary: delete a topic + description: This operation purges a topic and all of its posts (careful, there is no confirmation!) + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 3 + responses: + '200': + description: Topic successfully purged + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../components/schemas/Status.yaml#/Status + response: + type: object properties: {} \ No newline at end of file diff --git a/public/openapi/write/topics/tid/events.yaml b/public/openapi/write/topics/tid/events.yaml index 0bf03cd..9bdf73f 100644 --- a/public/openapi/write/topics/tid/events.yaml +++ b/public/openapi/write/topics/tid/events.yaml @@ -1,85 +1,85 @@ -get: - tags: - - topics - summary: get topic events - description: This operation retrieves a topic's events - parameters: - - in: path - name: tid - schema: - type: string - required: true - description: a valid topic id - example: 1 - responses: - '200': - description: Topic events successfully retrieved - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: array - description: A list of the topic events that still remain - items: - type: object - properties: - type: - type: string - description: A valid event type - id: - type: number - description: Unique identifier for this topic event - timestamp: - type: number - timestampISO: - type: string - description: An ISO 8601 formatted date string (complementing `timestamp`) - icon: - type: string - description: FontAwesome icon name - example: fa-bullhorn - text: - type: string - description: A language key - uid: - type: number - user: - type: object - properties: - uid: - type: number - description: A user identifier - username: - type: string - description: A friendly name for a given user account - displayname: - type: string - description: This is either username or fullname depending on forum and user settings - userslug: - type: string - description: An URL-safe variant of the username (i.e. lower-cased, spaces - removed, etc.) - picture: - nullable: true - type: string - icon:text: - type: string - description: A single-letter representation of a username. This is used in the - auto-generated icon given to users - without an avatar - icon:bgColor: - type: string - description: A six-character hexadecimal colour code assigned to the user. This - value is used in conjunction with - `icon:text` for the user's - auto-generated icon - example: "#f44336" - required: - - type - - id - - timestamp +get: + tags: + - topics + summary: get topic events + description: This operation retrieves a topic's events + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 1 + responses: + '200': + description: Topic events successfully retrieved + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: array + description: A list of the topic events that still remain + items: + type: object + properties: + type: + type: string + description: A valid event type + id: + type: number + description: Unique identifier for this topic event + timestamp: + type: number + timestampISO: + type: string + description: An ISO 8601 formatted date string (complementing `timestamp`) + icon: + type: string + description: FontAwesome icon name + example: fa-bullhorn + text: + type: string + description: A language key + uid: + type: number + user: + type: object + properties: + uid: + type: number + description: A user identifier + username: + type: string + description: A friendly name for a given user account + displayname: + type: string + description: This is either username or fullname depending on forum and user settings + userslug: + type: string + description: An URL-safe variant of the username (i.e. lower-cased, spaces + removed, etc.) + picture: + nullable: true + type: string + icon:text: + type: string + description: A single-letter representation of a username. This is used in the + auto-generated icon given to users + without an avatar + icon:bgColor: + type: string + description: A six-character hexadecimal colour code assigned to the user. This + value is used in conjunction with + `icon:text` for the user's + auto-generated icon + example: "#f44336" + required: + - type + - id + - timestamp - timestampISO \ No newline at end of file diff --git a/public/openapi/write/topics/tid/events/eventId.yaml b/public/openapi/write/topics/tid/events/eventId.yaml index 4b0de4a..531a633 100644 --- a/public/openapi/write/topics/tid/events/eventId.yaml +++ b/public/openapi/write/topics/tid/events/eventId.yaml @@ -1,33 +1,33 @@ -delete: - tags: - - topics - summary: Delete a topic event - description: This operation deletes a single topic event from the topic - parameters: - - in: path - name: tid - schema: - type: string - required: true - description: a valid topic id - example: 1 - - in: path - name: eventId - schema: - type: string - required: true - description: a valid topic event id - example: 1 - responses: - '200': - description: Topic event successfully deleted - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../../components/schemas/Status.yaml#/Status - response: - type: object +delete: + tags: + - topics + summary: Delete a topic event + description: This operation deletes a single topic event from the topic + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 1 + - in: path + name: eventId + schema: + type: string + required: true + description: a valid topic event id + example: 1 + responses: + '200': + description: Topic event successfully deleted + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../components/schemas/Status.yaml#/Status + response: + type: object properties: {} \ No newline at end of file diff --git a/public/openapi/write/topics/tid/follow.yaml b/public/openapi/write/topics/tid/follow.yaml index eada4d5..039ad53 100644 --- a/public/openapi/write/topics/tid/follow.yaml +++ b/public/openapi/write/topics/tid/follow.yaml @@ -1,52 +1,52 @@ -put: - tags: - - topics - summary: follow a topic - description: This operation follows (or watches) a topic. - parameters: - - in: path - name: tid - schema: - type: string - required: true - description: a valid topic id - example: 1 - responses: - '200': - description: Topic successfully followed - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object - properties: {} -delete: - tags: - - topics - summary: unfollow a topic - description: This operation unfollows (or unwatches) a topic. - parameters: - - in: path - name: tid - schema: - type: string - required: true - description: a valid topic id - example: 1 - responses: - '200': - description: Topic successfully unwatched - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object +put: + tags: + - topics + summary: follow a topic + description: This operation follows (or watches) a topic. + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 1 + responses: + '200': + description: Topic successfully followed + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: {} +delete: + tags: + - topics + summary: unfollow a topic + description: This operation unfollows (or unwatches) a topic. + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 1 + responses: + '200': + description: Topic successfully unwatched + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object properties: {} \ No newline at end of file diff --git a/public/openapi/write/topics/tid/ignore.yaml b/public/openapi/write/topics/tid/ignore.yaml index 321c995..bdf0b9d 100644 --- a/public/openapi/write/topics/tid/ignore.yaml +++ b/public/openapi/write/topics/tid/ignore.yaml @@ -1,52 +1,52 @@ -put: - tags: - - topics - summary: ignore a topic - description: This operation ignores (or watches) a topic. - parameters: - - in: path - name: tid - schema: - type: string - required: true - description: a valid topic id - example: 1 - responses: - '200': - description: Topic successfully ignored - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object - properties: {} -delete: - tags: - - topics - summary: unignore a topic - description: This operation unignores (or unfollows/unwatches) a topic. It is functionally identical to `DEL /topics/{tid}/follow`. - parameters: - - in: path - name: tid - schema: - type: string - required: true - description: a valid topic id - example: 1 - responses: - '200': - description: Topic successfully unignored/unwatched - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object +put: + tags: + - topics + summary: ignore a topic + description: This operation ignores (or watches) a topic. + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 1 + responses: + '200': + description: Topic successfully ignored + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: {} +delete: + tags: + - topics + summary: unignore a topic + description: This operation unignores (or unfollows/unwatches) a topic. It is functionally identical to `DEL /topics/{tid}/follow`. + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 1 + responses: + '200': + description: Topic successfully unignored/unwatched + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object properties: {} \ No newline at end of file diff --git a/public/openapi/write/topics/tid/lock.yaml b/public/openapi/write/topics/tid/lock.yaml index 224d0b8..a6dc732 100644 --- a/public/openapi/write/topics/tid/lock.yaml +++ b/public/openapi/write/topics/tid/lock.yaml @@ -1,52 +1,52 @@ -put: - tags: - - topics - summary: lock a topic - description: This operation locks an existing topic. - parameters: - - in: path - name: tid - schema: - type: string - required: true - description: a valid topic id - example: 1 - responses: - '200': - description: Topic successfully locked - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object - properties: {} -delete: - tags: - - topics - summary: unlock a topic - description: This operation unlocks a topic. - parameters: - - in: path - name: tid - schema: - type: string - required: true - description: a valid topic id - example: 1 - responses: - '200': - description: Topic successfully unlocked - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object +put: + tags: + - topics + summary: lock a topic + description: This operation locks an existing topic. + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 1 + responses: + '200': + description: Topic successfully locked + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: {} +delete: + tags: + - topics + summary: unlock a topic + description: This operation unlocks a topic. + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 1 + responses: + '200': + description: Topic successfully unlocked + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object properties: {} \ No newline at end of file diff --git a/public/openapi/write/topics/tid/pin.yaml b/public/openapi/write/topics/tid/pin.yaml index b3f2d58..0657985 100644 --- a/public/openapi/write/topics/tid/pin.yaml +++ b/public/openapi/write/topics/tid/pin.yaml @@ -1,52 +1,52 @@ -put: - tags: - - topics - summary: pin a topic - description: This operation pins an existing topic. - parameters: - - in: path - name: tid - schema: - type: string - required: true - description: a valid topic id - example: 1 - responses: - '200': - description: Topic successfully pinned - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object - properties: {} -delete: - tags: - - topics - summary: unpin a topic - description: This operation unpins a topic. - parameters: - - in: path - name: tid - schema: - type: string - required: true - description: a valid topic id - example: 1 - responses: - '200': - description: Topic successfully unpinned - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object +put: + tags: + - topics + summary: pin a topic + description: This operation pins an existing topic. + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 1 + responses: + '200': + description: Topic successfully pinned + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: {} +delete: + tags: + - topics + summary: unpin a topic + description: This operation unpins a topic. + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 1 + responses: + '200': + description: Topic successfully unpinned + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object properties: {} \ No newline at end of file diff --git a/public/openapi/write/topics/tid/state.yaml b/public/openapi/write/topics/tid/state.yaml index a823489..1998046 100644 --- a/public/openapi/write/topics/tid/state.yaml +++ b/public/openapi/write/topics/tid/state.yaml @@ -1,52 +1,52 @@ -delete: - tags: - - topics - summary: delete a topic - description: This operation deletes an existing topic. - parameters: - - in: path - name: tid - schema: - type: string - required: true - description: a valid topic id - example: 1 - responses: - '200': - description: Topic successfully deleted - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object - properties: {} -put: - tags: - - topics - summary: restore a topic - description: This operation restores a topic. - parameters: - - in: path - name: tid - schema: - type: string - required: true - description: a valid topic id - example: 1 - responses: - '200': - description: Topic successfully restored - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object +delete: + tags: + - topics + summary: delete a topic + description: This operation deletes an existing topic. + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 1 + responses: + '200': + description: Topic successfully deleted + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: {} +put: + tags: + - topics + summary: restore a topic + description: This operation restores a topic. + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 1 + responses: + '200': + description: Topic successfully restored + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object properties: {} \ No newline at end of file diff --git a/public/openapi/write/topics/tid/tags.yaml b/public/openapi/write/topics/tid/tags.yaml index 9f229d9..6561b8d 100644 --- a/public/openapi/write/topics/tid/tags.yaml +++ b/public/openapi/write/topics/tid/tags.yaml @@ -1,65 +1,65 @@ -put: - tags: - - topics - summary: adds tags to a topic - description: This operation adds tags to a topic - parameters: - - in: path - name: tid - schema: - type: string - required: true - description: a valid topic id - example: 1 - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - tags: - type: array - description: 'An array of tags' - items: - type: string - example: [test, foobar] - responses: - '200': - description: Topic tags successfully added - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object - properties: {} -delete: - tags: - - topics - summary: Removes all tags from a topic - description: This operation removed all tags associated with a topic. - parameters: - - in: path - name: tid - schema: - type: string - required: true - description: a valid topic id - example: 1 - responses: - '200': - description: Topic tags successfully removed. - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object +put: + tags: + - topics + summary: adds tags to a topic + description: This operation adds tags to a topic + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 1 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + tags: + type: array + description: 'An array of tags' + items: + type: string + example: [test, foobar] + responses: + '200': + description: Topic tags successfully added + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: {} +delete: + tags: + - topics + summary: Removes all tags from a topic + description: This operation removed all tags associated with a topic. + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 1 + responses: + '200': + description: Topic tags successfully removed. + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object properties: {} \ No newline at end of file diff --git a/public/openapi/write/topics/tid/thumbs.yaml b/public/openapi/write/topics/tid/thumbs.yaml index a51858a..2d2bea8 100644 --- a/public/openapi/write/topics/tid/thumbs.yaml +++ b/public/openapi/write/topics/tid/thumbs.yaml @@ -1,160 +1,160 @@ -get: - tags: - - topics - summary: get topic thumbnails - description: This operation retrieves a topic's uploaded thumbnails - parameters: - - in: path - name: tid - schema: - type: string - required: true - description: a valid topic id - example: 1 - responses: - '200': - description: Thumbnails successfully retrieved - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: array - description: A list of the topic thumbnails that still remain - items: - type: object - properties: - id: - type: string - name: - type: string - url: - type: string - description: Path to a topic thumbnail -post: - tags: - - topics - summary: add topic thumbnail - description: This operation adds a thumbnail to an existing topic or a draft (via a composer `uuid`) - parameters: - - in: path - name: tid - schema: - type: string - required: true - description: a valid topic id - example: 1 - requestBody: - content: - multipart/form-data: - schema: - type: object - properties: - files: - type: array - items: - type: string - format: binary - responses: - '200': - description: Thumbnail successfully added - content: - application/json: - schema: - type: array - items: - type: object - properties: - url: - type: string - path: - type: string - name: - type: string -put: - tags: - - topics - summary: migrate topic thumbnail - description: This operation migrates a thumbnails from a topic or draft, to another tid or draft. - parameters: - - in: path - name: tid - schema: - type: string - required: true - description: a valid topic id or draft uuid - example: 1 - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - tid: - type: string - description: a valid topic id or draft uuid - example: '1' - responses: - '200': - description: Topic thumbnails migrated - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object - properties: {} -delete: - tags: - - topics - summary: remove topic thumbnail - description: This operation removes a topic thumbnail. - parameters: - - in: path - name: tid - schema: - type: string - required: true - description: a valid topic id - example: 1 - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - path: - type: string - description: Relative path to the topic thumbnail - example: files/test.png - responses: - '200': - description: Topic thumbnail removed - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: array - description: A list of the topic thumbnails that still remain - items: - type: object - properties: - id: - type: string - name: - type: string - url: - type: string +get: + tags: + - topics + summary: get topic thumbnails + description: This operation retrieves a topic's uploaded thumbnails + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 1 + responses: + '200': + description: Thumbnails successfully retrieved + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: array + description: A list of the topic thumbnails that still remain + items: + type: object + properties: + id: + type: string + name: + type: string + url: + type: string + description: Path to a topic thumbnail +post: + tags: + - topics + summary: add topic thumbnail + description: This operation adds a thumbnail to an existing topic or a draft (via a composer `uuid`) + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 1 + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + files: + type: array + items: + type: string + format: binary + responses: + '200': + description: Thumbnail successfully added + content: + application/json: + schema: + type: array + items: + type: object + properties: + url: + type: string + path: + type: string + name: + type: string +put: + tags: + - topics + summary: migrate topic thumbnail + description: This operation migrates a thumbnails from a topic or draft, to another tid or draft. + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id or draft uuid + example: 1 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + tid: + type: string + description: a valid topic id or draft uuid + example: '1' + responses: + '200': + description: Topic thumbnails migrated + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: {} +delete: + tags: + - topics + summary: remove topic thumbnail + description: This operation removes a topic thumbnail. + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id + example: 1 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + path: + type: string + description: Relative path to the topic thumbnail + example: files/test.png + responses: + '200': + description: Topic thumbnail removed + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: array + description: A list of the topic thumbnails that still remain + items: + type: object + properties: + id: + type: string + name: + type: string + url: + type: string description: Path to a topic thumbnail \ No newline at end of file diff --git a/public/openapi/write/topics/tid/thumbs/order.yaml b/public/openapi/write/topics/tid/thumbs/order.yaml index 8e9a12f..68ec247 100644 --- a/public/openapi/write/topics/tid/thumbs/order.yaml +++ b/public/openapi/write/topics/tid/thumbs/order.yaml @@ -1,41 +1,41 @@ -put: - tags: - - topics - summary: reorder topic thumbnail - description: This operation sets the order for a topic thumbnail. It can handle either topics (if a valid `tid` is passed in), or drafts. A 404 is returned if the topic or draft does not actually contain that thumbnail path. Paths passed in should **not** contain the path to the uploads folder (`config.upload_url` on client side) - parameters: - - in: path - name: tid - schema: - type: string - required: true - description: a valid topic id or draft uuid - example: 2 - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - path: - type: string - description: Relative path to the topic thumbnail - example: files/test.png - order: - type: number - description: The order of topic thumbnails. Lower numbers are loaded first. - example: 0 - responses: - '200': - description: Topic thumbnail re-ordered - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../../components/schemas/Status.yaml#/Status - response: - type: object +put: + tags: + - topics + summary: reorder topic thumbnail + description: This operation sets the order for a topic thumbnail. It can handle either topics (if a valid `tid` is passed in), or drafts. A 404 is returned if the topic or draft does not actually contain that thumbnail path. Paths passed in should **not** contain the path to the uploads folder (`config.upload_url` on client side) + parameters: + - in: path + name: tid + schema: + type: string + required: true + description: a valid topic id or draft uuid + example: 2 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + path: + type: string + description: Relative path to the topic thumbnail + example: files/test.png + order: + type: number + description: The order of topic thumbnails. Lower numbers are loaded first. + example: 0 + responses: + '200': + description: Topic thumbnail re-ordered + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../components/schemas/Status.yaml#/Status + response: + type: object properties: {} \ No newline at end of file diff --git a/public/openapi/write/users.yaml b/public/openapi/write/users.yaml index d5fcdf3..a3ab133 100644 --- a/public/openapi/write/users.yaml +++ b/public/openapi/write/users.yaml @@ -1,76 +1,76 @@ -post: - tags: - - users - summary: create a user - description: This operation creates a new user account - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - username: - type: string - description: 'If the username is taken, a number will be appended' - example: Dragon Fruit - password: - type: string - example: s3cre7password - email: - type: string - example: dragonfruit@example.org - required: - - username - responses: - '200': - description: user successfully created - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../components/schemas/Status.yaml#/Status - response: - $ref: ../components/schemas/UserObj.yaml#/UserObj - '400': - $ref: ../components/responses/400.yaml#/400 - '401': - $ref: ../components/responses/401.yaml#/401 - '403': - $ref: ../components/responses/403.yaml#/403 - '426': - $ref: ../components/responses/426.yaml#/426 - '500': - $ref: ../components/responses/500.yaml#/500 -delete: - tags: - - users - summary: delete one or more users - description: This operation deletes one or many user accounts, including their contributions (posts, topics, etc.) - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - uids: - type: array - description: A collection of uids - items: - type: number - example: [5, 6] - responses: - '200': - description: user account(s) deleted - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../components/schemas/Status.yaml#/Status - response: - type: object +post: + tags: + - users + summary: create a user + description: This operation creates a new user account + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + username: + type: string + description: 'If the username is taken, a number will be appended' + example: Dragon Fruit + password: + type: string + example: s3cre7password + email: + type: string + example: dragonfruit@example.org + required: + - username + responses: + '200': + description: user successfully created + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../components/schemas/Status.yaml#/Status + response: + $ref: ../components/schemas/UserObj.yaml#/UserObj + '400': + $ref: ../components/responses/400.yaml#/400 + '401': + $ref: ../components/responses/401.yaml#/401 + '403': + $ref: ../components/responses/403.yaml#/403 + '426': + $ref: ../components/responses/426.yaml#/426 + '500': + $ref: ../components/responses/500.yaml#/500 +delete: + tags: + - users + summary: delete one or more users + description: This operation deletes one or many user accounts, including their contributions (posts, topics, etc.) + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + uids: + type: array + description: A collection of uids + items: + type: number + example: [5, 6] + responses: + '200': + description: user account(s) deleted + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../components/schemas/Status.yaml#/Status + response: + type: object diff --git a/public/openapi/write/users/uid.yaml b/public/openapi/write/users/uid.yaml index c8cbcb6..d72beed 100644 --- a/public/openapi/write/users/uid.yaml +++ b/public/openapi/write/users/uid.yaml @@ -1,131 +1,131 @@ -head: - tags: - - users - summary: check if a user exists - parameters: - - in: path - name: uid - schema: - type: integer - required: true - description: uid of the user to check - example: 3 - responses: - '200': - description: user found - '404': - description: user not found -get: - tags: - - users - summary: get a single user account - parameters: - - in: path - name: uid - schema: - type: integer - required: true - description: uid of the user to check - example: 3 - responses: - '200': - description: successfully retrieved user profile - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../components/schemas/Status.yaml#/Status - response: - $ref: ../../components/schemas/UserObj.yaml#/UserObj -delete: - tags: - - users - summary: delete a single user account - parameters: - - in: path - name: uid - schema: - type: integer - required: true - description: uid of the user to delete - example: 3 - responses: - '200': - description: user account deleted - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../components/schemas/Status.yaml#/Status - response: - type: object -put: - tags: - - users - summary: update a user account - parameters: - - in: path - name: uid - schema: - type: integer - required: true - description: uid of the user to update - example: 1 - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - fullname: - type: string - example: Mr. Dragon Fruit Jr. - website: - type: string - example: 'https://example.org' - location: - type: string - example: 'Toronto, Canada' - groupTitle: - type: string - example: '["administrators","Staff"]' - birthday: - type: string - description: A birthdate given in an ISO format parseable by the Date object - example: 03/27/2020 - signature: - type: string - example: | - This is an example signature - It can span multiple lines. - aboutme: - type: string - example: | - This is a paragraph all about how my life got twist-turned upside-down - and I'd like to take a minute and sit right here, - to tell you all about how I because the administrator of NodeBB - responses: - '200': - description: user profile updated - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../components/schemas/Status.yaml#/Status - response: - $ref: ../../components/schemas/UserObj.yaml#/UserObj - '401': - $ref: ../../components/responses/401.yaml#/401 - '403': - $ref: ../../components/responses/403.yaml#/403 - '426': - $ref: ../../components/responses/426.yaml#/426 - '500': +head: + tags: + - users + summary: check if a user exists + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user to check + example: 3 + responses: + '200': + description: user found + '404': + description: user not found +get: + tags: + - users + summary: get a single user account + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user to check + example: 3 + responses: + '200': + description: successfully retrieved user profile + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../components/schemas/Status.yaml#/Status + response: + $ref: ../../components/schemas/UserObj.yaml#/UserObj +delete: + tags: + - users + summary: delete a single user account + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user to delete + example: 3 + responses: + '200': + description: user account deleted + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../components/schemas/Status.yaml#/Status + response: + type: object +put: + tags: + - users + summary: update a user account + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user to update + example: 1 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + fullname: + type: string + example: Mr. Dragon Fruit Jr. + website: + type: string + example: 'https://example.org' + location: + type: string + example: 'Toronto, Canada' + groupTitle: + type: string + example: '["administrators","Staff"]' + birthday: + type: string + description: A birthdate given in an ISO format parseable by the Date object + example: 03/27/2020 + signature: + type: string + example: | + This is an example signature + It can span multiple lines. + aboutme: + type: string + example: | + This is a paragraph all about how my life got twist-turned upside-down + and I'd like to take a minute and sit right here, + to tell you all about how I because the administrator of NodeBB + responses: + '200': + description: user profile updated + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../components/schemas/Status.yaml#/Status + response: + $ref: ../../components/schemas/UserObj.yaml#/UserObj + '401': + $ref: ../../components/responses/401.yaml#/401 + '403': + $ref: ../../components/responses/403.yaml#/403 + '426': + $ref: ../../components/responses/426.yaml#/426 + '500': $ref: ../../components/responses/500.yaml#/500 \ No newline at end of file diff --git a/public/openapi/write/users/uid/account.yaml b/public/openapi/write/users/uid/account.yaml index 51c149e..9be029c 100644 --- a/public/openapi/write/users/uid/account.yaml +++ b/public/openapi/write/users/uid/account.yaml @@ -1,25 +1,25 @@ -delete: - tags: - - users - summary: delete a single user account (preserve content) - description: This route deletes a single user's account, but preserves the content (posts, bookmarks, etc.) - parameters: - - in: path - name: uid - schema: - type: integer - required: true - description: uid of the user to delete - example: 7 - responses: - '200': - description: user account deleted - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: +delete: + tags: + - users + summary: delete a single user account (preserve content) + description: This route deletes a single user's account, but preserves the content (posts, bookmarks, etc.) + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user to delete + example: 7 + responses: + '200': + description: user account deleted + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: type: object \ No newline at end of file diff --git a/public/openapi/write/users/uid/ban.yaml b/public/openapi/write/users/uid/ban.yaml index 624c6e8..ded2dca 100644 --- a/public/openapi/write/users/uid/ban.yaml +++ b/public/openapi/write/users/uid/ban.yaml @@ -1,61 +1,61 @@ -put: - tags: - - users - summary: ban a user - parameters: - - in: path - name: uid - schema: - type: integer - required: true - description: uid of the user to ban - example: 2 - requestBody: - content: - application/json: - schema: - type: object - properties: - until: - type: number - description: UNIX timestamp of the ban expiry - example: 1585775608076 - reason: - type: string - example: the reason for the ban - responses: - '200': - description: successfully banned user - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object -delete: - tags: - - users - summary: unbans a user - parameters: - - in: path - name: uid - schema: - type: integer - required: true - description: uid of the user to unban - example: 2 - responses: - '200': - description: successfully unbanned user - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: +put: + tags: + - users + summary: ban a user + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user to ban + example: 2 + requestBody: + content: + application/json: + schema: + type: object + properties: + until: + type: number + description: UNIX timestamp of the ban expiry + example: 1585775608076 + reason: + type: string + example: the reason for the ban + responses: + '200': + description: successfully banned user + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object +delete: + tags: + - users + summary: unbans a user + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user to unban + example: 2 + responses: + '200': + description: successfully unbanned user + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: type: object \ No newline at end of file diff --git a/public/openapi/write/users/uid/content.yaml b/public/openapi/write/users/uid/content.yaml index 7b5cd0f..08dfb21 100644 --- a/public/openapi/write/users/uid/content.yaml +++ b/public/openapi/write/users/uid/content.yaml @@ -1,25 +1,25 @@ -delete: - tags: - - users - summary: delete a single user account's content (preserve account) - description: This route deletes a single user's account content (posts, bookmarks, etc.) but preserves the account itself - parameters: - - in: path - name: uid - schema: - type: integer - required: true - description: uid of the user's content to delete - example: 7 - responses: - '200': - description: user account content deleted - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: +delete: + tags: + - users + summary: delete a single user account's content (preserve account) + description: This route deletes a single user's account content (posts, bookmarks, etc.) but preserves the account itself + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user's content to delete + example: 7 + responses: + '200': + description: user account content deleted + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: type: object \ No newline at end of file diff --git a/public/openapi/write/users/uid/emails.yaml b/public/openapi/write/users/uid/emails.yaml index 8bd0080..5e8699d 100644 --- a/public/openapi/write/users/uid/emails.yaml +++ b/public/openapi/write/users/uid/emails.yaml @@ -1,33 +1,33 @@ -get: - tags: - - users - summary: get user emails - description: | - This operation lists all emails associated with the user. - This route is accessible to all users if the target user has elected to show their email publicly. Otherwise, it is only accessible to privileged users, or if the calling user is the same as the target user. - parameters: - - in: path - required: true - name: uid - schema: - type: number - description: A valid user id - example: 1 - responses: - '200': - description: user emails successfully listed - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object - properties: - emails: - type: array - items: - type: string +get: + tags: + - users + summary: get user emails + description: | + This operation lists all emails associated with the user. + This route is accessible to all users if the target user has elected to show their email publicly. Otherwise, it is only accessible to privileged users, or if the calling user is the same as the target user. + parameters: + - in: path + required: true + name: uid + schema: + type: number + description: A valid user id + example: 1 + responses: + '200': + description: user emails successfully listed + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object + properties: + emails: + type: array + items: + type: string description: An email address \ No newline at end of file diff --git a/public/openapi/write/users/uid/emails/email.yaml b/public/openapi/write/users/uid/emails/email.yaml index 7f0118d..eb6e255 100644 --- a/public/openapi/write/users/uid/emails/email.yaml +++ b/public/openapi/write/users/uid/emails/email.yaml @@ -1,25 +1,25 @@ -get: - tags: - - users - summary: get user's email data - description: | - This operation lists the data associated with a single email. - This route is accessible to all users if the target user has elected to show their email publicly. Otherwise, it is only accessible to privileged users, or if the calling user is the same as the target user. - parameters: - - in: path - required: true - name: uid - schema: - type: number - description: A valid user id - example: 1 - - in: path - required: true - name: email - schema: - type: string - description: A valid email address - example: test@example.org - responses: - '204': +get: + tags: + - users + summary: get user's email data + description: | + This operation lists the data associated with a single email. + This route is accessible to all users if the target user has elected to show their email publicly. Otherwise, it is only accessible to privileged users, or if the calling user is the same as the target user. + parameters: + - in: path + required: true + name: uid + schema: + type: number + description: A valid user id + example: 1 + - in: path + required: true + name: email + schema: + type: string + description: A valid email address + example: test@example.org + responses: + '204': description: user's email data successfully retrieved \ No newline at end of file diff --git a/public/openapi/write/users/uid/emails/email/confirm.yaml b/public/openapi/write/users/uid/emails/email/confirm.yaml index 6ccd34f..6cf3d51 100644 --- a/public/openapi/write/users/uid/emails/email/confirm.yaml +++ b/public/openapi/write/users/uid/emails/email/confirm.yaml @@ -1,34 +1,34 @@ -post: - tags: - - users - summary: validate a user's email address - description: | - Marks the passed-in user's email as confirmed. - This route is only accessible to administrators with the `admin:users` privilege (or superadmins) - parameters: - - in: path - required: true - name: uid - schema: - type: number - description: A valid user id - example: 1 - - in: path - required: true - name: email - schema: - type: string - description: A valid email address - example: test@example.org - responses: - '200': - description: successfully confirmed a user email - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../../../components/schemas/Status.yaml#/Status - response: +post: + tags: + - users + summary: validate a user's email address + description: | + Marks the passed-in user's email as confirmed. + This route is only accessible to administrators with the `admin:users` privilege (or superadmins) + parameters: + - in: path + required: true + name: uid + schema: + type: number + description: A valid user id + example: 1 + - in: path + required: true + name: email + schema: + type: string + description: A valid email address + example: test@example.org + responses: + '200': + description: successfully confirmed a user email + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../../components/schemas/Status.yaml#/Status + response: type: object \ No newline at end of file diff --git a/public/openapi/write/users/uid/exports/type.yaml b/public/openapi/write/users/uid/exports/type.yaml index 928cb9b..a68e82b 100644 --- a/public/openapi/write/users/uid/exports/type.yaml +++ b/public/openapi/write/users/uid/exports/type.yaml @@ -1,85 +1,85 @@ -head: - tags: - - users - summary: Check if a user's export exists - parameters: - - in: path - name: uid - schema: - type: integer - required: true - description: uid of the user to make the query for - example: 1 - - in: path - name: type - schema: - type: string - required: true - description: The type of export to query - example: posts - responses: - '204': - description: Exported file found. - '404': - description: Exported file not found — this could be because an export has never been generated for this user. -get: - tags: - - users - summary: Download a user's exported data - parameters: - - in: path - name: uid - schema: - type: integer - required: true - description: uid of the user to make the query for - example: 1 - - in: path - name: type - schema: - type: string - required: true - description: The type of export to download - example: posts - responses: - '200': - description: A download containing the requested exported data - '404': - description: Exported file not found — this could be because an export has never been generated for this user. -post: - tags: - - users - summary: Generate a user export - description: | - This operation generates a user export file for later download. - It will return immediately with the `202 Accepted` response code, meaning the request was accepted for processing. - The expected behaviour is for the client to then poll the corresponding `HEAD` method until it returns a `204 No Content` - (or if awaiting a new export, for the `Last-Modified` or `ETag` header to change) - at which point the `GET` method can be called for download. - parameters: - - in: path - name: uid - schema: - type: integer - required: true - description: uid of the user to make the query for - example: 1 - - in: path - name: type - schema: - type: string - required: true - description: The type of export to download - example: posts - responses: - '202': - description: Successfully started generating the requested user export - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../../components/schemas/Status.yaml#/Status - response: +head: + tags: + - users + summary: Check if a user's export exists + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user to make the query for + example: 1 + - in: path + name: type + schema: + type: string + required: true + description: The type of export to query + example: posts + responses: + '204': + description: Exported file found. + '404': + description: Exported file not found — this could be because an export has never been generated for this user. +get: + tags: + - users + summary: Download a user's exported data + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user to make the query for + example: 1 + - in: path + name: type + schema: + type: string + required: true + description: The type of export to download + example: posts + responses: + '200': + description: A download containing the requested exported data + '404': + description: Exported file not found — this could be because an export has never been generated for this user. +post: + tags: + - users + summary: Generate a user export + description: | + This operation generates a user export file for later download. + It will return immediately with the `202 Accepted` response code, meaning the request was accepted for processing. + The expected behaviour is for the client to then poll the corresponding `HEAD` method until it returns a `204 No Content` + (or if awaiting a new export, for the `Last-Modified` or `ETag` header to change) + at which point the `GET` method can be called for download. + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user to make the query for + example: 1 + - in: path + name: type + schema: + type: string + required: true + description: The type of export to download + example: posts + responses: + '202': + description: Successfully started generating the requested user export + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../components/schemas/Status.yaml#/Status + response: type: object \ No newline at end of file diff --git a/public/openapi/write/users/uid/follow.yaml b/public/openapi/write/users/uid/follow.yaml index a993985..ee59efe 100644 --- a/public/openapi/write/users/uid/follow.yaml +++ b/public/openapi/write/users/uid/follow.yaml @@ -1,48 +1,48 @@ -put: - tags: - - users - summary: follow a user - parameters: - - in: path - name: uid - schema: - type: integer - required: true - description: uid of the user to follow - example: 2 - responses: - '200': - description: successfully followed user - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object -delete: - tags: - - users - summary: unfollows a user - parameters: - - in: path - name: uid - schema: - type: integer - required: true - description: uid of the user to unfollow - example: 2 - responses: - '200': - description: successfully unfollowed user - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: +put: + tags: + - users + summary: follow a user + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user to follow + example: 2 + responses: + '200': + description: successfully followed user + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object +delete: + tags: + - users + summary: unfollows a user + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user to unfollow + example: 2 + responses: + '200': + description: successfully unfollowed user + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: type: object \ No newline at end of file diff --git a/public/openapi/write/users/uid/invites.yaml b/public/openapi/write/users/uid/invites.yaml index 9fd3596..2b1e838 100644 --- a/public/openapi/write/users/uid/invites.yaml +++ b/public/openapi/write/users/uid/invites.yaml @@ -1,48 +1,48 @@ -post: - tags: - - users - summary: invite users with email by email - description: This operation sends an invitation email to the given addresses, with an option to join selected groups on acceptance - parameters: - - in: path - name: uid - schema: - type: integer - required: true - description: uid of the user sending invitations - example: 1 - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - emails: - type: string - description: A single or list of comma separated email addresses - example: friend01@example.com,friend02@example.com - groupsToJoin: - type: array - description: A collection of group names - example: ['administrators'] - required: - - emails - responses: - '200': - description: invitation email(s) sent - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object - '400': - $ref: ../../../components/responses/400.yaml#/400 - '401': - $ref: ../../../components/responses/401.yaml#/401 - '403': +post: + tags: + - users + summary: invite users with email by email + description: This operation sends an invitation email to the given addresses, with an option to join selected groups on acceptance + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user sending invitations + example: 1 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + emails: + type: string + description: A single or list of comma separated email addresses + example: friend01@example.com,friend02@example.com + groupsToJoin: + type: array + description: A collection of group names + example: ['administrators'] + required: + - emails + responses: + '200': + description: invitation email(s) sent + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object + '400': + $ref: ../../../components/responses/400.yaml#/400 + '401': + $ref: ../../../components/responses/401.yaml#/401 + '403': $ref: ../../../components/responses/403.yaml#/403 \ No newline at end of file diff --git a/public/openapi/write/users/uid/invites/groups.yaml b/public/openapi/write/users/uid/invites/groups.yaml index 5683db6..fc1f1f9 100644 --- a/public/openapi/write/users/uid/invites/groups.yaml +++ b/public/openapi/write/users/uid/invites/groups.yaml @@ -1,23 +1,23 @@ -get: - tags: - - users - summary: Get group names that the user can invite - parameters: - - in: path - name: uid - schema: - type: integer - required: true - description: uid of the user to make the query for - example: 1 - responses: - '200': - description: A collection of group names returned - content: - application/json: - schema: - type: array - items: - type: string - '401': +get: + tags: + - users + summary: Get group names that the user can invite + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user to make the query for + example: 1 + responses: + '200': + description: A collection of group names returned + content: + application/json: + schema: + type: array + items: + type: string + '401': $ref: ../../../../components/responses/401.yaml#/401 \ No newline at end of file diff --git a/public/openapi/write/users/uid/mute.yaml b/public/openapi/write/users/uid/mute.yaml index 7fa84c9..a8e09a0 100644 --- a/public/openapi/write/users/uid/mute.yaml +++ b/public/openapi/write/users/uid/mute.yaml @@ -1,61 +1,61 @@ -put: - tags: - - users - summary: mute a user - parameters: - - in: path - name: uid - schema: - type: integer - required: true - description: uid of the user to mute - example: 2 - requestBody: - content: - application/json: - schema: - type: object - properties: - until: - type: number - description: UNIX timestamp of the mute expiry - example: 1585775608076 - reason: - type: string - example: the reason for the mute - responses: - '200': - description: successfully muted user - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: - type: object -delete: - tags: - - users - summary: unmute a user - parameters: - - in: path - name: uid - schema: - type: integer - required: true - description: uid of the user to unmute - example: 2 - responses: - '200': - description: successfully unmuted user - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: +put: + tags: + - users + summary: mute a user + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user to mute + example: 2 + requestBody: + content: + application/json: + schema: + type: object + properties: + until: + type: number + description: UNIX timestamp of the mute expiry + example: 1585775608076 + reason: + type: string + example: the reason for the mute + responses: + '200': + description: successfully muted user + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: + type: object +delete: + tags: + - users + summary: unmute a user + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user to unmute + example: 2 + responses: + '200': + description: successfully unmuted user + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: type: object \ No newline at end of file diff --git a/public/openapi/write/users/uid/password.yaml b/public/openapi/write/users/uid/password.yaml index 1a52f85..d1c65cc 100644 --- a/public/openapi/write/users/uid/password.yaml +++ b/public/openapi/write/users/uid/password.yaml @@ -1,40 +1,40 @@ -put: - tags: - - users - summary: change a user's password - parameters: - - in: path - name: uid - schema: - type: integer - required: true - description: uid of the user to update - example: 1 - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - currentPassword: - type: string - description: test - example: '123456' - newPassword: - type: string - example: '123456' - required: - - newPassword - responses: - '200': - description: user profile updated - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: +put: + tags: + - users + summary: change a user's password + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user to update + example: 1 + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + currentPassword: + type: string + description: test + example: '123456' + newPassword: + type: string + example: '123456' + required: + - newPassword + responses: + '200': + description: user profile updated + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: type: object \ No newline at end of file diff --git a/public/openapi/write/users/uid/picture.yaml b/public/openapi/write/users/uid/picture.yaml index d6498a0..9cf0b8f 100644 --- a/public/openapi/write/users/uid/picture.yaml +++ b/public/openapi/write/users/uid/picture.yaml @@ -1,43 +1,43 @@ -put: - tags: - - users - summary: update user picture or icon background colour - parameters: - - in: path - name: uid - schema: - type: integer - required: true - description: uid of the user - example: 1 - requestBody: - content: - application/json: - schema: - type: object - properties: - type: - type: string - description: The source of the picture - enum: ['default', 'uploaded', 'external'] - example: default - url: - type: string - description: Only used for `external` type, specifies the source of the external image to use as avatar - example: '' - bgColor: - type: string - description: A hexadecimal colour representation - example: '#ff0000' - responses: - '200': - description: successfully updated user picture - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: +put: + tags: + - users + summary: update user picture or icon background colour + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user + example: 1 + requestBody: + content: + application/json: + schema: + type: object + properties: + type: + type: string + description: The source of the picture + enum: ['default', 'uploaded', 'external'] + example: default + url: + type: string + description: Only used for `external` type, specifies the source of the external image to use as avatar + example: '' + bgColor: + type: string + description: A hexadecimal colour representation + example: '#ff0000' + responses: + '200': + description: successfully updated user picture + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: type: object \ No newline at end of file diff --git a/public/openapi/write/users/uid/sessions/uuid.yaml b/public/openapi/write/users/uid/sessions/uuid.yaml index 4b01dee..6329e83 100644 --- a/public/openapi/write/users/uid/sessions/uuid.yaml +++ b/public/openapi/write/users/uid/sessions/uuid.yaml @@ -1,31 +1,31 @@ -delete: - tags: - - users - summary: revoke a user session - parameters: - - in: path - name: uid - schema: - type: integer - required: true - description: uid of the user's session - example: 3 - - in: path - name: uuid - schema: - type: string - required: true - description: uuid of the user's session - example: 7c1a66b3-90e1-41f4-9f74-2b2edaebf917 - responses: - '200': - description: user session revoked - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../../components/schemas/Status.yaml#/Status - response: +delete: + tags: + - users + summary: revoke a user session + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user's session + example: 3 + - in: path + name: uuid + schema: + type: string + required: true + description: uuid of the user's session + example: 7c1a66b3-90e1-41f4-9f74-2b2edaebf917 + responses: + '200': + description: user session revoked + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../components/schemas/Status.yaml#/Status + response: type: object \ No newline at end of file diff --git a/public/openapi/write/users/uid/settings.yaml b/public/openapi/write/users/uid/settings.yaml index 2da70fa..25d67bb 100644 --- a/public/openapi/write/users/uid/settings.yaml +++ b/public/openapi/write/users/uid/settings.yaml @@ -1,36 +1,36 @@ -put: - tags: - - users - summary: update user settings - parameters: - - in: path - name: uid - schema: - type: integer - required: true - description: uid of the user - example: 1 - requestBody: - content: - application/json: - schema: - type: object - properties: - settings: - type: object - description: An object containing key-value pairs of user settings to update - example: - showemail: '0' - showfullname: '1' - responses: - '200': - description: successfully updated user settings - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: +put: + tags: + - users + summary: update user settings + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user + example: 1 + requestBody: + content: + application/json: + schema: + type: object + properties: + settings: + type: object + description: An object containing key-value pairs of user settings to update + example: + showemail: '0' + showfullname: '1' + responses: + '200': + description: successfully updated user settings + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: $ref: ../../../components/schemas/SettingsObj.yaml#/Settings \ No newline at end of file diff --git a/public/openapi/write/users/uid/tokens.yaml b/public/openapi/write/users/uid/tokens.yaml index 49b7e39..b2793fc 100644 --- a/public/openapi/write/users/uid/tokens.yaml +++ b/public/openapi/write/users/uid/tokens.yaml @@ -1,25 +1,25 @@ -post: - tags: - - users - summary: generate a user token - description: This route can only be used to generate tokens for the same user. In other words, you cannot use this route to generate a token for a different user than the one you are authenticated as. - parameters: - - in: path - name: uid - schema: - type: integer - required: true - description: uid of the user to generate a token for - example: 1 - responses: - '200': - description: successfully generated a user token - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../components/schemas/Status.yaml#/Status - response: +post: + tags: + - users + summary: generate a user token + description: This route can only be used to generate tokens for the same user. In other words, you cannot use this route to generate a token for a different user than the one you are authenticated as. + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user to generate a token for + example: 1 + responses: + '200': + description: successfully generated a user token + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../components/schemas/Status.yaml#/Status + response: type: object \ No newline at end of file diff --git a/public/openapi/write/users/uid/tokens/token.yaml b/public/openapi/write/users/uid/tokens/token.yaml index ef17a8e..bc20cd9 100644 --- a/public/openapi/write/users/uid/tokens/token.yaml +++ b/public/openapi/write/users/uid/tokens/token.yaml @@ -1,31 +1,31 @@ -delete: - tags: - - users - summary: delete user token - parameters: - - in: path - name: uid - schema: - type: integer - required: true - description: uid of the user whose token you want to delete - example: 1 - - in: path - name: token - schema: - type: string - required: true - description: a valid API token - example: 6d03a630-86fd-4515-9a35-e957502f4f89 - responses: - '200': - description: successfully deleted user token - content: - application/json: - schema: - type: object - properties: - status: - $ref: ../../../../components/schemas/Status.yaml#/Status - response: +delete: + tags: + - users + summary: delete user token + parameters: + - in: path + name: uid + schema: + type: integer + required: true + description: uid of the user whose token you want to delete + example: 1 + - in: path + name: token + schema: + type: string + required: true + description: a valid API token + example: 6d03a630-86fd-4515-9a35-e957502f4f89 + responses: + '200': + description: successfully deleted user token + content: + application/json: + schema: + type: object + properties: + status: + $ref: ../../../../components/schemas/Status.yaml#/Status + response: type: object \ No newline at end of file diff --git a/public/src/admin/.eslintrc b/public/src/admin/.eslintrc index 2d4ef53..2e04c52 100644 --- a/public/src/admin/.eslintrc +++ b/public/src/admin/.eslintrc @@ -1,5 +1,5 @@ -{ - "globals": { - "Sortable": true - } +{ + "globals": { + "Sortable": true + } } \ No newline at end of file diff --git a/public/src/client/register.js b/public/src/client/register.js index 62dbc41..9f626df 100644 --- a/public/src/client/register.js +++ b/public/src/client/register.js @@ -131,7 +131,7 @@ define('forum/register', [ if (results.every(obj => obj.status === 'rejected')) { showSuccess(username_notify, successIcon); } else { - showError(username_notify, '[[error:username-taken]]'); + showError(username_notify, `[[error:username-taken, "${username}123"]]`); } callback(); diff --git a/public/vendor/fontawesome/.gitignore b/public/vendor/fontawesome/.gitignore index aaad45f..402cc1a 100644 --- a/public/vendor/fontawesome/.gitignore +++ b/public/vendor/fontawesome/.gitignore @@ -1,29 +1,29 @@ -*.pyc -*.egg-info -*.db -*.db.old -*.swp -*.db-journal - -.coverage -.DS_Store -.installed.cfg - -.idea/* -.svn/* -src/website/static/* -src/website/media/* - -bin -build -cfcache -develop-eggs -dist -downloads -eggs -parts -tmp -.sass-cache - -src/website/settingslocal.py +*.pyc +*.egg-info +*.db +*.db.old +*.swp +*.db-journal + +.coverage +.DS_Store +.installed.cfg + +.idea/* +.svn/* +src/website/static/* +src/website/media/* + +bin +build +cfcache +develop-eggs +dist +downloads +eggs +parts +tmp +.sass-cache + +src/website/settingslocal.py stunnel.log \ No newline at end of file diff --git a/public/vendor/fontawesome/LICENSE.txt b/public/vendor/fontawesome/LICENSE.txt index f31bef9..550c0ee 100644 --- a/public/vendor/fontawesome/LICENSE.txt +++ b/public/vendor/fontawesome/LICENSE.txt @@ -1,34 +1,34 @@ -Font Awesome Free License -------------------------- - -Font Awesome Free is free, open source, and GPL friendly. You can use it for -commercial projects, open source projects, or really almost whatever you want. -Full Font Awesome Free license: https://fontawesome.com/license/free. - -# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/) -In the Font Awesome Free download, the CC BY 4.0 license applies to all icons -packaged as SVG and JS file types. - -# Fonts: SIL OFL 1.1 License (https://scripts.sil.org/OFL) -In the Font Awesome Free download, the SIL OFL license applies to all icons -packaged as web and desktop font files. - -# Code: MIT License (https://opensource.org/licenses/MIT) -In the Font Awesome Free download, the MIT license applies to all non-font and -non-icon files. - -# Attribution -Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font -Awesome Free files already contain embedded comments with sufficient -attribution, so you shouldn't need to do anything additional when using these -files normally. - -We've kept attribution comments terse, so we ask that you do not actively work -to remove them from files, especially code. They're a great way for folks to -learn about Font Awesome. - -# Brand Icons -All brand icons are trademarks of their respective owners. The use of these -trademarks does not indicate endorsement of the trademark holder by Font -Awesome, nor vice versa. **Please do not use brand logos for any purpose except -to represent the company, product, or service to which they refer.** +Font Awesome Free License +------------------------- + +Font Awesome Free is free, open source, and GPL friendly. You can use it for +commercial projects, open source projects, or really almost whatever you want. +Full Font Awesome Free license: https://fontawesome.com/license/free. + +# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/) +In the Font Awesome Free download, the CC BY 4.0 license applies to all icons +packaged as SVG and JS file types. + +# Fonts: SIL OFL 1.1 License (https://scripts.sil.org/OFL) +In the Font Awesome Free download, the SIL OFL license applies to all icons +packaged as web and desktop font files. + +# Code: MIT License (https://opensource.org/licenses/MIT) +In the Font Awesome Free download, the MIT license applies to all non-font and +non-icon files. + +# Attribution +Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font +Awesome Free files already contain embedded comments with sufficient +attribution, so you shouldn't need to do anything additional when using these +files normally. + +We've kept attribution comments terse, so we ask that you do not actively work +to remove them from files, especially code. They're a great way for folks to +learn about Font Awesome. + +# Brand Icons +All brand icons are trademarks of their respective owners. The use of these +trademarks does not indicate endorsement of the trademark holder by Font +Awesome, nor vice versa. **Please do not use brand logos for any purpose except +to represent the company, product, or service to which they refer.** diff --git a/public/vendor/fontawesome/webfonts/fa-brands-400.svg b/public/vendor/fontawesome/webfonts/fa-brands-400.svg index 4e48a46..69387b9 100644 --- a/public/vendor/fontawesome/webfonts/fa-brands-400.svg +++ b/public/vendor/fontawesome/webfonts/fa-brands-400.svg @@ -1,3717 +1,3717 @@ - - - - -Created by FontForge 20201107 at Tue Mar 16 10:15:04 2021 - By Robert Madole -Copyright (c) Font Awesome - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + +Created by FontForge 20201107 at Tue Mar 16 10:15:04 2021 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/vendor/fontawesome/webfonts/fa-regular-400.svg b/public/vendor/fontawesome/webfonts/fa-regular-400.svg index 9dba8c3..7184640 100644 --- a/public/vendor/fontawesome/webfonts/fa-regular-400.svg +++ b/public/vendor/fontawesome/webfonts/fa-regular-400.svg @@ -1,801 +1,801 @@ - - - - -Created by FontForge 20201107 at Tue Mar 16 10:15:04 2021 - By Robert Madole -Copyright (c) Font Awesome - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + +Created by FontForge 20201107 at Tue Mar 16 10:15:04 2021 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/vendor/fontawesome/webfonts/fa-solid-900.svg b/public/vendor/fontawesome/webfonts/fa-solid-900.svg index dce459d..c9ebdb2 100644 --- a/public/vendor/fontawesome/webfonts/fa-solid-900.svg +++ b/public/vendor/fontawesome/webfonts/fa-solid-900.svg @@ -1,5034 +1,5034 @@ - - - - -Created by FontForge 20201107 at Tue Mar 16 10:15:04 2021 - By Robert Madole -Copyright (c) Font Awesome - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + +Created by FontForge 20201107 at Tue Mar 16 10:15:04 2021 + By Robert Madole +Copyright (c) Font Awesome + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/controllers/composer.ts b/src/controllers/composer.ts index 7df1c0a..87987ea 100644 --- a/src/controllers/composer.ts +++ b/src/controllers/composer.ts @@ -1,141 +1,141 @@ -// This is one of the two example TypeScript files included with the NodeBB repository -// It is meant to serve as an example to assist you with your HW1 translation - -import nconf from 'nconf'; - -import { Request, Response, NextFunction } from 'express'; -import { TopicObject } from '../types'; - -import user from '../user'; -import plugins from '../plugins'; -import topics from '../topics'; -import posts from '../posts'; -import helpers from './helpers'; - -type ComposerBuildData = { - templateData: TemplateData -} - -type TemplateData = { - title: string, - disabled: boolean -} - -type Locals = { - metaTags: { [key: string]: string }; -} - -export async function get(req: Request, res: Response, callback: NextFunction): Promise { - res.locals.metaTags = { - ...res.locals.metaTags, - name: 'robots', - content: 'noindex', - }; - - const data: ComposerBuildData = await plugins.hooks.fire('filter:composer.build', { - req: req, - res: res, - next: callback, - templateData: {}, - }) as ComposerBuildData; - - if (res.headersSent) { - return; - } - if (!data || !data.templateData) { - return callback(new Error('[[error:invalid-data]]')); - } - - if (data.templateData.disabled) { - res.render('', { - title: '[[modules:composer.compose]]', - }); - } else { - data.templateData.title = '[[modules:composer.compose]]'; - res.render('compose', data.templateData); - } -} - -type ComposerData = { - uid: number, - req: Request, - timestamp: number, - content: string, - fromQueue: boolean, - tid?: number, - cid?: number, - title?: string, - tags?: string[], - thumb?: string, - noscript?: string -} - -type QueueResult = { - uid: number, - queued: boolean, - topicData: TopicObject, - pid: number -} - -type PostFnType = (data: ComposerData) => Promise; - -export async function post(req: Request & { uid: number }, res: Response): Promise { - const { body } = req; - const data: ComposerData = { - uid: req.uid, - req: req, - timestamp: Date.now(), - content: body.content, - fromQueue: false, - }; - req.body.noscript = 'true'; - - if (!data.content) { - return await helpers.noScriptErrors(req, res, '[[error:invalid-data]]', 400) as Promise; - } - - async function queueOrPost(postFn: PostFnType, data: ComposerData): Promise { - // The next line calls a function in a module that has not been updated to TS yet - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call - const shouldQueue: boolean = await posts.shouldQueue(req.uid, data) as boolean; - if (shouldQueue) { - delete data.req; - - // The next line calls a function in a module that has not been updated to TS yet - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call - return await posts.addToQueue(data) as QueueResult; - } - return await postFn(data); - } - - try { - let result: QueueResult; - if (body.tid) { - data.tid = body.tid; - result = await queueOrPost(topics.reply as PostFnType, data); - } else if (body.cid) { - data.cid = body.cid; - data.title = body.title; - data.tags = []; - data.thumb = ''; - result = await queueOrPost(topics.post as PostFnType, data); - } else { - throw new Error('[[error:invalid-data]]'); - } - if (result.queued) { - return res.redirect(`${nconf.get('relative_path') as string || '/'}?noScriptMessage=[[success:post-queued]]`); - } - const uid: number = result.uid ? result.uid : result.topicData.uid; - - // The next line calls a function in a module that has not been updated to TS yet - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call - user.updateOnlineUsers(uid); - - const path: string = result.pid ? `/post/${result.pid}` : `/topic/${result.topicData.slug}`; - res.redirect((nconf.get('relative_path') as string) + path); - } catch (err: unknown) { - if (err instanceof Error) { - await helpers.noScriptErrors(req, res, err.message, 400); - } - } -} +// This is one of the two example TypeScript files included with the NodeBB repository +// It is meant to serve as an example to assist you with your HW1 translation + +import nconf from 'nconf'; + +import { Request, Response, NextFunction } from 'express'; +import { TopicObject } from '../types'; + +import user from '../user'; +import plugins from '../plugins'; +import topics from '../topics'; +import posts from '../posts'; +import helpers from './helpers'; + +type ComposerBuildData = { + templateData: TemplateData +} + +type TemplateData = { + title: string, + disabled: boolean +} + +type Locals = { + metaTags: { [key: string]: string }; +} + +export async function get(req: Request, res: Response, callback: NextFunction): Promise { + res.locals.metaTags = { + ...res.locals.metaTags, + name: 'robots', + content: 'noindex', + }; + + const data: ComposerBuildData = await plugins.hooks.fire('filter:composer.build', { + req: req, + res: res, + next: callback, + templateData: {}, + }) as ComposerBuildData; + + if (res.headersSent) { + return; + } + if (!data || !data.templateData) { + return callback(new Error('[[error:invalid-data]]')); + } + + if (data.templateData.disabled) { + res.render('', { + title: '[[modules:composer.compose]]', + }); + } else { + data.templateData.title = '[[modules:composer.compose]]'; + res.render('compose', data.templateData); + } +} + +type ComposerData = { + uid: number, + req: Request, + timestamp: number, + content: string, + fromQueue: boolean, + tid?: number, + cid?: number, + title?: string, + tags?: string[], + thumb?: string, + noscript?: string +} + +type QueueResult = { + uid: number, + queued: boolean, + topicData: TopicObject, + pid: number +} + +type PostFnType = (data: ComposerData) => Promise; + +export async function post(req: Request & { uid: number }, res: Response): Promise { + const { body } = req; + const data: ComposerData = { + uid: req.uid, + req: req, + timestamp: Date.now(), + content: body.content, + fromQueue: false, + }; + req.body.noscript = 'true'; + + if (!data.content) { + return await helpers.noScriptErrors(req, res, '[[error:invalid-data]]', 400) as Promise; + } + + async function queueOrPost(postFn: PostFnType, data: ComposerData): Promise { + // The next line calls a function in a module that has not been updated to TS yet + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + const shouldQueue: boolean = await posts.shouldQueue(req.uid, data) as boolean; + if (shouldQueue) { + delete data.req; + + // The next line calls a function in a module that has not been updated to TS yet + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + return await posts.addToQueue(data) as QueueResult; + } + return await postFn(data); + } + + try { + let result: QueueResult; + if (body.tid) { + data.tid = body.tid; + result = await queueOrPost(topics.reply as PostFnType, data); + } else if (body.cid) { + data.cid = body.cid; + data.title = body.title; + data.tags = []; + data.thumb = ''; + result = await queueOrPost(topics.post as PostFnType, data); + } else { + throw new Error('[[error:invalid-data]]'); + } + if (result.queued) { + return res.redirect(`${nconf.get('relative_path') as string || '/'}?noScriptMessage=[[success:post-queued]]`); + } + const uid: number = result.uid ? result.uid : result.topicData.uid; + + // The next line calls a function in a module that has not been updated to TS yet + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + user.updateOnlineUsers(uid); + + const path: string = result.pid ? `/post/${result.pid}` : `/topic/${result.topicData.slug}`; + res.redirect((nconf.get('relative_path') as string) + path); + } catch (err: unknown) { + if (err instanceof Error) { + await helpers.noScriptErrors(req, res, err.message, 400); + } + } +} diff --git a/src/social.ts b/src/social.ts index f494add..8bc257b 100644 --- a/src/social.ts +++ b/src/social.ts @@ -1,65 +1,65 @@ -// This is one of the two example TypeScript files included with the NodeBB repository -// It is meant to serve as an example to assist you with your HW1 translation - -import _ from 'lodash'; -import plugins from './plugins'; -import db from './database'; - -import { Network } from './types'; - -let postSharing: Network[] | null = null; - -export async function getPostSharing(): Promise { - if (postSharing) { - return _.cloneDeep(postSharing); - } - - let networks: Network[] = [ - { - id: 'facebook', - name: 'Facebook', - class: 'fa-facebook', - activated: null, - }, - { - id: 'twitter', - name: 'Twitter', - class: 'fa-twitter', - activated: null, - }, - ]; - - networks = await plugins.hooks.fire('filter:social.posts', networks) as Network[]; - - // The next line calls a function in a module that has not been updated to TS yet - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call - const activated: string[] = await db.getSetMembers('social:posts.activated') as string[]; - - networks.forEach((network) => { - network.activated = activated.includes(network.id); - }); - - postSharing = networks; - return _.cloneDeep(networks); -} - -export async function getActivePostSharing(): Promise { - const networks: Network[] = await getPostSharing(); - return networks.filter(network => network && network.activated); -} - -export async function setActivePostSharingNetworks(networkIDs: string[]): Promise { - postSharing = null; - - // The next line calls a function in a module that has not been updated to TS yet - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call - await db.delete('social:posts.activated'); - - if (!networkIDs.length) { - return; - } - - // The next line calls a function in a module that has not been updated to TS yet - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call - await db.setAdd('social:posts.activated', networkIDs); -} +// This is one of the two example TypeScript files included with the NodeBB repository +// It is meant to serve as an example to assist you with your HW1 translation + +import _ from 'lodash'; +import plugins from './plugins'; +import db from './database'; + +import { Network } from './types'; + +let postSharing: Network[] | null = null; + +export async function getPostSharing(): Promise { + if (postSharing) { + return _.cloneDeep(postSharing); + } + + let networks: Network[] = [ + { + id: 'facebook', + name: 'Facebook', + class: 'fa-facebook', + activated: null, + }, + { + id: 'twitter', + name: 'Twitter', + class: 'fa-twitter', + activated: null, + }, + ]; + + networks = await plugins.hooks.fire('filter:social.posts', networks) as Network[]; + + // The next line calls a function in a module that has not been updated to TS yet + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + const activated: string[] = await db.getSetMembers('social:posts.activated') as string[]; + + networks.forEach((network) => { + network.activated = activated.includes(network.id); + }); + + postSharing = networks; + return _.cloneDeep(networks); +} + +export async function getActivePostSharing(): Promise { + const networks: Network[] = await getPostSharing(); + return networks.filter(network => network && network.activated); +} + +export async function setActivePostSharingNetworks(networkIDs: string[]): Promise { + postSharing = null; + + // The next line calls a function in a module that has not been updated to TS yet + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + await db.delete('social:posts.activated'); + + if (!networkIDs.length) { + return; + } + + // The next line calls a function in a module that has not been updated to TS yet + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call + await db.setAdd('social:posts.activated', networkIDs); +} diff --git a/src/types/admin.ts b/src/types/admin.ts index 761c75e..09cf7f7 100644 --- a/src/types/admin.ts +++ b/src/types/admin.ts @@ -1,25 +1,25 @@ -export type Stats = { - stats: Stat[]; -}; - -export type Stat = { - yesterday: number; - today: number; - lastweek: number; - thisweek: number; - lastmonth: number; - thismonth: number; - alltime: number; - dayIncrease: string; - dayTextClass: string; - weekIncrease: string; - weekTextClass: string; - monthIncrease: string; - monthTextClass: string; - name: string; -} & StatOptionalProperties; - -export type StatOptionalProperties = { - name: string; - href: string; -}; +export type Stats = { + stats: Stat[]; +}; + +export type Stat = { + yesterday: number; + today: number; + lastweek: number; + thisweek: number; + lastmonth: number; + thismonth: number; + alltime: number; + dayIncrease: string; + dayTextClass: string; + weekIncrease: string; + weekTextClass: string; + monthIncrease: string; + monthTextClass: string; + name: string; +} & StatOptionalProperties; + +export type StatOptionalProperties = { + name: string; + href: string; +}; diff --git a/src/types/breadcrumbs.ts b/src/types/breadcrumbs.ts index 336440e..a27811b 100644 --- a/src/types/breadcrumbs.ts +++ b/src/types/breadcrumbs.ts @@ -1,9 +1,9 @@ -export type Breadcrumbs = { - breadcrumbs: Breadcrumb[]; -}; - -export type Breadcrumb = { - text: string; - url: string; - cid: number; -}; +export type Breadcrumbs = { + breadcrumbs: Breadcrumb[]; +}; + +export type Breadcrumb = { + text: string; + url: string; + cid: number; +}; diff --git a/src/types/category.ts b/src/types/category.ts index 3683bf2..8a6ad65 100644 --- a/src/types/category.ts +++ b/src/types/category.ts @@ -1,31 +1,31 @@ -export type CategoryObject = { - cid: number; - name: string; - description: string; - descriptionParsed: string; - icon: string; - bgColor: string; - color: string; - slug: string; - parentCid: number; - topic_count: number; - post_count: number; - disabled: number; - order: number; - link: string; - numRecentReplies: number; - class: string; - imageClass: string; - isSection: number; - minTags: number; - maxTags: number; - postQueue: number; - totalPostCount: number; - totalTopicCount: number; - subCategoriesPerPage: number; -}; - -export type CategoryOptionalProperties = { - cid: number; - backgroundImage: string; -}; +export type CategoryObject = { + cid: number; + name: string; + description: string; + descriptionParsed: string; + icon: string; + bgColor: string; + color: string; + slug: string; + parentCid: number; + topic_count: number; + post_count: number; + disabled: number; + order: number; + link: string; + numRecentReplies: number; + class: string; + imageClass: string; + isSection: number; + minTags: number; + maxTags: number; + postQueue: number; + totalPostCount: number; + totalTopicCount: number; + subCategoriesPerPage: number; +}; + +export type CategoryOptionalProperties = { + cid: number; + backgroundImage: string; +}; diff --git a/src/types/chat.ts b/src/types/chat.ts index 319313f..62cfa13 100644 --- a/src/types/chat.ts +++ b/src/types/chat.ts @@ -1,41 +1,41 @@ -import { UserObjectSlim } from './user'; - -export type MessageObject = { - content: string; - timestamp: number; - fromuid: number; - roomId: number; - deleted: boolean; - system: boolean; - edited: number; - timestampISO: string; - editedISO: string; - messageId: number; - fromUser: UserObjectSlim; - self: number; - newSet: boolean; - cleanedContent: string; -}; - -export type RoomObject = { - owner: number; - roomId: number; - roomName: string; - groupChat: boolean; -}; - -export type RoomUserList = { - users: UserObjectSlim[]; -}; - -export type RoomObjectFull = { - isOwner: boolean; - users: UserObjectSlim[]; - canReply: boolean; - groupChat: boolean; - usernames: string; - maximumUsersInChatRoom: number; - maximumChatMessageLength: number; - showUserInput: boolean; - isAdminOrGlobalMod: boolean; -} & RoomObject & MessageObject; +import { UserObjectSlim } from './user'; + +export type MessageObject = { + content: string; + timestamp: number; + fromuid: number; + roomId: number; + deleted: boolean; + system: boolean; + edited: number; + timestampISO: string; + editedISO: string; + messageId: number; + fromUser: UserObjectSlim; + self: number; + newSet: boolean; + cleanedContent: string; +}; + +export type RoomObject = { + owner: number; + roomId: number; + roomName: string; + groupChat: boolean; +}; + +export type RoomUserList = { + users: UserObjectSlim[]; +}; + +export type RoomObjectFull = { + isOwner: boolean; + users: UserObjectSlim[]; + canReply: boolean; + groupChat: boolean; + usernames: string; + maximumUsersInChatRoom: number; + maximumChatMessageLength: number; + showUserInput: boolean; + isAdminOrGlobalMod: boolean; +} & RoomObject & MessageObject; diff --git a/src/types/commonProps.ts b/src/types/commonProps.ts index 99bb673..ff092c0 100644 --- a/src/types/commonProps.ts +++ b/src/types/commonProps.ts @@ -1,33 +1,33 @@ -import { TagObject } from './tag'; - -export type CommonProps = { - loggedIn: boolean; - relative_path: string; - template: Template; - url: string; - bodyClass: string; - _header: Header; - widgets: Widget[]; -}; - -export interface Template { - name: string; -} - -export interface Header { - tags: TagObject[]; - link: Link[]; -} - -export interface Link { - rel: string; - type: string; - href: string; - title: string; - sizes: string; - as: string; -} - -export interface Widget { - html: string; -} +import { TagObject } from './tag'; + +export type CommonProps = { + loggedIn: boolean; + relative_path: string; + template: Template; + url: string; + bodyClass: string; + _header: Header; + widgets: Widget[]; +}; + +export interface Template { + name: string; +} + +export interface Header { + tags: TagObject[]; + link: Link[]; +} + +export interface Link { + rel: string; + type: string; + href: string; + title: string; + sizes: string; + as: string; +} + +export interface Widget { + html: string; +} diff --git a/src/types/error.ts b/src/types/error.ts index ba1e709..7ad5221 100644 --- a/src/types/error.ts +++ b/src/types/error.ts @@ -1,5 +1,5 @@ -import { StatusObject } from './status'; - -export type ErrorObject = { - status: StatusObject; -}; +import { StatusObject } from './status'; + +export type ErrorObject = { + status: StatusObject; +}; diff --git a/src/types/flag.ts b/src/types/flag.ts index ef18330..bafb4d6 100644 --- a/src/types/flag.ts +++ b/src/types/flag.ts @@ -1,55 +1,55 @@ -import { UserObjectSlim } from './user'; - -export type FlagHistoryObject = { - history: History[]; -}; - -interface History { - uid: number; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - fields: any; - meta: Meta[]; - datetime: number; - datetimeISO: string; - user: UserObjectSlim; -} - -interface Meta { - key: string; - value: string; - labelClass: string; -} - -export type FlagNotesObject = { - notes: Note[]; -}; - - -export interface Note { - uid: number; - content: string; - datetime: number; - datetimeISO: string; - user: UserObjectSlim; -} - -export type FlagObject = { - state: string; - flagId: number; - type: string; - targetId: number; - targetUid: number; - datetime: number; - datetimeISO: string; - target_readable: string; - target: object; - assignee: number; - reports: Reports; -} & FlagHistoryObject & FlagNotesObject; - -export interface Reports { - value: string; - timestamp: number; - timestampISO: string; - reporter: UserObjectSlim; -} +import { UserObjectSlim } from './user'; + +export type FlagHistoryObject = { + history: History[]; +}; + +interface History { + uid: number; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + fields: any; + meta: Meta[]; + datetime: number; + datetimeISO: string; + user: UserObjectSlim; +} + +interface Meta { + key: string; + value: string; + labelClass: string; +} + +export type FlagNotesObject = { + notes: Note[]; +}; + + +export interface Note { + uid: number; + content: string; + datetime: number; + datetimeISO: string; + user: UserObjectSlim; +} + +export type FlagObject = { + state: string; + flagId: number; + type: string; + targetId: number; + targetUid: number; + datetime: number; + datetimeISO: string; + target_readable: string; + target: object; + assignee: number; + reports: Reports; +} & FlagHistoryObject & FlagNotesObject; + +export interface Reports { + value: string; + timestamp: number; + timestampISO: string; + reporter: UserObjectSlim; +} diff --git a/src/types/group.ts b/src/types/group.ts index c930d0f..22f2dde 100644 --- a/src/types/group.ts +++ b/src/types/group.ts @@ -1,44 +1,44 @@ -import { UserObjectSlim } from './user'; - -export type GroupDataObject = { - name: string; - slug: string; - createtime: number; - userTitle: number; - userTitleEscaped: number; - userTitleEnabled: number; - description: string; - memberCount: number; - hidden: number; - system: number; - private: number; - disableJoinRequests: number; - disableLeave: number; - 'cover:url': string; - 'cover:thumb:url': string; - 'cover:position': string; - nameEncoded: string; - displayName: string; - labelColor: string; - textColor: string; - icon: string; - createtimeISO: string; - memberPostCids: string; - memberPostCidsArray: number[]; -}; - -export type GroupFullObject = GroupDataObject & GroupFullObjectProperties; - -export type GroupFullObjectProperties = { - descriptionParsed: string; - members: UserObjectSlim[]; - membersNextStart: number; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - pending: any[]; - // eslint-disable-next-line @typescript-eslint/no-explicit-any - invited: any[]; - isMember: boolean; - isPending: boolean; - isInvited: boolean; - isOwner: boolean; -}; +import { UserObjectSlim } from './user'; + +export type GroupDataObject = { + name: string; + slug: string; + createtime: number; + userTitle: number; + userTitleEscaped: number; + userTitleEnabled: number; + description: string; + memberCount: number; + hidden: number; + system: number; + private: number; + disableJoinRequests: number; + disableLeave: number; + 'cover:url': string; + 'cover:thumb:url': string; + 'cover:position': string; + nameEncoded: string; + displayName: string; + labelColor: string; + textColor: string; + icon: string; + createtimeISO: string; + memberPostCids: string; + memberPostCidsArray: number[]; +}; + +export type GroupFullObject = GroupDataObject & GroupFullObjectProperties; + +export type GroupFullObjectProperties = { + descriptionParsed: string; + members: UserObjectSlim[]; + membersNextStart: number; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + pending: any[]; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + invited: any[]; + isMember: boolean; + isPending: boolean; + isInvited: boolean; + isOwner: boolean; +}; diff --git a/src/types/index.ts b/src/types/index.ts index 69444fc..11eb9e9 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,14 +1,14 @@ -export * from './admin'; -export * from './breadcrumbs'; -export * from './category'; -export * from './commonProps'; -export * from './error'; -export * from './group'; -export * from './pagination'; -export * from './post'; -export * from './settings'; -export * from './social'; -export * from './status'; -export * from './tag'; -export * from './topic'; -export * from './user'; +export * from './admin'; +export * from './breadcrumbs'; +export * from './category'; +export * from './commonProps'; +export * from './error'; +export * from './group'; +export * from './pagination'; +export * from './post'; +export * from './settings'; +export * from './social'; +export * from './status'; +export * from './tag'; +export * from './topic'; +export * from './user'; diff --git a/src/types/pagination.ts b/src/types/pagination.ts index 06141af..c1a3159 100644 --- a/src/types/pagination.ts +++ b/src/types/pagination.ts @@ -1,30 +1,30 @@ -export type PaginationObject = { - pagination: Pagination; -}; - -export interface Pagination { - prev: ActivePage; - next: ActivePage; - first: ActivePage; - last: ActivePage; - rel: Relation[]; - pages: Page[]; - currentPage: number; - pageCount: number; -} - -interface ActivePage { - page: number; - active: boolean; -} - -interface Relation { - rel: string; - href: string; -} - -interface Page { - page: number; - active: boolean; - qs: string; -} +export type PaginationObject = { + pagination: Pagination; +}; + +export interface Pagination { + prev: ActivePage; + next: ActivePage; + first: ActivePage; + last: ActivePage; + rel: Relation[]; + pages: Page[]; + currentPage: number; + pageCount: number; +} + +interface ActivePage { + page: number; + active: boolean; +} + +interface Relation { + rel: string; + href: string; +} + +interface Page { + page: number; + active: boolean; + qs: string; +} diff --git a/src/types/post.ts b/src/types/post.ts index 982b736..a696cbf 100644 --- a/src/types/post.ts +++ b/src/types/post.ts @@ -1,21 +1,21 @@ -import { CategoryObject } from './category'; -import { TopicObject } from './topic'; -import { UserObjectSlim } from './user'; - -export type PostObject = { - pid: number; - tid: number; - content: string; - uid: number; - timestamp: number; - deleted: boolean; - upvotes: number; - downvotes: number; - votes: number; - timestampISO: string; - user: UserObjectSlim; - topic: TopicObject; - category: CategoryObject; - isMainPost: boolean; - replies: number; -}; +import { CategoryObject } from './category'; +import { TopicObject } from './topic'; +import { UserObjectSlim } from './user'; + +export type PostObject = { + pid: number; + tid: number; + content: string; + uid: number; + timestamp: number; + deleted: boolean; + upvotes: number; + downvotes: number; + votes: number; + timestampISO: string; + user: UserObjectSlim; + topic: TopicObject; + category: CategoryObject; + isMainPost: boolean; + replies: number; +}; diff --git a/src/types/settings.ts b/src/types/settings.ts index 79b0018..585ea41 100644 --- a/src/types/settings.ts +++ b/src/types/settings.ts @@ -1,41 +1,41 @@ -export type SettingsObject = { - showemail: boolean; - usePagination: boolean; - topicsPerPage: number; - postsPerPage: number; - topicPostSort: string; - openOutgoingLinksInNewTab: boolean; - dailyDigestFreq: string; - showfullname: boolean; - followTopicsOnCreate: boolean; - followTopicsOnReply: boolean; - restrictChat: boolean; - topicSearchEnabled: boolean; - updateUrlWithPostIndex: boolean; - categoryTopicSort: string; - userLang: string; - bootswatchSkin: string; - homePageRoute: string; - scrollToMyPost: boolean; - 'notificationType_new-chat': string; - 'notificationType_new-group-chat': string; - 'notificationType_new-reply': string; - 'notificationType_post-edit': string; - sendChatNotifications: boolean; - sendPostNotifications: boolean; - notificationType_upvote: string; - 'notificationType_new-topic': string; - notificationType_follow: string; - 'notificationType_group-invite': string; - 'notificationType_group-leave': string; - upvoteNotifFreq: string; - notificationType_mention: string; - acpLang: string; - 'notificationType_new-register': string; - 'notificationType_post-queue': string; - 'notificationType_new-post-flag': string; - 'notificationType_new-user-flag': string; - categoryWatchState: string; - 'notificationType_group-request-membership': string; - uid: number; -}; +export type SettingsObject = { + showemail: boolean; + usePagination: boolean; + topicsPerPage: number; + postsPerPage: number; + topicPostSort: string; + openOutgoingLinksInNewTab: boolean; + dailyDigestFreq: string; + showfullname: boolean; + followTopicsOnCreate: boolean; + followTopicsOnReply: boolean; + restrictChat: boolean; + topicSearchEnabled: boolean; + updateUrlWithPostIndex: boolean; + categoryTopicSort: string; + userLang: string; + bootswatchSkin: string; + homePageRoute: string; + scrollToMyPost: boolean; + 'notificationType_new-chat': string; + 'notificationType_new-group-chat': string; + 'notificationType_new-reply': string; + 'notificationType_post-edit': string; + sendChatNotifications: boolean; + sendPostNotifications: boolean; + notificationType_upvote: string; + 'notificationType_new-topic': string; + notificationType_follow: string; + 'notificationType_group-invite': string; + 'notificationType_group-leave': string; + upvoteNotifFreq: string; + notificationType_mention: string; + acpLang: string; + 'notificationType_new-register': string; + 'notificationType_post-queue': string; + 'notificationType_new-post-flag': string; + 'notificationType_new-user-flag': string; + categoryWatchState: string; + 'notificationType_group-request-membership': string; + uid: number; +}; diff --git a/src/types/social.ts b/src/types/social.ts index 9c9847f..e2f5934 100644 --- a/src/types/social.ts +++ b/src/types/social.ts @@ -1,6 +1,6 @@ -export type Network = { - id: string; - name: string; - class: string; - activated: boolean | null; -}; +export type Network = { + id: string; + name: string; + class: string; + activated: boolean | null; +}; diff --git a/src/types/status.ts b/src/types/status.ts index 9432fa2..51e3be9 100644 --- a/src/types/status.ts +++ b/src/types/status.ts @@ -1,4 +1,4 @@ -export type StatusObject = { - code: string; - message: string; -}; +export type StatusObject = { + code: string; + message: string; +}; diff --git a/src/types/tag.ts b/src/types/tag.ts index 46a8fd0..8ce768a 100644 --- a/src/types/tag.ts +++ b/src/types/tag.ts @@ -1,7 +1,7 @@ -export type TagObject = { - value: string; - score: number; - valueEscaped: string; - color: string; - bgColor: string; -}; +export type TagObject = { + value: string; + score: number; + valueEscaped: string; + color: string; + bgColor: string; +}; diff --git a/src/types/topic.ts b/src/types/topic.ts index 0d2c08f..8c08567 100644 --- a/src/types/topic.ts +++ b/src/types/topic.ts @@ -1,81 +1,81 @@ -import { CategoryObject } from './category'; -import { TagObject } from './tag'; -import { UserObjectSlim } from './user'; - -export type TopicObject = - TopicObjectSlim & TopicObjectCoreProperties & TopicObjectOptionalProperties; - -export type TopicObjectCoreProperties = { - lastposttime: number; - category: CategoryObject; - user: UserObjectSlim; - teaser: Teaser; - tags: TagObject[]; - isOwner: boolean; - ignored: boolean; - unread: boolean; - bookmark: number; - unreplied: boolean; - icons: string[]; -}; - -export type TopicObjectOptionalProperties = { - tid: number; - thumb: string; - pinExpiry: number; - pinExpiryISO: string; - index: number; -}; - -interface Teaser { - pid: number; - uid: number; - timestamp: number; - tid: number; - content: string; - timestampISO: string; - user: UserObjectSlim; - index: number; -} - -export type TopicObjectSlim = TopicSlimProperties & TopicSlimOptionalProperties; - -export type TopicSlimProperties = { - tid: number; - uid: number; - cid: number; - title: string; - slug: string; - mainPid: number; - postcount: string; - viewcount: string; - postercount: string; - scheduled: string; - deleted: string; - deleterUid: string; - titleRaw: string; - locked: string; - pinned: number; - timestamp: string; - timestampISO: number; - lastposttime: string; - lastposttimeISO: number; - pinExpiry: number; - pinExpiryISO: number; - upvotes: string; - downvotes: string; - votes: string; - teaserPid: number | string; - thumbs: Thumb[]; -}; - -export type Thumb = { - id: number; - name: string; - url: string; -}; - -export type TopicSlimOptionalProperties = { - tid: number; - numThumbs: number; -}; +import { CategoryObject } from './category'; +import { TagObject } from './tag'; +import { UserObjectSlim } from './user'; + +export type TopicObject = + TopicObjectSlim & TopicObjectCoreProperties & TopicObjectOptionalProperties; + +export type TopicObjectCoreProperties = { + lastposttime: number; + category: CategoryObject; + user: UserObjectSlim; + teaser: Teaser; + tags: TagObject[]; + isOwner: boolean; + ignored: boolean; + unread: boolean; + bookmark: number; + unreplied: boolean; + icons: string[]; +}; + +export type TopicObjectOptionalProperties = { + tid: number; + thumb: string; + pinExpiry: number; + pinExpiryISO: string; + index: number; +}; + +interface Teaser { + pid: number; + uid: number; + timestamp: number; + tid: number; + content: string; + timestampISO: string; + user: UserObjectSlim; + index: number; +} + +export type TopicObjectSlim = TopicSlimProperties & TopicSlimOptionalProperties; + +export type TopicSlimProperties = { + tid: number; + uid: number; + cid: number; + title: string; + slug: string; + mainPid: number; + postcount: string; + viewcount: string; + postercount: string; + scheduled: string; + deleted: string; + deleterUid: string; + titleRaw: string; + locked: string; + pinned: number; + timestamp: string; + timestampISO: number; + lastposttime: string; + lastposttimeISO: number; + pinExpiry: number; + pinExpiryISO: number; + upvotes: string; + downvotes: string; + votes: string; + teaserPid: number | string; + thumbs: Thumb[]; +}; + +export type Thumb = { + id: number; + name: string; + url: string; +}; + +export type TopicSlimOptionalProperties = { + tid: number; + numThumbs: number; +}; diff --git a/src/types/user.ts b/src/types/user.ts index a657277..6028a7f 100644 --- a/src/types/user.ts +++ b/src/types/user.ts @@ -1,133 +1,133 @@ -import { GroupFullObject } from './group'; -import { StatusObject } from './status'; - -export type UserObjectSlim = { - uid: number; - username: string; - displayname: string; - userslug: string; - picture: string; - status: StatusObject; - postcount: number; - reputation: number; - 'email:confirmed': number; - lastonline: number; - flags: number; - banned: number; - 'banned:expire': number; - joindate: number; - accounttype: string; - 'icon:text': string; - 'icon:bgColor': string; - joindateISO: string; - lastonlineISO: string; - banned_until: number; - banned_until_readable: string; -}; - -export type UserObjectACP = UserObjectSlim & { - administrator: boolean; - ip: string; - ips: string[]; -}; - -export type UserObject = UserObjectSlim & { - email: string; - fullname: string; - location: string; - birthday: string; - website: string; - aboutme: string; - signature: string; - uploadedpicture: string; - profileviews: number; - topiccount: number; - lastposttime: number; - followerCount: number; - followingCount: number; - 'cover:url': string; - 'cover:position': string; - groupTitle: string; - groupTitleArray: string[]; -}; - -export type UserObjectFull = UserObject & { - aboutmeParsed: string; - age: number; - emailClass: string; - ips: string[]; - moderationNote: string; - counts: Counts; - isBlocked: boolean; - blocksCount: number; - yourid: number; - theirid: number; - isTargetAdmin: boolean; - isAdmin: boolean; - isGlobalModerator: boolean; - isModerator: boolean; - isAdminOrGlobalModerator: boolean; - isAdminOrGlobalModeratorOrModerator: boolean; - isSelfOrAdminOrGlobalModerator: boolean; - canEdit: boolean; - canBan: boolean; - canFlag: boolean; - canChangePassword: boolean; - isSelf: boolean; - isFollowing: boolean; - hasPrivateChat: number; - showHidden: boolean; - groups: GroupFullObject[]; - disableSignatures: boolean; - 'reputation:disabled': boolean; - 'downvote:disabled': boolean; - profile_links: ProfileLink[]; - sso: SSO[]; - websiteLink: string; - websiteName: string; - 'username:disableEdit': number; - 'email:disableEdit': number; -}; - -export type Counts = { - best: number; - blocks: number; - bookmarks: number; - categoriesWatched: number; - downvoted: number; - followers: number; - following: number; - groups: number; - ignored: number; - posts: number; - topics: number; - uploaded: number; - upvoted: number; - watched: number; -}; - -export type ProfileLink = { - id: string; - route: string; - name: string; - visibility: Visibility; - public: boolean; - icon: string; -}; - -export type Visibility = { - self: boolean; - other: boolean; - moderator: boolean; - globalMod: boolean; - admin: boolean; - canViewInfo: boolean; -}; - -export type SSO = { - associated: boolean; - url: string; - name: string; - icon: string; - deathUrl: string; -}; +import { GroupFullObject } from './group'; +import { StatusObject } from './status'; + +export type UserObjectSlim = { + uid: number; + username: string; + displayname: string; + userslug: string; + picture: string; + status: StatusObject; + postcount: number; + reputation: number; + 'email:confirmed': number; + lastonline: number; + flags: number; + banned: number; + 'banned:expire': number; + joindate: number; + accounttype: string; + 'icon:text': string; + 'icon:bgColor': string; + joindateISO: string; + lastonlineISO: string; + banned_until: number; + banned_until_readable: string; +}; + +export type UserObjectACP = UserObjectSlim & { + administrator: boolean; + ip: string; + ips: string[]; +}; + +export type UserObject = UserObjectSlim & { + email: string; + fullname: string; + location: string; + birthday: string; + website: string; + aboutme: string; + signature: string; + uploadedpicture: string; + profileviews: number; + topiccount: number; + lastposttime: number; + followerCount: number; + followingCount: number; + 'cover:url': string; + 'cover:position': string; + groupTitle: string; + groupTitleArray: string[]; +}; + +export type UserObjectFull = UserObject & { + aboutmeParsed: string; + age: number; + emailClass: string; + ips: string[]; + moderationNote: string; + counts: Counts; + isBlocked: boolean; + blocksCount: number; + yourid: number; + theirid: number; + isTargetAdmin: boolean; + isAdmin: boolean; + isGlobalModerator: boolean; + isModerator: boolean; + isAdminOrGlobalModerator: boolean; + isAdminOrGlobalModeratorOrModerator: boolean; + isSelfOrAdminOrGlobalModerator: boolean; + canEdit: boolean; + canBan: boolean; + canFlag: boolean; + canChangePassword: boolean; + isSelf: boolean; + isFollowing: boolean; + hasPrivateChat: number; + showHidden: boolean; + groups: GroupFullObject[]; + disableSignatures: boolean; + 'reputation:disabled': boolean; + 'downvote:disabled': boolean; + profile_links: ProfileLink[]; + sso: SSO[]; + websiteLink: string; + websiteName: string; + 'username:disableEdit': number; + 'email:disableEdit': number; +}; + +export type Counts = { + best: number; + blocks: number; + bookmarks: number; + categoriesWatched: number; + downvoted: number; + followers: number; + following: number; + groups: number; + ignored: number; + posts: number; + topics: number; + uploaded: number; + upvoted: number; + watched: number; +}; + +export type ProfileLink = { + id: string; + route: string; + name: string; + visibility: Visibility; + public: boolean; + icon: string; +}; + +export type Visibility = { + self: boolean; + other: boolean; + moderator: boolean; + globalMod: boolean; + admin: boolean; + canViewInfo: boolean; +}; + +export type SSO = { + associated: boolean; + url: string; + name: string; + icon: string; + deathUrl: string; +}; diff --git a/src/upgrades/TEMPLATE b/src/upgrades/TEMPLATE index 23dd3d1..ad7328e 100644 --- a/src/upgrades/TEMPLATE +++ b/src/upgrades/TEMPLATE @@ -1,14 +1,14 @@ -'use strict'; - -const db = require('../../database'); - -module.exports = { - // you should use spaces - // the underscores are there so you can double click to select the whole thing - name: 'User_friendly_upgrade_script_name', - // remember, month is zero-indexed (so January is 0, December is 11) - timestamp: Date.UTC(2020, 0, 1), - method: async () => { - // Do stuff here... - }, -}; +'use strict'; + +const db = require('../../database'); + +module.exports = { + // you should use spaces + // the underscores are there so you can double click to select the whole thing + name: 'User_friendly_upgrade_script_name', + // remember, month is zero-indexed (so January is 0, December is 11) + timestamp: Date.UTC(2020, 0, 1), + method: async () => { + // Do stuff here... + }, +}; diff --git a/test/.eslintrc b/test/.eslintrc index 4dea92c..d3b453a 100644 --- a/test/.eslintrc +++ b/test/.eslintrc @@ -1,8 +1,8 @@ -{ - "env": { - "mocha": true - }, - "rules": { - "no-unused-vars": "off" - } -} +{ + "env": { + "mocha": true + }, + "rules": { + "no-unused-vars": "off" + } +}