Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
f30b47b3
Commit
f30b47b3
authored
Feb 25, 2018
by
Rob Watson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
PagesDomain: Add edit/update functionality
parent
573738ee
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
158 additions
and
40 deletions
+158
-40
app/controllers/projects/pages_domains_controller.rb
app/controllers/projects/pages_domains_controller.rb
+21
-8
app/views/projects/pages_domains/_form.html.haml
app/views/projects/pages_domains/_form.html.haml
+26
-30
app/views/projects/pages_domains/edit.html.haml
app/views/projects/pages_domains/edit.html.haml
+9
-0
app/views/projects/pages_domains/new.html.haml
app/views/projects/pages_domains/new.html.haml
+4
-1
app/views/projects/pages_domains/show.html.haml
app/views/projects/pages_domains/show.html.haml
+1
-0
changelogs/unreleased/feature-edit_pages_domain.yml
changelogs/unreleased/feature-edit_pages_domain.yml
+5
-0
config/routes/project.rb
config/routes/project.rb
+1
-1
spec/controllers/projects/pages_domains_controller_spec.rb
spec/controllers/projects/pages_domains_controller_spec.rb
+60
-0
spec/features/projects/pages_spec.rb
spec/features/projects/pages_spec.rb
+31
-0
No files found.
app/controllers/projects/pages_domains_controller.rb
View file @
f30b47b3
...
...
@@ -3,7 +3,7 @@ class Projects::PagesDomainsController < Projects::ApplicationController
before_action
:require_pages_enabled!
before_action
:authorize_update_pages!
,
except:
[
:show
]
before_action
:domain
,
only:
[
:show
,
:destroy
,
:verify
]
before_action
:domain
,
except:
[
:new
,
:create
]
def
show
end
...
...
@@ -24,8 +24,11 @@ class Projects::PagesDomainsController < Projects::ApplicationController
redirect_to
project_pages_domain_path
(
@project
,
@domain
)
end
def
edit
end
def
create
@domain
=
@project
.
pages_domains
.
create
(
pages_domain
_params
)
@domain
=
@project
.
pages_domains
.
create
(
create
_params
)
if
@domain
.
valid?
redirect_to
project_pages_domain_path
(
@project
,
@domain
)
...
...
@@ -34,6 +37,16 @@ class Projects::PagesDomainsController < Projects::ApplicationController
end
end
def
update
if
@domain
.
update
(
update_params
)
redirect_to
project_pages_path
(
@project
),
status:
302
,
notice:
'Domain was updated'
else
render
'edit'
end
end
def
destroy
@domain
.
destroy
...
...
@@ -49,12 +62,12 @@ class Projects::PagesDomainsController < Projects::ApplicationController
private
def
pages_domain
_params
params
.
require
(
:pages_domain
).
permit
(
:certificate
,
:key
,
:domain
)
def
create
_params
params
.
require
(
:pages_domain
).
permit
(
:key
,
:certificate
,
:domain
)
end
def
update_params
params
.
require
(
:pages_domain
).
permit
(
:key
,
:certificate
)
end
def
domain
...
...
app/views/projects/pages_domains/_form.html.haml
View file @
f30b47b3
=
form_for
[
@project
.
namespace
.
becomes
(
Namespace
),
@project
,
@domain
],
html:
{
class:
'form-horizontal fieldset-form'
}
do
|
f
|
-
if
@domain
.
errors
.
any?
#error_explanation
.alert.alert-danger
-
@domain
.
errors
.
full_messages
.
each
do
|
msg
|
%p
=
msg
-
if
@domain
.
errors
.
any?
#error_explanation
.alert.alert-danger
-
@domain
.
errors
.
full_messages
.
each
do
|
msg
|
%p
=
msg
.form-group
=
f
.
label
:domain
,
class:
'control-label'
do
Domain
.col-sm-10
=
f
.
text_field
:domain
,
required:
true
,
autocomplete:
'off'
,
class:
'form-control'
,
disabled:
@domain
.
persisted?
-
if
Gitlab
.
config
.
pages
.
external_https
.form-group
=
f
.
label
:
domain
,
class:
'control-label'
do
Domain
=
f
.
label
:
certificate
,
class:
'control-label'
do
Certificate (PEM)
.col-sm-10
=
f
.
text_field
:domain
,
required:
true
,
autocomplete:
'off'
,
class:
'form-control'
-
if
Gitlab
.
config
.
pages
.
external_https
.form-group
=
f
.
label
:certificate
,
class:
'control-label'
do
Certificate (PEM)
.col-sm-10
=
f
.
text_area
:certificate
,
rows:
5
,
class:
'form-control'
%span
.help-inline
Upload a certificate for your domain with all intermediates
.form-group
=
f
.
label
:key
,
class:
'control-label'
do
Key (PEM)
.col-sm-10
=
f
.
text_area
:key
,
rows:
5
,
class:
'form-control'
%span
.help-inline
Upload a private key for your certificate
-
else
.nothing-here-block
Support for custom certificates is disabled.
Ask your system's administrator to enable it.
=
f
.
text_area
:certificate
,
rows:
5
,
class:
'form-control'
%span
.help-inline
Upload a certificate for your domain with all intermediates
.form-actions
=
f
.
submit
'Create New Domain'
,
class:
"btn btn-save"
.form-group
=
f
.
label
:key
,
class:
'control-label'
do
Key (PEM)
.col-sm-10
=
f
.
text_area
:key
,
rows:
5
,
class:
'form-control'
%span
.help-inline
Upload a private key for your certificate
-
else
.nothing-here-block
Support for custom certificates is disabled.
Ask your system's administrator to enable it.
app/views/projects/pages_domains/edit.html.haml
0 → 100644
View file @
f30b47b3
-
page_title
@domain
.
domain
%h3
.page_title
=
@domain
.
domain
%hr
.clearfix
%div
=
form_for
[
@project
.
namespace
.
becomes
(
Namespace
),
@project
,
@domain
],
html:
{
class:
'form-horizontal fieldset-form'
}
do
|
f
|
=
render
'form'
,
{
f:
f
}
.form-actions
=
f
.
submit
'Save Changes'
,
class:
"btn btn-save"
app/views/projects/pages_domains/new.html.haml
View file @
f30b47b3
...
...
@@ -3,4 +3,7 @@
New Pages Domain
%hr
.clearfix
%div
=
render
'form'
=
form_for
[
@project
.
namespace
.
becomes
(
Namespace
),
@project
,
@domain
],
html:
{
class:
'form-horizontal fieldset-form'
}
do
|
f
|
=
render
'form'
,
{
f:
f
}
.form-actions
=
f
.
submit
'Create New Domain'
,
class:
"btn btn-save"
app/views/projects/pages_domains/show.html.haml
View file @
f30b47b3
...
...
@@ -8,6 +8,7 @@
%h3
.page-title
Pages Domain
=
link_to
'Edit'
,
edit_project_pages_domain_path
(
@project
,
@domain
),
class:
'btn btn-success pull-right'
.table-holder
%table
.table
...
...
changelogs/unreleased/feature-edit_pages_domain.yml
0 → 100644
View file @
f30b47b3
---
title
:
'
Pages
custom
domain:
allow
update
of
key/certificate'
merge_request
:
17376
author
:
rfwatson
type
:
changed
config/routes/project.rb
View file @
f30b47b3
...
...
@@ -55,7 +55,7 @@ constraints(ProjectUrlConstrainer.new) do
end
resource
:pages
,
only:
[
:show
,
:destroy
]
do
resources
:domains
,
only:
[
:show
,
:new
,
:create
,
:destroy
]
,
controller:
'pages_domains'
,
constraints:
{
id:
%r{[^/]+}
}
do
resources
:domains
,
except: :index
,
controller:
'pages_domains'
,
constraints:
{
id:
%r{[^/]+}
}
do
member
do
post
:verify
end
...
...
spec/controllers/projects/pages_domains_controller_spec.rb
View file @
f30b47b3
...
...
@@ -53,6 +53,66 @@ describe Projects::PagesDomainsController do
end
end
describe
'GET edit'
do
it
"displays the 'edit' page"
do
get
(
:edit
,
request_params
.
merge
(
id:
pages_domain
.
domain
))
expect
(
response
).
to
have_gitlab_http_status
(
200
)
expect
(
response
).
to
render_template
(
'edit'
)
end
end
describe
'PATCH update'
do
before
do
controller
.
instance_variable_set
(
:@domain
,
pages_domain
)
end
let
(
:pages_domain_params
)
do
attributes_for
(
:pages_domain
,
:with_certificate
,
:with_key
).
slice
(
:key
,
:certificate
)
end
let
(
:params
)
do
request_params
.
merge
(
id:
pages_domain
.
domain
,
pages_domain:
pages_domain_params
)
end
it
'updates the domain'
do
expect
(
pages_domain
)
.
to
receive
(
:update
)
.
with
(
pages_domain_params
)
.
and_return
(
true
)
patch
(
:update
,
params
)
end
it
'redirects to the project page'
do
patch
(
:update
,
params
)
expect
(
flash
[
:notice
]).
to
eq
'Domain was updated'
expect
(
response
).
to
redirect_to
(
project_pages_path
(
project
))
end
context
'the domain is invalid'
do
it
'renders the edit action'
do
allow
(
pages_domain
).
to
receive
(
:update
).
and_return
(
false
)
patch
(
:update
,
params
)
expect
(
response
).
to
render_template
(
'edit'
)
end
end
context
'the parameters include the domain'
do
it
'renders 400 Bad Request'
do
expect
(
pages_domain
)
.
to
receive
(
:update
)
.
with
(
hash_not_including
(
:domain
))
.
and_return
(
true
)
patch
(
:update
,
params
.
deep_merge
(
pages_domain:
{
domain:
'abc'
}))
end
end
end
describe
'POST verify'
do
let
(
:params
)
{
request_params
.
merge
(
id:
pages_domain
.
domain
)
}
...
...
spec/features/projects/pages_spec.rb
View file @
f30b47b3
...
...
@@ -160,6 +160,37 @@ feature 'Pages' do
expect
(
page
).
to
have_content
(
'my.test.domain.com'
)
end
describe
'updating the certificate for an existing domain'
do
let!
(
:domain
)
do
create
(
:pages_domain
,
:with_key
,
:with_certificate
,
project:
project
)
end
it
'allows the certificate to be updated'
do
visit
project_pages_path
(
project
)
within
(
'#content-body'
)
{
click_link
'Details'
}
click_link
'Edit'
click_button
'Save Changes'
expect
(
page
).
to
have_content
(
'Domain was updated'
)
end
context
'when the certificate is invalid'
do
it
'tells the user what the problem is'
do
visit
project_pages_path
(
project
)
within
(
'#content-body'
)
{
click_link
'Details'
}
click_link
'Edit'
fill_in
'Certificate (PEM)'
,
with:
'invalid data'
click_button
'Save Changes'
expect
(
page
).
to
have_content
(
'Certificate must be a valid PEM certificate'
)
expect
(
page
).
to
have_content
(
'Certificate misses intermediates'
)
expect
(
page
).
to
have_content
(
"Key doesn't match the certificate"
)
end
end
end
end
end
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment