Commit 6dd4ae0d authored by JB Vasseur's avatar JB Vasseur

Support GET /applications and DELETE /applications/:id endpoints #52559

parent 3421f1d1
......@@ -4,12 +4,12 @@
[ce-8160]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/8160
Only admin user can use the Applications API.
## Create a application
Create a application by posting a JSON payload.
User must be admin to do that.
Returns `200` if the request succeeds.
```
......@@ -30,8 +30,55 @@ Example response:
```json
{
"id":1,
"application_id": "5832fc6e14300a0d962240a8144466eef4ee93ef0d218477e55f11cf12fc3737",
"application_name": "MyApplication",
"secret": "ee1dd64b6adc89cf7e2c23099301ccc2c61b441064e9324d963c46902a85ec34",
"callback_url": "http://redirect.uri"
}
```
## List all applications
List all registered applications.
```
GET /applications
```
```bash
curl --request GET --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/applications
```
Example response:
```json
[
{
"id":1,
"application_id": "5832fc6e14300a0d962240a8144466eef4ee93ef0d218477e55f11cf12fc3737",
"application_name": "MyApplication",
"callback_url": "http://redirect.uri"
}
]
```
> Note: the `secret` value will not be exposed by this API.
## Delete an application
Delete a specific application.
Returns `204` if the request succeeds.
```
DELETE /applications/:id
```
Parameters:
- `id` (required) - The id of the application (not the application_id)
```bash
curl --request DELETE --header "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v4/applications/:id
```
......@@ -24,6 +24,23 @@ module API
render_validation_error! application
end
end
desc 'Get applications' do
success Entities::ApplicationWithSecret
end
get do
applications = Doorkeeper::Application.all
present applications, with: Entities::Application
end
# rubocop: disable CodeReuse/ActiveRecord
desc 'Delete an application'
delete ':id' do
Doorkeeper::Application.find_by(id: params[:id]).destroy
status 204
end
# rubocop: enable CodeReuse/ActiveRecord
end
end
end
......@@ -5,6 +5,7 @@ describe API::Applications, :api do
let(:admin_user) { create(:user, admin: true) }
let(:user) { create(:user, admin: false) }
let(:application) { create(:application, name: 'application_name', redirect_uri: 'http://application.url', scopes: '') }
describe 'POST /applications' do
context 'authenticated and authorized user' do
......@@ -83,4 +84,41 @@ describe API::Applications, :api do
end
end
end
describe 'GET /applications' do
context 'authenticated and authorized user' do
it 'can list application' do
get api('/applications')
expect(response).to have_gitlab_http_status(200)
expect(json_response).to be_a(Array)
end
end
context 'non-authenticated user' do
it 'cannot list application' do
get api('/applications')
expect(response).to have_http_status 401
end
end
end
describe 'DELETE /applications/:id' do
context 'authenticated and authorized user' do
it 'can delete an application' do
delete api("/applications/#{application.id}")
expect(response).to have_gitlab_http_status(204)
end
end
context 'non-authenticated user' do
it 'cannot delete an application' do
delete api("/applications/#{application.id}")
expect(response).to have_http_status 401
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