Public git read-only access via http
This commit is contained in:
parent
eb626edd3f
commit
4c6224aad1
10 changed files with 89 additions and 15 deletions
11
app/controllers/public/projects_controller.rb
Normal file
11
app/controllers/public/projects_controller.rb
Normal file
|
@ -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
|
|
@ -28,7 +28,7 @@ class Project < ActiveRecord::Base
|
||||||
attr_accessible :name, :path, :description, :default_branch, :issues_enabled,
|
attr_accessible :name, :path, :description, :default_branch, :issues_enabled,
|
||||||
:wall_enabled, :merge_requests_enabled, :wiki_enabled, as: [:default, :admin]
|
: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
|
attr_accessor :error_code
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,13 @@
|
||||||
= f.label :wiki_enabled, "Wiki"
|
= f.label :wiki_enabled, "Wiki"
|
||||||
.input= f.check_box :wiki_enabled
|
.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
|
%fieldset.features
|
||||||
%legend Transfer:
|
%legend Transfer:
|
||||||
.control-group
|
.control-group
|
||||||
|
|
|
@ -77,6 +77,13 @@
|
||||||
SSH:
|
SSH:
|
||||||
%td
|
%td
|
||||||
= link_to @project.ssh_url_to_repo
|
= 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
|
- if @repository
|
||||||
%table.zebra-striped
|
%table.zebra-striped
|
||||||
|
|
17
app/views/layouts/public.html.haml
Normal file
17
app/views/layouts/public.html.haml
Normal file
|
@ -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
|
14
app/views/public/projects/index.html.haml
Normal file
14
app/views/public/projects/index.html.haml
Normal file
|
@ -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}
|
|
@ -36,6 +36,14 @@ Gitlab::Application.routes.draw do
|
||||||
get 'help/ssh' => 'help#ssh'
|
get 'help/ssh' => 'help#ssh'
|
||||||
get 'help/raketasks' => 'help#raketasks'
|
get 'help/raketasks' => 'help#raketasks'
|
||||||
|
|
||||||
|
#
|
||||||
|
# Public namespace
|
||||||
|
#
|
||||||
|
namespace :public do
|
||||||
|
resources :projects, only: [:index]
|
||||||
|
root to: "projects#index"
|
||||||
|
end
|
||||||
|
|
||||||
#
|
#
|
||||||
# Admin Area
|
# Admin Area
|
||||||
#
|
#
|
||||||
|
|
5
db/migrate/20130110172407_add_public_to_project.rb
Normal file
5
db/migrate/20130110172407_add_public_to_project.rb
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
class AddPublicToProject < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
add_column :projects, :public, :boolean, default: false, null: false
|
||||||
|
end
|
||||||
|
end
|
17
db/schema.rb
17
db/schema.rb
|
@ -11,7 +11,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended to check this file into your version control system.
|
# 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|
|
create_table "events", :force => true do |t|
|
||||||
t.string "target_type"
|
t.string "target_type"
|
||||||
|
@ -145,16 +145,17 @@ ActiveRecord::Schema.define(:version => 20130102143055) do
|
||||||
t.string "name"
|
t.string "name"
|
||||||
t.string "path"
|
t.string "path"
|
||||||
t.text "description"
|
t.text "description"
|
||||||
t.datetime "created_at", :null => false
|
t.datetime "created_at", :null => false
|
||||||
t.datetime "updated_at", :null => false
|
t.datetime "updated_at", :null => false
|
||||||
t.boolean "private_flag", :default => true, :null => false
|
t.boolean "private_flag", :default => true, :null => false
|
||||||
t.integer "creator_id"
|
t.integer "creator_id"
|
||||||
t.string "default_branch"
|
t.string "default_branch"
|
||||||
t.boolean "issues_enabled", :default => true, :null => false
|
t.boolean "issues_enabled", :default => true, :null => false
|
||||||
t.boolean "wall_enabled", :default => true, :null => false
|
t.boolean "wall_enabled", :default => true, :null => false
|
||||||
t.boolean "merge_requests_enabled", :default => true, :null => false
|
t.boolean "merge_requests_enabled", :default => true, :null => false
|
||||||
t.boolean "wiki_enabled", :default => true, :null => false
|
t.boolean "wiki_enabled", :default => true, :null => false
|
||||||
t.integer "namespace_id"
|
t.integer "namespace_id"
|
||||||
|
t.boolean "public", :default => false, :null => false
|
||||||
end
|
end
|
||||||
|
|
||||||
add_index "projects", ["creator_id"], :name => "index_projects_on_owner_id"
|
add_index "projects", ["creator_id"], :name => "index_projects_on_owner_id"
|
||||||
|
|
|
@ -3,6 +3,16 @@ module Grack
|
||||||
attr_accessor :user, :project
|
attr_accessor :user, :project
|
||||||
|
|
||||||
def valid?
|
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
|
# Authentication with username and password
|
||||||
login, password = @auth.credentials
|
login, password = @auth.credentials
|
||||||
|
|
||||||
|
@ -17,12 +27,6 @@ module Grack
|
||||||
# Pass Gitolite update hook
|
# Pass Gitolite update hook
|
||||||
ENV['GL_BYPASS_UPDATE_HOOK'] = "true"
|
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
|
# Git upload and receive
|
||||||
if @request.get?
|
if @request.get?
|
||||||
validate_get_request
|
validate_get_request
|
||||||
|
|
Loading…
Reference in a new issue