Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(authentication): create authentication module #330

Merged
merged 43 commits into from
Aug 21, 2020
Merged

feat(authentication): create authentication module #330

merged 43 commits into from
Aug 21, 2020

Conversation

bzp2010
Copy link
Contributor

@bzp2010 bzp2010 commented Jul 23, 2020

This pull request creates an authentication module to prevent unauthorized access.

LoginMethod

  • It provides an extensible pluggable mechanism to extend the user-defined authentication method.
  • It provides an interface definition file. As long as the methods specified in the interface are implemented, a new authentication method can be created.

Implemented LoginMethod

Password Mode

  • frontend
  • backend [temporarily removed]

Example Mode

  • frontend

@juzhiyuan
Copy link
Member

@bzp2010 Do we have API support currently? APISIX or manager API?

@bzp2010
Copy link
Contributor Author

bzp2010 commented Jul 23, 2020

@juzhiyuan It will be built into the manager API. It's not finished yet. Working in Progress.

@bzp2010
Copy link
Contributor Author

bzp2010 commented Jul 31, 2020

The frontend of authentication module has been basically completed. The modification to the Manager API in this pull request has been temporarily removed, because code confusion. A new pull request will be created to modify it, and change the connect function in frontend.
This pull request can be review first.

Finished

  • User authentication framework
  • User LoginMethod interface definion
  • Create router item

Unfinished

  • Connect to Manager API

@bzp2010 bzp2010 marked this pull request as ready for review July 31, 2020 15:30
Copy link
Member

@juzhiyuan juzhiyuan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@juzhiyuan
Copy link
Member

  1. user/login seems not working :DD
  2. The title for Settings is broken :DD

@bzp2010
Copy link
Contributor Author

bzp2010 commented Aug 2, 2020

  1. user/login seems not working :DD
  2. The title for Settings is broken :DD

I tried to pull the latest master branch code. I didn't find these cases when I ran it with yarn run start.
At the same time, we didn't find these cases in the test domain name provided by netlify.
such as https://deploy-preview-330--apisix-dashboard.netlify.app/user/login and https://deploy-preview-330--apisix-dashboard.netlify.app/settings

By the way, user/login can currently use admin/admin to test login, and the docking with the Manager API will change after completion.

@juzhiyuan
Copy link
Member

I noticed that user/login will redirect to settings here[1], not sure if it's ok here.

[1] https://deploy-preview-330--apisix-dashboard.netlify.app/settings

@juzhiyuan
Copy link
Member

Oh! I noticed we may DO NOT need to import every i18n file under pages/locale, umi.js will import them automatically, you could have a try.

@bzp2010
Copy link
Contributor Author

bzp2010 commented Aug 2, 2020

I noticed that user/login will redirect to settings here[1], not sure if it's ok here.

[1] https://deploy-preview-330--apisix-dashboard.netlify.app/settings

If you directly access /user/login and redirect to /settings, it is not normal. After I forced a cache refresh in netlify, there was no redirect.
In the commit just now, I added the function of redirect to the index page in the callback after login.

Oh! I noticed we may DO NOT need to import every i18n file under pages/locale, umi.js will import them automatically, you could have a try.

Ok, I will try.

remove import i18n file of user module manually and try auto import by umi.js
@juzhiyuan
Copy link
Member

juzhiyuan commented Aug 6, 2020

I noticed that user/login will redirect to settings here[1], not sure if it's ok here.
[1] https://deploy-preview-330--apisix-dashboard.netlify.app/settings

If you directly access /user/login and redirect to /settings, it is not normal. After I forced a cache refresh in netlify, there was no redirect.
In the commit just now, I added the function of redirect to the index page in the callback after login.

Oh! I noticed we may DO NOT need to import every i18n file under pages/locale, umi.js will import them automatically, you could have a try.

Ok, I will try.

https://deploy-preview-330--apisix-dashboard.netlify.app/settings is still not working for me, it will redirect to /settings.

@juzhiyuan
Copy link
Member

Oh when visiting the demo site for the first time, because there has no API address in the local storage, so we MUST submit the form in /settings page, then it will work as expected.

@bzp2010
Copy link
Contributor Author

bzp2010 commented Aug 6, 2020

Oh when visiting the demo site for the first time, because there has no API address in the local storage, so we MUST submit the form in /settings page, then it will work as expected.

Yes, this process will be adjusted after the backend part is completed.

@juzhiyuan
Copy link
Member

Could we convert this to Draft(I see there has a convert to draft tip on the top right panel)? And you can make it ready anytime when it’s ready :D

@bzp2010 bzp2010 marked this pull request as draft August 16, 2020 04:17
@bzp2010
Copy link
Contributor Author

bzp2010 commented Aug 16, 2020

So far, I think the basic functionality has been completed, requiring code review and more testing to check for logical or coding errors.

some inspection items

  • frontend and bac end user authentication logic
  • frontend automatically transfer the non logged in users to the login page
  • browser compatibility
  • and more

@bzp2010 bzp2010 marked this pull request as ready for review August 16, 2020 07:05
Copy link
Member

@juzhiyuan juzhiyuan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. ASF Header for both Golang and FE.

@@ -84,6 +85,9 @@ var (
ApisixConsumerUpdateError = Message{"010703", "APISIX Consumer update failed", 500}
ApisixConsumerDeleteError = Message{"010704", "APISIX Consumer delete failed", 500}
DuplicateUserName = Message{"010705", "Duplicate consumer username", 400}

// 99 authentication
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@nic-chen @gxthrj OK, this PR uses 99 as Authentication code.

@juzhiyuan
Copy link
Member

Any updates here?

@bzp2010
Copy link
Contributor Author

bzp2010 commented Aug 21, 2020

The listed problems have been fixed.

Copy link
Member

@juzhiyuan juzhiyuan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@juzhiyuan juzhiyuan merged commit 98d488b into apache:master Aug 21, 2020
LiteSun added a commit to LiteSun/incubator-apisix-dashboard that referenced this pull request Aug 26, 2020
* add: Determine duplicate names api for route & upstream (apache#305)

* fix: transaction in routes and upstreams (apache#306)

* add transaction for ssl and consumer (apache#308)

* update ci/cd for api (apache#307)

* update github actions for api ci cd

* fix: working-directory

* fix error

* fix: step name

* fix: mysql config for github action

* test

* use default config

* test: add e2e test for ssl and consumer (apache#309)

* test: add e2e test for ssl and consumer

* fix:  change assert to avoid  the mutual influence of route and service test

* remove useless code

* Feat: added Route Consumer and Upstream (apache#304)

* feat: added routes

* feat: added Consumer

* feat: added upstream

* feat: update SSL

* fix: routes

* feat: added commit command

* feat(route): set empty array for upstreamHeaderList

* fix: e2e test use the same function to set up router (apache#310)

* fix: return all objects when search route & upstream (apache#311)

* fix: route search

* fix: upstream search

* fix(deploy): added missing yarn.lock

* fix: proxy-rewrite plugin in upstream (apache#312)

* fix(SSL): search api

* docs: added tips when deployment

* feat(Deploy): use node alpine image

* fix(Route): set required field for custom redirect

* fix(Route): check if redirect is empty object

* fix(Deploy): add Python installation in dockerfile (apache#316)

Signed-off-by: imjoey <[email protected]>

* fix(Route): update desc for status code

* fix: proxy-path default type is static (apache#318)

* add proxyRewrite test (apache#319)

* feat: bump dependencies version (apache#320)

* feat(Deploy): update Dockerfile

* feat(Deploy): update Deploy Dockerfile

* feat(Pages): update pages (apache#324)

* feat(Pages): update pages

* chore: update routes

* fix(Route): omit upstream_id when not exist

* i18n consumer (apache#325)

* i18n ssl (apache#335)

* nationalization PluginPage component (apache#323)

* i18n upstream (apache#334)

* feat(i18n): set module (apache#336)

* i18n set

* change set to setting

* feat(i18n): metrics module (apache#326)

* i18n metrics

* combine import

* feat(i18n): route module (apache#327)

* i18n route

* combine import

* doc: sync config.yaml from the latest version of APISIX (apache#344)

* i18n route (apache#342)

* i18n actionbar (apache#343)

* fix: transform vars error (apache#347)

* feat(i18n): pluginpage component (apache#345)

* i18n pluginpage

* change pluginpage to PluginPage

* feature: support run in mac system (apache#349)

* combine import (apache#348)

* i18n menu (apache#351)

* i18n PluginPage (apache#350)

* feat: prepare to release (apache#352)

* feat(ManagerAPI): added ASF header

* feat(FE): aded ASF Header

* feat(FE): added ASF header

* fix(FE): update PluginDrawer

* feat: remove some images

* feat: added LICENSE

* feat: update Version

* feat: added NOTICE & CODE_OF_CONDUCT

* feat: added initial CHANGELOG

* feat: rename CODE_OF_CONDUCT

* feat: revert version

* feat: update LICENSE

* feat: update License

* feat(conf): update default preview API (apache#353)

* doc:  add install doc for manager-api (apache#355)

* doc: add install doc for manager-api

* doc: modify folder from build to run

* doc: add ASF header

* fix(ci): resolve lint failures (apache#354)

* fix(deploy): failed to start manager_api (apache#363)

Signed-off-by: imjoey <[email protected]>

* feat(i18n): modify some i18n according to the proposal#331 (apache#366)

* Create CONTRIBUTING.md (apache#368)

* Create CONTRIBUTING.md

* Create ISSUE_TEMPLATE

* Create PULL_REQUEST_TEMPLATE

* doc: remove all ‘incubator’ (apache#367)

* feat(deploy): set gen-config-yaml.sh executable (apache#362)

This also would simplify the docs.

Signed-off-by: imjoey <[email protected]>

* feat(i18n): Use auto load i18n (apache#332) (apache#371)

* Create ci.yml (apache#372)

* feat: release 1.5 (apache#364)

* Feat release 1.5 (apache#358)

* feat(doc): update README

* feat: update CHANGELOG

* doc: add usage of dashbaord

* Revert "doc: add usage of dashbaord"

This reverts commit 5a08c7f.

* feat(Doc): update deployment

* feat(Doc): update the deployment

* feat(Doc): update the deployment

* feat: remove incubator text

* doc: modify doc for manager-api runing in local

* feat(Doc): update README

* doc: check env variables and give run.sh power to execute

* feat(Doc): update Deployment

* feat(Doc): update deployment

* doc: modify manager-api build

* feat: update ignore file

Co-authored-by: kv <[email protected]>
Co-authored-by: 琚致远 <[email protected]>

* feat: cherry-pick 4fd0ce7

* feat(compose): remove images

* feat: added line

Co-authored-by: kv <[email protected]>
Co-authored-by: 琚致远 <[email protected]>

* feat: Unified access entrance, only the dashboard port is exposed to … (apache#370)

* feat: Unified access entrance, only the dashboard port is exposed to the outside

* add EOL

* docs: create I18N_USER_GUIDE.md (apache#373)

* docs: create I18N_USER_GUIDE.md

* docs: modify I18N_USER_GUIDE.md

* feat(Doc): added deploy doc for docker (apache#376)

* feat(Doc): added deploy doc for docker

* feat: added CD

* feat(Netlify): added proxy

* feat: update API

* feat: remove console

* feat(Netlify): update redirect rule

* feat: update README

* feat: update README

* update go module proxy (apache#378)

* Update README.md (apache#379)

* Update README.md

* Update README.md

* Create Preview.md

* feat(Doc): added snapshots for Preview

* feat(Doc): update images

* feat(Doc): update images

* Update README.md

* Update netlify.toml

* feat(route): route add params mapping feature (apache#375) (apache#377)

* feat(doc): update deploy manually doc

* fix: mv config.yml to config-default.yml in the latest version of apisix (apache#383)

* fix: wget config-default.yaml the output file need to be named config.yaml (apache#384)

* fix apache#386 wget special output file use -O (apache#387)

* feat(authentication): create authentication module (apache#330)

* feat(authentication): create module typing definition

* feat(authentication): create Login page

* feat(authentication): update typing definition

* feat(authentication): add centent to Login page

* feat(authentication): update typing definition

* feat(authentication): update Login page to add Password and Test method

* feat(authentication): update typing definition to add check and submit function

* feat(authentication): move Test login method to Example

* feat(authentication): add check and submit function

* feat(authentication): add submit function in Login page

* feat(authentication): add test to Password login method

* feat(authentication): change example LoginMethod text

* feat(authentication): add i18n content

* feat(authentication): redirect to index when login success

* feat(i18n): update i18n file import
remove import i18n file of user module manually and try auto import by umi.js

* feat(authentication): create authentication configure items

* fix(authentication): fix logging filter
write back request body for read by PostForm function

* feat(authentication): create authentication controller

* feat(authentication): update dependencies

* fix(authentication): fix logging filter

* feat(authentication): change to session for authentication

* feat(authentication): create authentication filter
use authentication filter to check every request

* feat(authentication): create unit test case

* fix(authentication): change HTTP code when authentication fail request

* feat(authentication): add jwt dependency

* feat(authentication): create session configures

* feat(authentication): change cookie-based session to jwt

* feat(authentication): change cors Access-Control-Allow-Headers header

* feat(authentication): change login page path and error handler

* feat(authentication): create request interceptor to add Authorization header

* feat(authentication): connect to backend login API and i18n

* feat(authentication): create logout page

* feat(authentication): add redirect query to back previous page

* feat(authentication): update LoginMethod definition for logout

* feat(authentication): add logout button

* feat(authentication): improve login page

* fix: clean codes

* fix(authentication): fix unit test crash

* feat(authentication): remove API url setting

* feat(authentication): improve session check

* feat(authentication): redirect to login page when not exist token

* fix: clean codes and add ASF header

* feat(User): update prefix

* fix(ci): fix preview environment (apache#388)

* fix README typo (apache#389)

* fix(ci): fix read configuration file path in docker (apache#390)

* doc: Introducing manager-api (apache#391)

* Update nginx.conf

* Update Dockerfile

* Revert "Update Dockerfile"

This reverts commit ea827bf.

* fix: preview mysql pwd was wrong (apache#393)

* README in Chinese (apache#398)

* feat(doc): added Chinese version of README

* fix(README.zh-CN.md): fix wrong link

* fix(README.zh-CN.md): add link to README.md

* fix(README.zh-CN.md): sync with README.md

* fix(README.zh-CN.md): Fix some translation errors

* fix: dashboard /user/login get error code 405 (apache#397)

* fix: fix dashboard /user/login get error code 405

* fix: modify nginx according to giphoo proposal

* fix(authentication): change Apache APISIX copyright (apache#401)

* fix: configure only necessary items, such as etcd host (apache#405)

* fix: configure only necessary items, such as etcd host

* fix: configure only necessary items, such as etcd host

* fix end of line

* fix: using default admin key (apache#408)

* fix:  we need conf.json when deploying manager-api in local  (apache#409)

* fix: we need conf.json when deploying manager-api in loal

* fix: log error when starting manager failed

* fix: click create ssl prestep not response (apache#407)

* fix: submit setting grafanaURl without validation (apache#413)

* feat: support generate `script` for APISIX (apache#411)

* feat: support generate `script` for APISIX

* not run in `/root` dir

* add  `config.yaml` for APISIX

* fix path

* fix(authentication): change login api url (apache#414)

* fix(authentication): change manager API login path

* fix(authentication): change authentication unit test

* fix(authentication): clean nginx.conf codes

* fix(authentication): change login URL of front end

* fix(authentication): change authentication filter rule

Co-authored-by: kv <[email protected]>
Co-authored-by: nic-chen <[email protected]>
Co-authored-by: 琚致远 <[email protected]>
Co-authored-by: juzhiyuan <[email protected]>
Co-authored-by: Joey <[email protected]>
Co-authored-by: bzp2010 <[email protected]>
Co-authored-by: TikWind <[email protected]>
Co-authored-by: Lien <[email protected]>
Co-authored-by: Rapiz <[email protected]>
Co-authored-by: liuxiran <[email protected]>
Co-authored-by: jie <[email protected]>
Co-authored-by: Rapiz <[email protected]>
Co-authored-by: 琚致远 <[email protected]>
Co-authored-by: Tusdasa翼 <[email protected]>
Co-authored-by: Shuyang Wu <[email protected]>
Co-authored-by: Baoyuan <[email protected]>
juzhiyuan added a commit that referenced this pull request Aug 27, 2020
* merge master (#1)

* add: Determine duplicate names api for route & upstream (#305)

* fix: transaction in routes and upstreams (#306)

* add transaction for ssl and consumer (#308)

* update ci/cd for api (#307)

* update github actions for api ci cd

* fix: working-directory

* fix error

* fix: step name

* fix: mysql config for github action

* test

* use default config

* test: add e2e test for ssl and consumer (#309)

* test: add e2e test for ssl and consumer

* fix:  change assert to avoid  the mutual influence of route and service test

* remove useless code

* Feat: added Route Consumer and Upstream (#304)

* feat: added routes

* feat: added Consumer

* feat: added upstream

* feat: update SSL

* fix: routes

* feat: added commit command

* feat(route): set empty array for upstreamHeaderList

* fix: e2e test use the same function to set up router (#310)

* fix: return all objects when search route & upstream (#311)

* fix: route search

* fix: upstream search

* fix(deploy): added missing yarn.lock

* fix: proxy-rewrite plugin in upstream (#312)

* fix(SSL): search api

* docs: added tips when deployment

* feat(Deploy): use node alpine image

* fix(Route): set required field for custom redirect

* fix(Route): check if redirect is empty object

* fix(Deploy): add Python installation in dockerfile (#316)

Signed-off-by: imjoey <[email protected]>

* fix(Route): update desc for status code

* fix: proxy-path default type is static (#318)

* add proxyRewrite test (#319)

* feat: bump dependencies version (#320)

* feat(Deploy): update Dockerfile

* feat(Deploy): update Deploy Dockerfile

* feat(Pages): update pages (#324)

* feat(Pages): update pages

* chore: update routes

* fix(Route): omit upstream_id when not exist

* i18n consumer (#325)

* i18n ssl (#335)

* nationalization PluginPage component (#323)

* i18n upstream (#334)

* feat(i18n): set module (#336)

* i18n set

* change set to setting

* feat(i18n): metrics module (#326)

* i18n metrics

* combine import

* feat(i18n): route module (#327)

* i18n route

* combine import

* doc: sync config.yaml from the latest version of APISIX (#344)

* i18n route (#342)

* i18n actionbar (#343)

* fix: transform vars error (#347)

* feat(i18n): pluginpage component (#345)

* i18n pluginpage

* change pluginpage to PluginPage

* feature: support run in mac system (#349)

* combine import (#348)

* i18n menu (#351)

* i18n PluginPage (#350)

* feat: prepare to release (#352)

* feat(ManagerAPI): added ASF header

* feat(FE): aded ASF Header

* feat(FE): added ASF header

* fix(FE): update PluginDrawer

* feat: remove some images

* feat: added LICENSE

* feat: update Version

* feat: added NOTICE & CODE_OF_CONDUCT

* feat: added initial CHANGELOG

* feat: rename CODE_OF_CONDUCT

* feat: revert version

* feat: update LICENSE

* feat: update License

* feat(conf): update default preview API (#353)

* doc:  add install doc for manager-api (#355)

* doc: add install doc for manager-api

* doc: modify folder from build to run

* doc: add ASF header

* fix(ci): resolve lint failures (#354)

* fix(deploy): failed to start manager_api (#363)

Signed-off-by: imjoey <[email protected]>

* feat(i18n): modify some i18n according to the proposal#331 (#366)

* Create CONTRIBUTING.md (#368)

* Create CONTRIBUTING.md

* Create ISSUE_TEMPLATE

* Create PULL_REQUEST_TEMPLATE

* doc: remove all ‘incubator’ (#367)

* feat(deploy): set gen-config-yaml.sh executable (#362)

This also would simplify the docs.

Signed-off-by: imjoey <[email protected]>

* feat(i18n): Use auto load i18n (#332) (#371)

* Create ci.yml (#372)

* feat: release 1.5 (#364)

* Feat release 1.5 (#358)

* feat(doc): update README

* feat: update CHANGELOG

* doc: add usage of dashbaord

* Revert "doc: add usage of dashbaord"

This reverts commit 5a08c7f.

* feat(Doc): update deployment

* feat(Doc): update the deployment

* feat(Doc): update the deployment

* feat: remove incubator text

* doc: modify doc for manager-api runing in local

* feat(Doc): update README

* doc: check env variables and give run.sh power to execute

* feat(Doc): update Deployment

* feat(Doc): update deployment

* doc: modify manager-api build

* feat: update ignore file

Co-authored-by: kv <[email protected]>
Co-authored-by: 琚致远 <[email protected]>

* feat: cherry-pick 4fd0ce7

* feat(compose): remove images

* feat: added line

Co-authored-by: kv <[email protected]>
Co-authored-by: 琚致远 <[email protected]>

* feat: Unified access entrance, only the dashboard port is exposed to … (#370)

* feat: Unified access entrance, only the dashboard port is exposed to the outside

* add EOL

* docs: create I18N_USER_GUIDE.md (#373)

* docs: create I18N_USER_GUIDE.md

* docs: modify I18N_USER_GUIDE.md

* feat(Doc): added deploy doc for docker (#376)

* feat(Doc): added deploy doc for docker

* feat: added CD

* feat(Netlify): added proxy

* feat: update API

* feat: remove console

* feat(Netlify): update redirect rule

* feat: update README

* feat: update README

* update go module proxy (#378)

* Update README.md (#379)

* Update README.md

* Update README.md

* Create Preview.md

* feat(Doc): added snapshots for Preview

* feat(Doc): update images

* feat(Doc): update images

* Update README.md

* Update netlify.toml

* feat(route): route add params mapping feature (#375) (#377)

* feat(doc): update deploy manually doc

* fix: mv config.yml to config-default.yml in the latest version of apisix (#383)

* fix: wget config-default.yaml the output file need to be named config.yaml (#384)

* fix #386 wget special output file use -O (#387)

* feat(authentication): create authentication module (#330)

* feat(authentication): create module typing definition

* feat(authentication): create Login page

* feat(authentication): update typing definition

* feat(authentication): add centent to Login page

* feat(authentication): update typing definition

* feat(authentication): update Login page to add Password and Test method

* feat(authentication): update typing definition to add check and submit function

* feat(authentication): move Test login method to Example

* feat(authentication): add check and submit function

* feat(authentication): add submit function in Login page

* feat(authentication): add test to Password login method

* feat(authentication): change example LoginMethod text

* feat(authentication): add i18n content

* feat(authentication): redirect to index when login success

* feat(i18n): update i18n file import
remove import i18n file of user module manually and try auto import by umi.js

* feat(authentication): create authentication configure items

* fix(authentication): fix logging filter
write back request body for read by PostForm function

* feat(authentication): create authentication controller

* feat(authentication): update dependencies

* fix(authentication): fix logging filter

* feat(authentication): change to session for authentication

* feat(authentication): create authentication filter
use authentication filter to check every request

* feat(authentication): create unit test case

* fix(authentication): change HTTP code when authentication fail request

* feat(authentication): add jwt dependency

* feat(authentication): create session configures

* feat(authentication): change cookie-based session to jwt

* feat(authentication): change cors Access-Control-Allow-Headers header

* feat(authentication): change login page path and error handler

* feat(authentication): create request interceptor to add Authorization header

* feat(authentication): connect to backend login API and i18n

* feat(authentication): create logout page

* feat(authentication): add redirect query to back previous page

* feat(authentication): update LoginMethod definition for logout

* feat(authentication): add logout button

* feat(authentication): improve login page

* fix: clean codes

* fix(authentication): fix unit test crash

* feat(authentication): remove API url setting

* feat(authentication): improve session check

* feat(authentication): redirect to login page when not exist token

* fix: clean codes and add ASF header

* feat(User): update prefix

* fix(ci): fix preview environment (#388)

* fix README typo (#389)

* fix(ci): fix read configuration file path in docker (#390)

* doc: Introducing manager-api (#391)

* Update nginx.conf

* Update Dockerfile

* Revert "Update Dockerfile"

This reverts commit ea827bf.

* fix: preview mysql pwd was wrong (#393)

* README in Chinese (#398)

* feat(doc): added Chinese version of README

* fix(README.zh-CN.md): fix wrong link

* fix(README.zh-CN.md): add link to README.md

* fix(README.zh-CN.md): sync with README.md

* fix(README.zh-CN.md): Fix some translation errors

* fix: dashboard /user/login get error code 405 (#397)

* fix: fix dashboard /user/login get error code 405

* fix: modify nginx according to giphoo proposal

* fix(authentication): change Apache APISIX copyright (#401)

* fix: configure only necessary items, such as etcd host (#405)

* fix: configure only necessary items, such as etcd host

* fix: configure only necessary items, such as etcd host

* fix end of line

* fix: using default admin key (#408)

* fix:  we need conf.json when deploying manager-api in local  (#409)

* fix: we need conf.json when deploying manager-api in loal

* fix: log error when starting manager failed

* fix: click create ssl prestep not response (#407)

* fix: submit setting grafanaURl without validation (#413)

* feat: support generate `script` for APISIX (#411)

* feat: support generate `script` for APISIX

* not run in `/root` dir

* add  `config.yaml` for APISIX

* fix path

* fix(authentication): change login api url (#414)

* fix(authentication): change manager API login path

* fix(authentication): change authentication unit test

* fix(authentication): clean nginx.conf codes

* fix(authentication): change login URL of front end

* fix(authentication): change authentication filter rule

Co-authored-by: kv <[email protected]>
Co-authored-by: nic-chen <[email protected]>
Co-authored-by: 琚致远 <[email protected]>
Co-authored-by: juzhiyuan <[email protected]>
Co-authored-by: Joey <[email protected]>
Co-authored-by: bzp2010 <[email protected]>
Co-authored-by: TikWind <[email protected]>
Co-authored-by: Lien <[email protected]>
Co-authored-by: Rapiz <[email protected]>
Co-authored-by: liuxiran <[email protected]>
Co-authored-by: jie <[email protected]>
Co-authored-by: Rapiz <[email protected]>
Co-authored-by: 琚致远 <[email protected]>
Co-authored-by: Tusdasa翼 <[email protected]>
Co-authored-by: Shuyang Wu <[email protected]>
Co-authored-by: Baoyuan <[email protected]>

* feat: added pluginChart

* feat: update LICENSE

Co-authored-by: kv <[email protected]>
Co-authored-by: nic-chen <[email protected]>
Co-authored-by: 琚致远 <[email protected]>
Co-authored-by: juzhiyuan <[email protected]>
Co-authored-by: Joey <[email protected]>
Co-authored-by: bzp2010 <[email protected]>
Co-authored-by: TikWind <[email protected]>
Co-authored-by: Lien <[email protected]>
Co-authored-by: Rapiz <[email protected]>
Co-authored-by: liuxiran <[email protected]>
Co-authored-by: jie <[email protected]>
Co-authored-by: Rapiz <[email protected]>
Co-authored-by: 琚致远 <[email protected]>
Co-authored-by: Tusdasa翼 <[email protected]>
Co-authored-by: Shuyang Wu <[email protected]>
Co-authored-by: Baoyuan <[email protected]>
juzhiyuan added a commit that referenced this pull request Sep 1, 2020
* merge master (#1)

* add: Determine duplicate names api for route & upstream (#305)

* fix: transaction in routes and upstreams (#306)

* add transaction for ssl and consumer (#308)

* update ci/cd for api (#307)

* update github actions for api ci cd

* fix: working-directory

* fix error

* fix: step name

* fix: mysql config for github action

* test

* use default config

* test: add e2e test for ssl and consumer (#309)

* test: add e2e test for ssl and consumer

* fix:  change assert to avoid  the mutual influence of route and service test

* remove useless code

* Feat: added Route Consumer and Upstream (#304)

* feat: added routes

* feat: added Consumer

* feat: added upstream

* feat: update SSL

* fix: routes

* feat: added commit command

* feat(route): set empty array for upstreamHeaderList

* fix: e2e test use the same function to set up router (#310)

* fix: return all objects when search route & upstream (#311)

* fix: route search

* fix: upstream search

* fix(deploy): added missing yarn.lock

* fix: proxy-rewrite plugin in upstream (#312)

* fix(SSL): search api

* docs: added tips when deployment

* feat(Deploy): use node alpine image

* fix(Route): set required field for custom redirect

* fix(Route): check if redirect is empty object

* fix(Deploy): add Python installation in dockerfile (#316)

Signed-off-by: imjoey <[email protected]>

* fix(Route): update desc for status code

* fix: proxy-path default type is static (#318)

* add proxyRewrite test (#319)

* feat: bump dependencies version (#320)

* feat(Deploy): update Dockerfile

* feat(Deploy): update Deploy Dockerfile

* feat(Pages): update pages (#324)

* feat(Pages): update pages

* chore: update routes

* fix(Route): omit upstream_id when not exist

* i18n consumer (#325)

* i18n ssl (#335)

* nationalization PluginPage component (#323)

* i18n upstream (#334)

* feat(i18n): set module (#336)

* i18n set

* change set to setting

* feat(i18n): metrics module (#326)

* i18n metrics

* combine import

* feat(i18n): route module (#327)

* i18n route

* combine import

* doc: sync config.yaml from the latest version of APISIX (#344)

* i18n route (#342)

* i18n actionbar (#343)

* fix: transform vars error (#347)

* feat(i18n): pluginpage component (#345)

* i18n pluginpage

* change pluginpage to PluginPage

* feature: support run in mac system (#349)

* combine import (#348)

* i18n menu (#351)

* i18n PluginPage (#350)

* feat: prepare to release (#352)

* feat(ManagerAPI): added ASF header

* feat(FE): aded ASF Header

* feat(FE): added ASF header

* fix(FE): update PluginDrawer

* feat: remove some images

* feat: added LICENSE

* feat: update Version

* feat: added NOTICE & CODE_OF_CONDUCT

* feat: added initial CHANGELOG

* feat: rename CODE_OF_CONDUCT

* feat: revert version

* feat: update LICENSE

* feat: update License

* feat(conf): update default preview API (#353)

* doc:  add install doc for manager-api (#355)

* doc: add install doc for manager-api

* doc: modify folder from build to run

* doc: add ASF header

* fix(ci): resolve lint failures (#354)

* fix(deploy): failed to start manager_api (#363)

Signed-off-by: imjoey <[email protected]>

* feat(i18n): modify some i18n according to the proposal#331 (#366)

* Create CONTRIBUTING.md (#368)

* Create CONTRIBUTING.md

* Create ISSUE_TEMPLATE

* Create PULL_REQUEST_TEMPLATE

* doc: remove all ‘incubator’ (#367)

* feat(deploy): set gen-config-yaml.sh executable (#362)

This also would simplify the docs.

Signed-off-by: imjoey <[email protected]>

* feat(i18n): Use auto load i18n (#332) (#371)

* Create ci.yml (#372)

* feat: release 1.5 (#364)

* Feat release 1.5 (#358)

* feat(doc): update README

* feat: update CHANGELOG

* doc: add usage of dashbaord

* Revert "doc: add usage of dashbaord"

This reverts commit 5a08c7f.

* feat(Doc): update deployment

* feat(Doc): update the deployment

* feat(Doc): update the deployment

* feat: remove incubator text

* doc: modify doc for manager-api runing in local

* feat(Doc): update README

* doc: check env variables and give run.sh power to execute

* feat(Doc): update Deployment

* feat(Doc): update deployment

* doc: modify manager-api build

* feat: update ignore file

Co-authored-by: kv <[email protected]>
Co-authored-by: 琚致远 <[email protected]>

* feat: cherry-pick 4fd0ce7

* feat(compose): remove images

* feat: added line

Co-authored-by: kv <[email protected]>
Co-authored-by: 琚致远 <[email protected]>

* feat: Unified access entrance, only the dashboard port is exposed to … (#370)

* feat: Unified access entrance, only the dashboard port is exposed to the outside

* add EOL

* docs: create I18N_USER_GUIDE.md (#373)

* docs: create I18N_USER_GUIDE.md

* docs: modify I18N_USER_GUIDE.md

* feat(Doc): added deploy doc for docker (#376)

* feat(Doc): added deploy doc for docker

* feat: added CD

* feat(Netlify): added proxy

* feat: update API

* feat: remove console

* feat(Netlify): update redirect rule

* feat: update README

* feat: update README

* update go module proxy (#378)

* Update README.md (#379)

* Update README.md

* Update README.md

* Create Preview.md

* feat(Doc): added snapshots for Preview

* feat(Doc): update images

* feat(Doc): update images

* Update README.md

* Update netlify.toml

* feat(route): route add params mapping feature (#375) (#377)

* feat(doc): update deploy manually doc

* fix: mv config.yml to config-default.yml in the latest version of apisix (#383)

* fix: wget config-default.yaml the output file need to be named config.yaml (#384)

* fix #386 wget special output file use -O (#387)

* feat(authentication): create authentication module (#330)

* feat(authentication): create module typing definition

* feat(authentication): create Login page

* feat(authentication): update typing definition

* feat(authentication): add centent to Login page

* feat(authentication): update typing definition

* feat(authentication): update Login page to add Password and Test method

* feat(authentication): update typing definition to add check and submit function

* feat(authentication): move Test login method to Example

* feat(authentication): add check and submit function

* feat(authentication): add submit function in Login page

* feat(authentication): add test to Password login method

* feat(authentication): change example LoginMethod text

* feat(authentication): add i18n content

* feat(authentication): redirect to index when login success

* feat(i18n): update i18n file import
remove import i18n file of user module manually and try auto import by umi.js

* feat(authentication): create authentication configure items

* fix(authentication): fix logging filter
write back request body for read by PostForm function

* feat(authentication): create authentication controller

* feat(authentication): update dependencies

* fix(authentication): fix logging filter

* feat(authentication): change to session for authentication

* feat(authentication): create authentication filter
use authentication filter to check every request

* feat(authentication): create unit test case

* fix(authentication): change HTTP code when authentication fail request

* feat(authentication): add jwt dependency

* feat(authentication): create session configures

* feat(authentication): change cookie-based session to jwt

* feat(authentication): change cors Access-Control-Allow-Headers header

* feat(authentication): change login page path and error handler

* feat(authentication): create request interceptor to add Authorization header

* feat(authentication): connect to backend login API and i18n

* feat(authentication): create logout page

* feat(authentication): add redirect query to back previous page

* feat(authentication): update LoginMethod definition for logout

* feat(authentication): add logout button

* feat(authentication): improve login page

* fix: clean codes

* fix(authentication): fix unit test crash

* feat(authentication): remove API url setting

* feat(authentication): improve session check

* feat(authentication): redirect to login page when not exist token

* fix: clean codes and add ASF header

* feat(User): update prefix

* fix(ci): fix preview environment (#388)

* fix README typo (#389)

* fix(ci): fix read configuration file path in docker (#390)

* doc: Introducing manager-api (#391)

* Update nginx.conf

* Update Dockerfile

* Revert "Update Dockerfile"

This reverts commit ea827bf.

* fix: preview mysql pwd was wrong (#393)

* README in Chinese (#398)

* feat(doc): added Chinese version of README

* fix(README.zh-CN.md): fix wrong link

* fix(README.zh-CN.md): add link to README.md

* fix(README.zh-CN.md): sync with README.md

* fix(README.zh-CN.md): Fix some translation errors

* fix: dashboard /user/login get error code 405 (#397)

* fix: fix dashboard /user/login get error code 405

* fix: modify nginx according to giphoo proposal

* fix(authentication): change Apache APISIX copyright (#401)

* fix: configure only necessary items, such as etcd host (#405)

* fix: configure only necessary items, such as etcd host

* fix: configure only necessary items, such as etcd host

* fix end of line

* fix: using default admin key (#408)

* fix:  we need conf.json when deploying manager-api in local  (#409)

* fix: we need conf.json when deploying manager-api in loal

* fix: log error when starting manager failed

* fix: click create ssl prestep not response (#407)

* fix: submit setting grafanaURl without validation (#413)

* feat: support generate `script` for APISIX (#411)

* feat: support generate `script` for APISIX

* not run in `/root` dir

* add  `config.yaml` for APISIX

* fix path

* fix(authentication): change login api url (#414)

* fix(authentication): change manager API login path

* fix(authentication): change authentication unit test

* fix(authentication): clean nginx.conf codes

* fix(authentication): change login URL of front end

* fix(authentication): change authentication filter rule

Co-authored-by: kv <[email protected]>
Co-authored-by: nic-chen <[email protected]>
Co-authored-by: 琚致远 <[email protected]>
Co-authored-by: juzhiyuan <[email protected]>
Co-authored-by: Joey <[email protected]>
Co-authored-by: bzp2010 <[email protected]>
Co-authored-by: TikWind <[email protected]>
Co-authored-by: Lien <[email protected]>
Co-authored-by: Rapiz <[email protected]>
Co-authored-by: liuxiran <[email protected]>
Co-authored-by: jie <[email protected]>
Co-authored-by: Rapiz <[email protected]>
Co-authored-by: 琚致远 <[email protected]>
Co-authored-by: Tusdasa翼 <[email protected]>
Co-authored-by: Shuyang Wu <[email protected]>
Co-authored-by: Baoyuan <[email protected]>

* feat: added chash

* feat: update transform

Co-authored-by: kv <[email protected]>
Co-authored-by: nic-chen <[email protected]>
Co-authored-by: 琚致远 <[email protected]>
Co-authored-by: juzhiyuan <[email protected]>
Co-authored-by: Joey <[email protected]>
Co-authored-by: bzp2010 <[email protected]>
Co-authored-by: TikWind <[email protected]>
Co-authored-by: Lien <[email protected]>
Co-authored-by: Rapiz <[email protected]>
Co-authored-by: liuxiran <[email protected]>
Co-authored-by: jie <[email protected]>
Co-authored-by: Rapiz <[email protected]>
Co-authored-by: 琚致远 <[email protected]>
Co-authored-by: Tusdasa翼 <[email protected]>
Co-authored-by: Shuyang Wu <[email protected]>
Co-authored-by: Baoyuan <[email protected]>
juzhiyuan added a commit that referenced this pull request Sep 4, 2020
* merge master (#1)

* add: Determine duplicate names api for route & upstream (#305)

* fix: transaction in routes and upstreams (#306)

* add transaction for ssl and consumer (#308)

* update ci/cd for api (#307)

* update github actions for api ci cd

* fix: working-directory

* fix error

* fix: step name

* fix: mysql config for github action

* test

* use default config

* test: add e2e test for ssl and consumer (#309)

* test: add e2e test for ssl and consumer

* fix:  change assert to avoid  the mutual influence of route and service test

* remove useless code

* Feat: added Route Consumer and Upstream (#304)

* feat: added routes

* feat: added Consumer

* feat: added upstream

* feat: update SSL

* fix: routes

* feat: added commit command

* feat(route): set empty array for upstreamHeaderList

* fix: e2e test use the same function to set up router (#310)

* fix: return all objects when search route & upstream (#311)

* fix: route search

* fix: upstream search

* fix(deploy): added missing yarn.lock

* fix: proxy-rewrite plugin in upstream (#312)

* fix(SSL): search api

* docs: added tips when deployment

* feat(Deploy): use node alpine image

* fix(Route): set required field for custom redirect

* fix(Route): check if redirect is empty object

* fix(Deploy): add Python installation in dockerfile (#316)

Signed-off-by: imjoey <[email protected]>

* fix(Route): update desc for status code

* fix: proxy-path default type is static (#318)

* add proxyRewrite test (#319)

* feat: bump dependencies version (#320)

* feat(Deploy): update Dockerfile

* feat(Deploy): update Deploy Dockerfile

* feat(Pages): update pages (#324)

* feat(Pages): update pages

* chore: update routes

* fix(Route): omit upstream_id when not exist

* i18n consumer (#325)

* i18n ssl (#335)

* nationalization PluginPage component (#323)

* i18n upstream (#334)

* feat(i18n): set module (#336)

* i18n set

* change set to setting

* feat(i18n): metrics module (#326)

* i18n metrics

* combine import

* feat(i18n): route module (#327)

* i18n route

* combine import

* doc: sync config.yaml from the latest version of APISIX (#344)

* i18n route (#342)

* i18n actionbar (#343)

* fix: transform vars error (#347)

* feat(i18n): pluginpage component (#345)

* i18n pluginpage

* change pluginpage to PluginPage

* feature: support run in mac system (#349)

* combine import (#348)

* i18n menu (#351)

* i18n PluginPage (#350)

* feat: prepare to release (#352)

* feat(ManagerAPI): added ASF header

* feat(FE): aded ASF Header

* feat(FE): added ASF header

* fix(FE): update PluginDrawer

* feat: remove some images

* feat: added LICENSE

* feat: update Version

* feat: added NOTICE & CODE_OF_CONDUCT

* feat: added initial CHANGELOG

* feat: rename CODE_OF_CONDUCT

* feat: revert version

* feat: update LICENSE

* feat: update License

* feat(conf): update default preview API (#353)

* doc:  add install doc for manager-api (#355)

* doc: add install doc for manager-api

* doc: modify folder from build to run

* doc: add ASF header

* fix(ci): resolve lint failures (#354)

* fix(deploy): failed to start manager_api (#363)

Signed-off-by: imjoey <[email protected]>

* feat(i18n): modify some i18n according to the proposal#331 (#366)

* Create CONTRIBUTING.md (#368)

* Create CONTRIBUTING.md

* Create ISSUE_TEMPLATE

* Create PULL_REQUEST_TEMPLATE

* doc: remove all ‘incubator’ (#367)

* feat(deploy): set gen-config-yaml.sh executable (#362)

This also would simplify the docs.

Signed-off-by: imjoey <[email protected]>

* feat(i18n): Use auto load i18n (#332) (#371)

* Create ci.yml (#372)

* feat: release 1.5 (#364)

* Feat release 1.5 (#358)

* feat(doc): update README

* feat: update CHANGELOG

* doc: add usage of dashbaord

* Revert "doc: add usage of dashbaord"

This reverts commit 5a08c7f.

* feat(Doc): update deployment

* feat(Doc): update the deployment

* feat(Doc): update the deployment

* feat: remove incubator text

* doc: modify doc for manager-api runing in local

* feat(Doc): update README

* doc: check env variables and give run.sh power to execute

* feat(Doc): update Deployment

* feat(Doc): update deployment

* doc: modify manager-api build

* feat: update ignore file

Co-authored-by: kv <[email protected]>
Co-authored-by: 琚致远 <[email protected]>

* feat: cherry-pick 4fd0ce7

* feat(compose): remove images

* feat: added line

Co-authored-by: kv <[email protected]>
Co-authored-by: 琚致远 <[email protected]>

* feat: Unified access entrance, only the dashboard port is exposed to … (#370)

* feat: Unified access entrance, only the dashboard port is exposed to the outside

* add EOL

* docs: create I18N_USER_GUIDE.md (#373)

* docs: create I18N_USER_GUIDE.md

* docs: modify I18N_USER_GUIDE.md

* feat(Doc): added deploy doc for docker (#376)

* feat(Doc): added deploy doc for docker

* feat: added CD

* feat(Netlify): added proxy

* feat: update API

* feat: remove console

* feat(Netlify): update redirect rule

* feat: update README

* feat: update README

* update go module proxy (#378)

* Update README.md (#379)

* Update README.md

* Update README.md

* Create Preview.md

* feat(Doc): added snapshots for Preview

* feat(Doc): update images

* feat(Doc): update images

* Update README.md

* Update netlify.toml

* feat(route): route add params mapping feature (#375) (#377)

* feat(doc): update deploy manually doc

* fix: mv config.yml to config-default.yml in the latest version of apisix (#383)

* fix: wget config-default.yaml the output file need to be named config.yaml (#384)

* fix #386 wget special output file use -O (#387)

* feat(authentication): create authentication module (#330)

* feat(authentication): create module typing definition

* feat(authentication): create Login page

* feat(authentication): update typing definition

* feat(authentication): add centent to Login page

* feat(authentication): update typing definition

* feat(authentication): update Login page to add Password and Test method

* feat(authentication): update typing definition to add check and submit function

* feat(authentication): move Test login method to Example

* feat(authentication): add check and submit function

* feat(authentication): add submit function in Login page

* feat(authentication): add test to Password login method

* feat(authentication): change example LoginMethod text

* feat(authentication): add i18n content

* feat(authentication): redirect to index when login success

* feat(i18n): update i18n file import
remove import i18n file of user module manually and try auto import by umi.js

* feat(authentication): create authentication configure items

* fix(authentication): fix logging filter
write back request body for read by PostForm function

* feat(authentication): create authentication controller

* feat(authentication): update dependencies

* fix(authentication): fix logging filter

* feat(authentication): change to session for authentication

* feat(authentication): create authentication filter
use authentication filter to check every request

* feat(authentication): create unit test case

* fix(authentication): change HTTP code when authentication fail request

* feat(authentication): add jwt dependency

* feat(authentication): create session configures

* feat(authentication): change cookie-based session to jwt

* feat(authentication): change cors Access-Control-Allow-Headers header

* feat(authentication): change login page path and error handler

* feat(authentication): create request interceptor to add Authorization header

* feat(authentication): connect to backend login API and i18n

* feat(authentication): create logout page

* feat(authentication): add redirect query to back previous page

* feat(authentication): update LoginMethod definition for logout

* feat(authentication): add logout button

* feat(authentication): improve login page

* fix: clean codes

* fix(authentication): fix unit test crash

* feat(authentication): remove API url setting

* feat(authentication): improve session check

* feat(authentication): redirect to login page when not exist token

* fix: clean codes and add ASF header

* feat(User): update prefix

* fix(ci): fix preview environment (#388)

* fix README typo (#389)

* fix(ci): fix read configuration file path in docker (#390)

* doc: Introducing manager-api (#391)

* Update nginx.conf

* Update Dockerfile

* Revert "Update Dockerfile"

This reverts commit ea827bf.

* fix: preview mysql pwd was wrong (#393)

* README in Chinese (#398)

* feat(doc): added Chinese version of README

* fix(README.zh-CN.md): fix wrong link

* fix(README.zh-CN.md): add link to README.md

* fix(README.zh-CN.md): sync with README.md

* fix(README.zh-CN.md): Fix some translation errors

* fix: dashboard /user/login get error code 405 (#397)

* fix: fix dashboard /user/login get error code 405

* fix: modify nginx according to giphoo proposal

* fix(authentication): change Apache APISIX copyright (#401)

* fix: configure only necessary items, such as etcd host (#405)

* fix: configure only necessary items, such as etcd host

* fix: configure only necessary items, such as etcd host

* fix end of line

* fix: using default admin key (#408)

* fix:  we need conf.json when deploying manager-api in local  (#409)

* fix: we need conf.json when deploying manager-api in loal

* fix: log error when starting manager failed

* fix: click create ssl prestep not response (#407)

* fix: submit setting grafanaURl without validation (#413)

* feat: support generate `script` for APISIX (#411)

* feat: support generate `script` for APISIX

* not run in `/root` dir

* add  `config.yaml` for APISIX

* fix path

* fix(authentication): change login api url (#414)

* fix(authentication): change manager API login path

* fix(authentication): change authentication unit test

* fix(authentication): clean nginx.conf codes

* fix(authentication): change login URL of front end

* fix(authentication): change authentication filter rule

Co-authored-by: kv <[email protected]>
Co-authored-by: nic-chen <[email protected]>
Co-authored-by: 琚致远 <[email protected]>
Co-authored-by: juzhiyuan <[email protected]>
Co-authored-by: Joey <[email protected]>
Co-authored-by: bzp2010 <[email protected]>
Co-authored-by: TikWind <[email protected]>
Co-authored-by: Lien <[email protected]>
Co-authored-by: Rapiz <[email protected]>
Co-authored-by: liuxiran <[email protected]>
Co-authored-by: jie <[email protected]>
Co-authored-by: Rapiz <[email protected]>
Co-authored-by: 琚致远 <[email protected]>
Co-authored-by: Tusdasa翼 <[email protected]>
Co-authored-by: Shuyang Wu <[email protected]>
Co-authored-by: Baoyuan <[email protected]>

* feat: update pluginchart

Co-authored-by: kv <[email protected]>
Co-authored-by: nic-chen <[email protected]>
Co-authored-by: 琚致远 <[email protected]>
Co-authored-by: juzhiyuan <[email protected]>
Co-authored-by: Joey <[email protected]>
Co-authored-by: bzp2010 <[email protected]>
Co-authored-by: TikWind <[email protected]>
Co-authored-by: Lien <[email protected]>
Co-authored-by: Rapiz <[email protected]>
Co-authored-by: liuxiran <[email protected]>
Co-authored-by: jie <[email protected]>
Co-authored-by: Rapiz <[email protected]>
Co-authored-by: 琚致远 <[email protected]>
Co-authored-by: Tusdasa翼 <[email protected]>
Co-authored-by: Shuyang Wu <[email protected]>
Co-authored-by: Baoyuan <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants