Skip to content

Commit 429b96f

Browse files
committed
Added edit bindings
1 parent 664b60a commit 429b96f

5 files changed

Lines changed: 98 additions & 14 deletions

File tree

AzureWebFarm.ControlPanel/Areas/ControlPanel/Controllers/BindingController.cs

Lines changed: 63 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ public ActionResult Create(Guid websiteId)
2929
[HttpPost]
3030
public ActionResult Create(CreateBindingViewModel vm)
3131
{
32+
if (!ModelState.IsValid)
33+
return View(vm);
34+
3235
var binding = new Binding
3336
{
3437
HostName = vm.HostName,
@@ -39,7 +42,36 @@ public ActionResult Create(CreateBindingViewModel vm)
3942
};
4043
_webSiteRepository.AddBindingToWebSite(vm.WebsiteId, binding);
4144

42-
return RedirectToAction("Detail", "WebSite", new {Id = vm.WebsiteId});
45+
return RedirectToAction("Detail", "WebSite", new { area = ControlPanelAreaRegistration.Name, Id = vm.WebsiteId });
46+
}
47+
48+
public ActionResult Edit(Guid id)
49+
{
50+
var binding = _webSiteRepository.RetrieveBinding(id);
51+
if (binding == null)
52+
return HttpNotFound();
53+
54+
return View(new EditBindingViewModel(binding));
55+
}
56+
57+
[HttpPost]
58+
public ActionResult Edit(EditBindingViewModel vm)
59+
{
60+
var binding = _webSiteRepository.RetrieveBinding(vm.Id);
61+
if (binding == null)
62+
return HttpNotFound();
63+
64+
if (!ModelState.IsValid)
65+
return View(vm);
66+
67+
binding.HostName = vm.HostName;
68+
binding.Port = vm.Port;
69+
binding.Protocol = vm.Protocol.ToString().ToLower();
70+
binding.IpAddress = vm.IpAddress;
71+
binding.CertificateThumbprint = vm.CertificateThumbprint;
72+
_webSiteRepository.UpdateBinding(binding);
73+
74+
return RedirectToAction("Detail", "WebSite", new { area = ControlPanelAreaRegistration.Name, Id = binding.WebSiteId });
4375
}
4476

4577
[HttpPost]
@@ -50,14 +82,41 @@ public ActionResult Delete(Guid id)
5082
return HttpNotFound();
5183

5284
_webSiteRepository.RemoveBinding(id);
53-
return RedirectToAction("Detail", "WebSite", new {Id = binding.WebSiteId});
85+
return RedirectToAction("Detail", "WebSite", new { area = ControlPanelAreaRegistration.Name, Id = binding.WebSiteId });
5486
}
5587
}
5688

57-
public class CreateBindingViewModel
89+
public class CreateBindingViewModel : BindingViewModel
90+
{
91+
public CreateBindingViewModel()
92+
{
93+
Port = 80;
94+
IpAddress = "*";
95+
}
96+
97+
public Guid WebsiteId { get; set; }
98+
}
99+
100+
public class EditBindingViewModel : BindingViewModel
101+
{
102+
public EditBindingViewModel() {}
103+
104+
public EditBindingViewModel(Binding binding)
105+
{
106+
HostName = binding.HostName;
107+
Port = binding.Port;
108+
Protocol = (Protocol) Enum.Parse(typeof (Protocol), binding.Protocol, true);
109+
IpAddress = binding.IpAddress;
110+
CertificateThumbprint = binding.CertificateThumbprint;
111+
}
112+
113+
public Guid Id { get; set; }
114+
}
115+
116+
public class BindingViewModel
58117
{
59118
private static readonly List<Certificate> CertificatesCache = new List<Certificate>();
60-
static CreateBindingViewModel()
119+
static BindingViewModel()
61120
{
62121
var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
63122
store.Open(OpenFlags.ReadWrite);
@@ -72,12 +131,6 @@ static CreateBindingViewModel()
72131
store.Close();
73132
}
74133

75-
public CreateBindingViewModel()
76-
{
77-
Port = 80;
78-
IpAddress = "*";
79-
}
80-
81134
[Required]
82135
public string HostName { get; set; }
83136
[Required]
@@ -89,7 +142,6 @@ public CreateBindingViewModel()
89142
public string IpAddress { get; set; }
90143
[ExistsIn("Certificates", "Thumbprint", "Name")]
91144
public string CertificateThumbprint { get; set; }
92-
public Guid WebsiteId { get; set; }
93145

94146
public IList<Certificate> Certificates { get { return CertificatesCache; } }
95147
}

AzureWebFarm.ControlPanel/Areas/ControlPanel/Views/Binding/Create.cshtml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
@using ChameleonForms.Templates.TwitterBootstrap3
33
@model CreateBindingViewModel
44

5-
<h1>Create Website</h1>
5+
<h1>Create Binding</h1>
66

77
@using (var f = Html.BeginChameleonForm())
88
{
@@ -19,6 +19,6 @@
1919

2020
using (var n = f.BeginNavigation())
2121
{
22-
@n.Submit("Create").WithStyle(EmphasisStyle.Primary).WithIcon("globe")
22+
@n.Submit("Create").WithStyle(EmphasisStyle.Primary).WithIcon("cloud-upload")
2323
}
2424
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
@using AzureWebFarm.ControlPanel.Areas.ControlPanel.Controllers
2+
@using ChameleonForms.Templates.TwitterBootstrap3
3+
@model EditBindingViewModel
4+
5+
<h1>Create Binding</h1>
6+
7+
@using (var f = Html.BeginChameleonForm())
8+
{
9+
using (var s = f.BeginSection())
10+
{
11+
@s.FieldFor(m => m.HostName)
12+
@s.FieldFor(m => m.IpAddress)
13+
@s.FieldFor(m => m.Port)
14+
@s.FieldFor(m => m.Protocol)
15+
@s.FieldFor(m => m.CertificateThumbprint)
16+
}
17+
18+
using (var n = f.BeginNavigation())
19+
{
20+
@n.Submit("Edit").WithStyle(EmphasisStyle.Primary).WithIcon("cloud-upload")
21+
}
22+
}

AzureWebFarm.ControlPanel/Areas/ControlPanel/Views/WebSite/Detail.cshtml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
@using AzureWebFarm.ControlPanel.Areas.ControlPanel.Views
2+
@using AzureWebFarm.Entities
23
@using MvcContrib.UI.Grid
34
@using AzureWebFarm.ControlPanel.Areas.ControlPanel.Controllers
45
@model WebSiteDetailViewModel
56

7+
@helper BindingButtons(Binding b)
8+
{
9+
<a class="btn btn-primary" href="@Url.Action("Edit", "Binding", new {b.Id})"><span class="glyphicon glyphicon-cloud-upload"></span> Edit binding</a>
10+
<form method="post" action="@Url.Action("Delete", "Binding", new {b.Id})" style="display: inline;"><button class="btn btn-danger" type="submit" onclick="return confirm('Are you sure you want to delete the binding for @b.Protocol://@b.HostName:@b.Port');"><span class="glyphicon glyphicon-remove"></span> Delete</button></form>
11+
}
12+
613
<h1>Website: @Model.Site.Name</h1>
714

815
<div class="panel panel-primary">
@@ -16,7 +23,7 @@
1623
c.For(b => b.Port);
1724
c.For(b => b.IpAddress);
1825
c.For(b => new HtmlString(!string.IsNullOrEmpty(b.CertificateThumbprint) ? HttpUtility.HtmlEncode(b.CertificateThumbprint) : "<em>None</em>")).Named("Certificate Thumbprint");
19-
c.For(b => new HtmlString(string.Format("<form method=\"post\" action=\"{0}\"><button class=\"btn btn-danger\" type=\"submit\" onclick=\"return confirm('Are you sure you want to delete the binding for {1}://{2}:{3}');\"><span class=\"glyphicon glyphicon-remove\"></span> Delete</button></form>", Url.Action("Delete", "Binding", new {b.Id}), b.Protocol, b.HostName, b.Port))).Named("Delete Binding");
26+
c.For(b => BindingButtons(b)).Named("Actions");
2027
})
2128
</div>
2229
</div>

AzureWebFarm.ControlPanel/AzureWebFarm.ControlPanel.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,9 @@
237237
<ItemGroup>
238238
<EmbeddedResource Include="Areas\ControlPanel\Views\Binding\Create.cshtml" />
239239
</ItemGroup>
240+
<ItemGroup>
241+
<EmbeddedResource Include="Areas\ControlPanel\Views\Binding\Edit.cshtml" />
242+
</ItemGroup>
240243
<PropertyGroup>
241244
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
242245
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>

0 commit comments

Comments
 (0)