Skip to content
Snippets Groups Projects
Commit 67992b9b authored by Stan Hu's avatar Stan Hu
Browse files

Make namespace API available to all users

parent 06250eef
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -8,6 +8,7 @@ v 7.12.0 (unreleased)
- Add file attachment support in Milestone description (Stan Hu)
- Fix milestone "Browse Issues" button.
- Set milestone on new issue when creating issue from index with milestone filter active.
- Make namespace API available to all users (Stan Hu)
- Add web hook support for note events (Stan Hu)
- Disable "New Issue" and "New Merge Request" buttons when features are disabled in project settings (Stan Hu)
- Remove Rack Attack monkey patches and bump to version 4.3.0 (Stan Hu)
Loading
Loading
Loading
Loading
@@ -655,6 +655,12 @@ class User < ActiveRecord::Base
end
end
 
def namespaces
namespace_ids = groups.pluck(:id)
namespace_ids.push(namespace.id)
Namespace.where(id: namespace_ids)
end
def oauth_authorized_tokens
Doorkeeper::AccessToken.where(resource_owner_id: self.id, revoked_at: nil)
end
Loading
Loading
Loading
Loading
@@ -19,6 +19,7 @@
- [Deploy Keys](deploy_keys.md)
- [System Hooks](system_hooks.md)
- [Groups](groups.md)
- [Namespaces](namespaces.md)
 
## Clients
 
Loading
Loading
# Namespaces
## List namespaces
Get a list of namespaces. (As user: my namespaces, as admin: all namespaces)
```
GET /namespaces
```
```json
[
{
"id": 1,
"path": "user1",
"kind": "user"
},
{
"id": 2,
"path": "group1",
"kind": "group"
}
]
```
You can search for namespaces by name or path, see below.
## Search for namespace
Get all namespaces that match your string in their name or path.
```
GET /namespaces?search=foobar
```
```json
[
{
"id": 1,
"path": "user1",
"kind": "user"
}
]
```
module API
# namespaces API
class Namespaces < Grape::API
before do
authenticate!
authenticated_as_admin!
end
before { authenticate! }
 
resource :namespaces do
# Get a namespaces list
Loading
Loading
@@ -12,7 +9,11 @@ module API
# Example Request:
# GET /namespaces
get do
@namespaces = Namespace.all
@namespaces = if current_user.admin
Namespace.all
else
current_user.namespaces
end
@namespaces = @namespaces.search(params[:search]) if params[:search].present?
@namespaces = paginate @namespaces
 
Loading
Loading
Loading
Loading
@@ -248,6 +248,7 @@ describe User do
it { expect(@user.several_namespaces?).to be_truthy }
it { expect(@user.authorized_groups).to eq([@group]) }
it { expect(@user.owned_groups).to eq([@group]) }
it { expect(@user.namespaces).to match_array([@user.namespace, @group]) }
end
 
describe 'group multiple owners' do
Loading
Loading
@@ -270,6 +271,7 @@ describe User do
end
 
it { expect(@user.several_namespaces?).to be_falsey }
it { expect(@user.namespaces).to eq([@user.namespace]) }
end
 
describe 'blocking user' do
Loading
Loading
Loading
Loading
@@ -3,6 +3,7 @@ require 'spec_helper'
describe API::API, api: true do
include ApiHelpers
let(:admin) { create(:admin) }
let(:user) { create(:user) }
let!(:group1) { create(:group) }
let!(:group2) { create(:group) }
 
Loading
Loading
@@ -14,7 +15,7 @@ describe API::API, api: true do
end
end
 
context "when authenticated as admin" do
context "when authenticated as admin" do
it "admin: should return an array of all namespaces" do
get api("/namespaces", admin)
expect(response.status).to eq(200)
Loading
Loading
@@ -22,6 +23,32 @@ describe API::API, api: true do
 
expect(json_response.length).to eq(Namespace.count)
end
it "admin: should return an array of matched namespaces" do
get api("/namespaces?search=#{group1.name}", admin)
expect(response.status).to eq(200)
expect(json_response).to be_an Array
expect(json_response.length).to eq(1)
end
end
context "when authenticated as a regular user" do
it "user: should return an array of namespaces" do
get api("/namespaces", user)
expect(response.status).to eq(200)
expect(json_response).to be_an Array
expect(json_response.length).to eq(1)
end
it "admin: should return an array of matched namespaces" do
get api("/namespaces?search=#{user.username}", user)
expect(response.status).to eq(200)
expect(json_response).to be_an Array
expect(json_response.length).to eq(1)
end
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment