Permalink
Browse files

Public git read-only access via http

  • Loading branch information...
1 parent eb626ed commit 4c6224aad173a26f1fbe20588b4b155f031d779f @dzaporozhets dzaporozhets committed Jan 10, 2013
@@ -0,0 +1,11 @@
+class Public::ProjectsController < ApplicationController
+ skip_before_filter :authenticate_user!,
+ :reject_blocked, :set_current_user_for_observers,
+ :add_abilities
+
+ layout 'public'
+
+ def index
+ @projects = Project.where(public: true)
+ end
+end
View
@@ -28,7 +28,7 @@ class TransferError < StandardError; end
attr_accessible :name, :path, :description, :default_branch, :issues_enabled,
:wall_enabled, :merge_requests_enabled, :wiki_enabled, as: [:default, :admin]
- attr_accessible :namespace_id, :creator_id, as: :admin
+ attr_accessible :namespace_id, :creator_id, :public, as: :admin
attr_accessor :error_code
@@ -44,6 +44,13 @@
.input= f.check_box :wiki_enabled
%fieldset.features
+ %legend Public mode:
+ .clearfix
+ = f.label :public do
+ %span Allow public http clone
+ .input= f.check_box :public
+
+ %fieldset.features
%legend Transfer:
.control-group
= f.label :namespace_id do
@@ -77,6 +77,13 @@
SSH:
%td
= link_to @project.ssh_url_to_repo
+ - if @project.public
+ %tr.bgred
+ %td
+ %b
+ Public Read-Only Code access:
+ %td
+ = check_box_tag 'public', nil, @project.public
- if @repository
%table.zebra-striped
@@ -0,0 +1,17 @@
+!!! 5
+%html{ lang: "en"}
+ = render "layouts/head", title: "Error"
+ %body{class: "#{app_theme} application"}
+ %header.navbar.navbar-static-top.navbar-gitlab
+ .navbar-inner
+ .container
+ %div.app_logo
+ %span.separator
+ = link_to public_root_path, class: "home" do
+ %h1 GITLAB
+ %span.separator
+ %h1.project_name Public
+ .container
+ .content
+ .prepend-top-20
+ = yield
@@ -0,0 +1,14 @@
+%h3.page_title
+ Projects
+ %small Read-Only Access
+%hr
+
+%ul.well-list
+ - @projects.each do |project|
+ %li.clearfix
+ %h5
+ %i.icon-star.cgreen
+ = project.name_with_namespace
+ .right
+ %span.monospace.tiny
+ git clone #{project.http_url_to_repo}
View
@@ -37,6 +37,14 @@
get 'help/raketasks' => 'help#raketasks'
#
+ # Public namespace
+ #
+ namespace :public do
+ resources :projects, only: [:index]
+ root to: "projects#index"
+ end
+
+ #
# Admin Area
#
namespace :admin do
@@ -0,0 +1,5 @@
+class AddPublicToProject < ActiveRecord::Migration
+ def change
+ add_column :projects, :public, :boolean, default: false, null: false
+ end
+end
View
@@ -11,7 +11,7 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 20130102143055) do
+ActiveRecord::Schema.define(:version => 20130110172407) do
create_table "events", :force => true do |t|
t.string "target_type"
@@ -145,16 +145,17 @@
t.string "name"
t.string "path"
t.text "description"
- t.datetime "created_at", :null => false
- t.datetime "updated_at", :null => false
- t.boolean "private_flag", :default => true, :null => false
+ t.datetime "created_at", :null => false
+ t.datetime "updated_at", :null => false
+ t.boolean "private_flag", :default => true, :null => false
t.integer "creator_id"
t.string "default_branch"
- t.boolean "issues_enabled", :default => true, :null => false
- t.boolean "wall_enabled", :default => true, :null => false
- t.boolean "merge_requests_enabled", :default => true, :null => false
- t.boolean "wiki_enabled", :default => true, :null => false
+ t.boolean "issues_enabled", :default => true, :null => false
+ t.boolean "wall_enabled", :default => true, :null => false
+ t.boolean "merge_requests_enabled", :default => true, :null => false
+ t.boolean "wiki_enabled", :default => true, :null => false
t.integer "namespace_id"
+ t.boolean "public", :default => false, :null => false
end
add_index "projects", ["creator_id"], :name => "index_projects_on_owner_id"
@@ -3,6 +3,16 @@ class Auth < Rack::Auth::Basic
attr_accessor :user, :project
def valid?
+ # Find project by PATH_INFO from env
+ if m = /^\/([\w\.\/-]+)\.git/.match(@request.path_info).to_a
+ self.project = Project.find_with_namespace(m.last)
+ return false unless project
+ end
+
+ if @request.get? && project.public
+ return true
+ end
+
# Authentication with username and password
login, password = @auth.credentials
@@ -17,12 +27,6 @@ def valid?
# Pass Gitolite update hook
ENV['GL_BYPASS_UPDATE_HOOK'] = "true"
- # Find project by PATH_INFO from env
- if m = /^\/([\w\.\/-]+)\.git/.match(@request.path_info).to_a
- self.project = Project.find_with_namespace(m.last)
- return false unless project
- end
-
# Git upload and receive
if @request.get?
validate_get_request

0 comments on commit 4c6224a

Please sign in to comment.