Commit 59157c04 authored by DJ Mountney's avatar DJ Mountney

Expose the Koding application settings in the API

This will allow the Koding app to enable the integration itself once is has authorized an admin user using the application secrets.
parent 33d1f590
...@@ -9,6 +9,7 @@ v 8.13.0 (unreleased) ...@@ -9,6 +9,7 @@ v 8.13.0 (unreleased)
- Avoid database queries on Banzai::ReferenceParser::BaseParser for nodes without references - Avoid database queries on Banzai::ReferenceParser::BaseParser for nodes without references
- Fix permission for setting an issue's due date - Fix permission for setting an issue's due date
- Expose expires_at field when sharing project on API - Expose expires_at field when sharing project on API
- Allow the Koding integration to be configured through the API
- Fix robots.txt disallowing access to groups starting with "s" (Matt Harrison) - Fix robots.txt disallowing access to groups starting with "s" (Matt Harrison)
- Use a ConnectionPool for Rails.cache on Sidekiq servers - Use a ConnectionPool for Rails.cache on Sidekiq servers
- Only update issuable labels if they have been changed - Only update issuable labels if they have been changed
......
...@@ -41,7 +41,9 @@ Example response: ...@@ -41,7 +41,9 @@ Example response:
"gravatar_enabled" : true, "gravatar_enabled" : true,
"sign_in_text" : null, "sign_in_text" : null,
"container_registry_token_expire_delay": 5, "container_registry_token_expire_delay": 5,
"repository_storage": "default" "repository_storage": "default",
"koding_enabled": false,
"koding_url": null
} }
``` ```
...@@ -72,7 +74,9 @@ PUT /application/settings ...@@ -72,7 +74,9 @@ PUT /application/settings
| `after_sign_out_path` | string | no | Where to redirect users after logout | | `after_sign_out_path` | string | no | Where to redirect users after logout |
| `container_registry_token_expire_delay` | integer | no | Container Registry token duration in minutes | | `container_registry_token_expire_delay` | integer | no | Container Registry token duration in minutes |
| `repository_storage` | string | no | Storage path for new projects. The value should be the name of one of the repository storage paths defined in your gitlab.yml | | `repository_storage` | string | no | Storage path for new projects. The value should be the name of one of the repository storage paths defined in your gitlab.yml |
| `enabled_git_access_protocol` | string | no | Enabled protocols for Git access. Allowed values are: `ssh`, `http`, and `nil` to allow both protocols. | `enabled_git_access_protocol` | string | no | Enabled protocols for Git access. Allowed values are: `ssh`, `http`, and `nil` to allow both protocols. |
| `koding_enabled` | boolean | no | Enable Koding integration. Default is `false`. |
| `koding_url` | string | yes (if `koding_enabled` is `true`) | The Koding instance URL for integration. |
```bash ```bash
curl --request PUT --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/application/settings?signup_enabled=false&default_project_visibility=1 curl --request PUT --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/application/settings?signup_enabled=false&default_project_visibility=1
...@@ -103,6 +107,8 @@ Example response: ...@@ -103,6 +107,8 @@ Example response:
"user_oauth_applications": true, "user_oauth_applications": true,
"after_sign_out_path": "", "after_sign_out_path": "",
"container_registry_token_expire_delay": 5, "container_registry_token_expire_delay": 5,
"repository_storage": "default" "repository_storage": "default",
"koding_enabled": false,
"koding_url": null
} }
``` ```
...@@ -494,6 +494,8 @@ module API ...@@ -494,6 +494,8 @@ module API
expose :after_sign_out_path expose :after_sign_out_path
expose :container_registry_token_expire_delay expose :container_registry_token_expire_delay
expose :repository_storage expose :repository_storage
expose :koding_enabled
expose :koding_url
end end
class Release < Grape::Entity class Release < Grape::Entity
......
...@@ -14,22 +14,38 @@ describe API::API, 'Settings', api: true do ...@@ -14,22 +14,38 @@ describe API::API, 'Settings', api: true do
expect(json_response['default_projects_limit']).to eq(42) expect(json_response['default_projects_limit']).to eq(42)
expect(json_response['signin_enabled']).to be_truthy expect(json_response['signin_enabled']).to be_truthy
expect(json_response['repository_storage']).to eq('default') expect(json_response['repository_storage']).to eq('default')
expect(json_response['koding_enabled']).to be_falsey
expect(json_response['koding_url']).to be_nil
end end
end end
describe "PUT /application/settings" do describe "PUT /application/settings" do
before do context "custom repository storage type set in the config" do
storages = { 'custom' => 'tmp/tests/custom_repositories' } before do
allow(Gitlab.config.repositories).to receive(:storages).and_return(storages) storages = { 'custom' => 'tmp/tests/custom_repositories' }
allow(Gitlab.config.repositories).to receive(:storages).and_return(storages)
end
it "updates application settings" do
put api("/application/settings", admin),
default_projects_limit: 3, signin_enabled: false, repository_storage: 'custom', koding_enabled: true, koding_url: 'http://koding.example.com'
expect(response).to have_http_status(200)
expect(json_response['default_projects_limit']).to eq(3)
expect(json_response['signin_enabled']).to be_falsey
expect(json_response['repository_storage']).to eq('custom')
expect(json_response['koding_enabled']).to be_truthy
expect(json_response['koding_url']).to eq('http://koding.example.com')
end
end end
it "updates application settings" do context "missing koding_url value when koding_enabled is true" do
put api("/application/settings", admin), it "returns a blank parameter error message" do
default_projects_limit: 3, signin_enabled: false, repository_storage: 'custom' put api("/application/settings", admin), koding_enabled: true
expect(response).to have_http_status(200)
expect(json_response['default_projects_limit']).to eq(3) expect(response).to have_http_status(400)
expect(json_response['signin_enabled']).to be_falsey expect(json_response['message']).to have_key('koding_url')
expect(json_response['repository_storage']).to eq('custom') expect(json_response['message']['koding_url']).to include "can't be blank"
end
end end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment