1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
class ProjectsController < ApplicationController
before_filter :authenticate_user!, except: [:build, :status, :index, :show]
before_filter :project, only: [:build, :integration, :show, :status, :edit, :update, :destroy]
before_filter :authorize_access_project!, except: [:build, :gitlab, :status, :index, :show, :new, :create]
before_filter :authenticate_token!, only: [:build]
before_filter :no_cache, only: [:status]
layout 'project', except: [:index, :gitlab]
def index
@projects = Project.public.page(params[:page]) unless current_user
end
def gitlab
current_user.reset_cache if params[:reset_cache]
@page = (params[:page] || 1).to_i
@per_page = 100
@gl_projects = current_user.gitlab_projects(@page, @per_page)
@projects = Project.where(gitlab_id: @gl_projects.map(&:id)).order('name ASC')
@total_count = @gl_projects.size
@gl_projects.reject! { |gl_project| @projects.map(&:gitlab_id).include?(gl_project.id) }
rescue
@error = 'Failed to fetch GitLab projects'
end
def show
unless @project.public
unless current_user
redirect_to(new_user_sessions_path) and return
end
unless current_user.can_access_project?(@project.gitlab_id)
page_404 and return
end
end
@ref = params[:ref]
@builds = @project.builds
@builds = @builds.where(ref: @ref) if @ref
@builds = @builds.order('id DESC').page(params[:page]).per(20)
end
def integration
end
def create
@project = Project.parse(params[:project])
Project.transaction do
@project.save!
opts = {
token: @project.token,
project_url: project_url(@project),
}
if Network.new.enable_ci(current_user.url, @project.gitlab_id, opts, current_user.private_token)
true
else
raise ActiveRecord::Rollback
end
end
if @project.persisted?
redirect_to project_path(@project, show_guide: true), notice: 'Project was successfully created.'
else
redirect_to :back, alert: 'Cannot save project'
end
end
def edit
end
def update
if project.update_attributes(params[:project])
redirect_to project, notice: 'Project was successfully updated.'
else
render action: "edit"
end
end
def destroy
project.destroy
Network.new.disable_ci(current_user.url, project.gitlab_id, current_user.private_token)
redirect_to projects_url
end
def build
# Ignore remove branch push
return head(200) if params[:after] =~ /^00000000/
build_params = params.dup
@build = @project.register_build(build_params)
if @build
head 200
else
head 500
end
rescue
head 500
end
# Project status badge
# Image with build status for sha or ref
def status
image_name = if params[:sha]
@project.sha_status_image(params[:sha])
elsif params[:ref]
@project.status_image(params[:ref])
else
'unknown.png'
end
send_file Rails.root.join('public', image_name), filename: image_name, disposition: 'inline'
end
protected
def project
@project ||= Project.find(params[:id])
end
def no_cache
response.headers["Cache-Control"] = "no-cache, no-store, max-age=0, must-revalidate"
response.headers["Pragma"] = "no-cache"
response.headers["Expires"] = "Fri, 01 Jan 1990 00:00:00 GMT"
end
end
|