gitea/integrations
zeripath 01c10a951b
Fix ssh deploy and user key constraints (#1357) (#5939)
1. A key can either be an ssh user key or a deploy key. It cannot be both.
2. If a key is a user key - it can only be associated with one user.
3. If a key is a deploy key - it can be used in multiple repositories and the permissions it has on those repositories can be different.
4. If a repository is deleted, its deploy keys must be deleted too.

We currently don't enforce any of this and multiple repositories access with different permissions doesn't work at all. This PR enforces the following constraints:

- [x] You should not be able to add the same user key as another user
- [x] You should not be able to add a ssh user key which is being used as a deploy key
- [x] You should not be able to add a ssh deploy key which is being used as a user key
- [x] If you add an ssh deploy key to another repository you should be able to use it in different modes without losing the ability to use it in the other mode.
- [x] If you delete a repository you must delete all its deploy keys.

Fix #1357
2019-02-03 23:56:53 +00:00
..
gitea-repositories-meta
migration-test Add migration test (#5773) 2019-01-28 11:18:52 -05:00
README.md
README_ZH.md
api_admin_test.go
api_branch_test.go
api_comment_test.go
api_fork_test.go
api_gpg_keys_test.go
api_helper_for_declarative_test.go Fix ssh deploy and user key constraints (#1357) (#5939) 2019-02-03 23:56:53 +00:00
api_issue_label_test.go
api_issue_test.go
api_keys_test.go
api_org_test.go
api_pull_test.go
api_releases_test.go Fix new release creation API to allow empty target (#5870) 2019-01-30 11:33:00 -05:00
api_repo_git_commits_test.go Add single commit API support (#5843) 2019-02-02 22:35:17 -05:00
api_repo_git_ref_test.go
api_repo_lfs_locks_test.go
api_repo_raw_test.go
api_repo_test.go
api_team_test.go
api_token_test.go
api_user_heatmap_test.go
api_user_orgs_test.go Ensure valid git author names passed in signatures (#5774) 2019-01-24 16:12:17 +02:00
auth_ldap_test.go
benchmarks_test.go
branches_test.go
change_default_branch_test.go
delete_user_test.go
download_test.go
editor_test.go
empty_repo_test.go Refactor repo.isBare to repo.isEmpty #5629 (#5714) 2019-01-17 19:01:04 -05:00
explore_repos_test.go
git_helper_for_declarative_test.go Fix ssh deploy and user key constraints (#1357) (#5939) 2019-02-03 23:56:53 +00:00
git_test.go Fix ssh deploy and user key constraints (#1357) (#5939) 2019-02-03 23:56:53 +00:00
html_helper.go
integration_test.go
internal_test.go
issue_test.go
lfs_getobject_test.go Pooled and buffered gzip implementation (#5722) 2019-01-23 10:56:51 +02:00
links_test.go
mssql.ini.tmpl Make log mailer for testing (#5893) 2019-02-02 21:06:52 -05:00
mysql.ini.tmpl Make log mailer for testing (#5893) 2019-02-02 21:06:52 -05:00
nonascii_branches_test.go
pgsql.ini.tmpl Make log mailer for testing (#5893) 2019-02-02 21:06:52 -05:00
pull_compare_test.go
pull_create_test.go
pull_merge_test.go
release_test.go
repo_activity_test.go
repo_branch_test.go
repo_commits_test.go
repo_fork_test.go
repo_migrate_test.go
repo_search_test.go
repo_test.go Revert #3711 overwrite of only show "No Description" to repo admins #2167 (#5836) 2019-01-27 21:13:15 +00:00
setting_test.go
signin_test.go
signout_test.go
signup_test.go
sqlite.ini Make log mailer for testing (#5893) 2019-02-02 21:06:52 -05:00
ssh_key_test.go Fix ssh deploy and user key constraints (#1357) (#5939) 2019-02-03 23:56:53 +00:00
timetracking_test.go
user_test.go Ensure valid git author names passed in signatures (#5774) 2019-01-24 16:12:17 +02:00
version_test.go
xss_test.go

README.md

Integrations tests

Integration tests can be run with make commands for the appropriate backends, namely:

make test-mysql
make test-pgsql
make test-sqlite

Make sure to perform a clean build before running tests:

make clean build

Run all tests via local drone

drone exec --local --build-event "pull_request"

Run sqlite integrations tests

Start tests

make test-sqlite

Run mysql integrations tests

Setup a mysql database inside docker

docker run -e "MYSQL_DATABASE=test" -e "MYSQL_ALLOW_EMPTY_PASSWORD=yes" --rm --name mysql mysql:5.7 #(just ctrl-c to stop db and clean the container) 

Start tests based on the database container

TEST_MYSQL_HOST="$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql):3306" TEST_MYSQL_DBNAME=test TEST_MYSQL_USERNAME=root TEST_MYSQL_PASSWORD='' make test-mysql

Run pgsql integrations tests

Setup a pgsql database inside docker

docker run -e "POSTGRES_DB=test" --rm --name pgsql postgres:9.5 #(just ctrl-c to stop db and clean the container) 

Start tests based on the database container

TEST_PGSQL_HOST=$(docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' pgsql) TEST_PGSQL_DBNAME=test TEST_PGSQL_USERNAME=postgres TEST_PGSQL_PASSWORD=postgres make test-pgsql

Running individual tests

Example command to run GPG test with sqlite backend:

go test -c code.gitea.io/gitea/integrations \
  -o integrations.sqlite.test -tags 'sqlite' &&
  GITEA_ROOT="$GOPATH/src/code.gitea.io/gitea" \
  GITEA_CONF=integrations/sqlite.ini ./integrations.sqlite.test \
  -test.v -test.run GPG