class Arvados::V1::RepositoriesController < ApplicationController
+ before_filter :admin_required, :only => :get_all_permissions
+ def get_all_permissions
+ @users = {}
+ User.includes(:authorized_keys).all.each do |u|
+ @users[u.uuid] = u
+ end
+ @user_aks = {}
+ @repo_info = {}
+ @repos = Repository.includes(:permissions).all
+ @repos.each do |repo|
+ gitolite_permissions = ''
+ repo.permissions.each do |perm|
+ user_uuid = perm.tail_uuid
+ @user_aks[user_uuid] = @users[user_uuid].andand.authorized_keys.collect do |ak|
+ {
+ public_key: ak.public_key,
+ authorized_key_uuid: ak.uuid
+ }
+ end || []
+ if @user_aks[user_uuid].any?
+ @repo_info[repo.uuid] ||= {
+ uuid: repo.uuid,
+ name: repo.name,
+ push_url: repo.push_url,
+ fetch_url: repo.fetch_url,
+ user_permissions: {}
+ }
+ @repo_info[repo.uuid][:user_permissions][user_uuid] ||= {}
+ @repo_info[repo.uuid][:user_permissions][user_uuid][perm.name] = true
+ end
+ end
+ end
+ @repo_info.values.each do |repo_users|
+ repo_users[:user_permissions].each do |user_uuid,perms|
+ if perms['can_write']
+ perms[:gitolite_permissions] = 'RW'
+ perms['can_read'] = true
+ elsif perms['can_read']
+ perms[:gitolite_permissions] = 'R'
+ end
+ end
+ end
+ render json: {
+ kind: 'arvados#RepositoryPermissionSnapshot',
+ repositories: @repo_info.values,
+ user_keys: @user_aks
+ }
+ end
end
before_update :maybe_update_modified_by_fields
validate :ensure_serialized_attribute_type
+ has_many :permissions, :foreign_key => :head_uuid, :class_name => 'Link', :primary_key => :uuid, :conditions => "link_class = 'permission'"
+
class PermissionDeniedError < StandardError
end
t.add :push_url
end
+ def push_url
+ super || self.name && "git@git.#{Rails.configuration.uuid_prefix}.arvadosapi.com:#{self.name}.git"
+ end
+
+ def fetch_url
+ super || self.name && "git://git.#{Rails.configuration.uuid_prefix}.arvadosapi.com/#{self.name}.git"
+ end
+
protected
def permission_to_create
match '/users/current' => 'users#current'
match '/jobs/queue' => 'jobs#queue'
match '/virtual_machines/get_all_logins' => 'virtual_machines#get_all_logins'
+ match '/repositories/get_all_permissions' => 'repositories#get_all_permissions'
resources :collections
resources :links
resources :nodes
--- /dev/null
+class AddNameUniqueIndexToRepositories < ActiveRecord::Migration
+ def up
+ remove_index :repositories, :name
+ add_index :repositories, :name, :unique => true
+ end
+
+ def down
+ remove_index :repositories, :name
+ add_index :repositories, :name
+ end
+end
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 20130611163736) do
+ActiveRecord::Schema.define(:version => 20130612042554) do
create_table "api_client_authorizations", :force => true do |t|
t.string "api_token", :null => false
t.datetime "updated_at"
end
- add_index "repositories", ["name"], :name => "index_repositories_on_name"
+ add_index "repositories", ["name"], :name => "index_repositories_on_name", :unique => true
add_index "repositories", ["uuid"], :name => "index_repositories_on_uuid", :unique => true
create_table "specimens", :force => true do |t|