* DataManager.cs: InitDb on the go

* InitDb.aspx:
* StaticPage.master:
* Created.aspx:
* LocalizedText.fr.resx:
* AdminController.cs:
* LocalizedText.Designer.cs: 

* Web.csproj: Db initialisation web pages

* DataAccess.cs: a connection string

* LocalizedText.resx: internationalisaX creating the admin role
main
Paul Schneider 11 years ago
parent a7de4e1fec
commit bf8dbeee04
10 changed files with 123 additions and 55 deletions

@ -3,6 +3,7 @@ using System.Diagnostics;
using System.IO; using System.IO;
using Yavsc.Model.Admin; using Yavsc.Model.Admin;
using Npgsql.Web.Blog; using Npgsql.Web.Blog;
using System.Resources;
namespace Yavsc.Admin namespace Yavsc.Admin
{ {
@ -67,7 +68,34 @@ namespace Yavsc.Admin
public TaskOutput CreateDb () public TaskOutput CreateDb ()
{ {
return Restore ("freshinstall", false); TaskOutput res = new TaskOutput ();
string sql;
try {
using (Stream sqlStream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("Yavsc.instdbws.sql"))
{
using (StreamReader srdr = new StreamReader (sqlStream)) {
sql = srdr.ReadToEnd ();
using (var cnx = new Npgsql.NpgsqlConnection (da.ConnectionString())) {
using (var cmd = cnx.CreateCommand ()) {
cmd.CommandText = sql;
cnx.Open();
cmd.ExecuteNonQuery();
cnx.Close();
}
}
}
}
}
catch (Exception ex) {
res.ExitCode = 1;
res.Error =
string.Format ("Exception of type {0} occured during the script execution",
ex.GetType ().Name);
res.Message = ex.Message;
}
return res;
} }
public Export TagBackup (string filename, string [] tags) public Export TagBackup (string filename, string [] tags)

@ -9,6 +9,7 @@ using Yavsc.Model.RolesAndMembers;
using Yavsc.Model.Admin; using Yavsc.Model.Admin;
using Yavsc.Admin; using Yavsc.Admin;
using System.IO; using System.IO;
using Yavsc.Model;
namespace Yavsc.Controllers namespace Yavsc.Controllers
@ -19,13 +20,27 @@ namespace Yavsc.Controllers
/// </summary> /// </summary>
public class AdminController : Controller public class AdminController : Controller
{ {
[Authorize(Roles="Admin")]
public ActionResult Index() public ActionResult Index()
{ {
if (!Roles.RoleExists (adminRoleName)) {
Roles.CreateRole (adminRoleName);
}
return View (); return View ();
} }
public ActionResult InitDb(DataAccess datac, string doInit)
{
if (doInit=="on") {
if (ModelState.IsValid) {
// TODO BETTER
datac.BackupPrefix = Server.MapPath (datac.BackupPrefix);
DataManager mgr = new DataManager (datac);
TaskOutput t = mgr.CreateDb ();
return View ("Created", t);
}
}
return View ();
}
[Authorize(Roles="Admin")] [Authorize(Roles="Admin")]
public ActionResult Backups(DataAccess model) public ActionResult Backups(DataAccess model)
{ {
@ -134,7 +149,13 @@ namespace Yavsc.Controllers
ViewData["usertoremove"] = username; ViewData["usertoremove"] = username;
return UserList(); return UserList();
} }
//TODO no more than pageSize results per page //TODO no more than pageSize results per page
/// <summary>
/// User list.
/// </summary>
/// <returns>The list.</returns>
[Authorize()] [Authorize()]
public ActionResult UserList () public ActionResult UserList ()
{ {
@ -142,55 +163,68 @@ namespace Yavsc.Controllers
return View (c); return View (c);
} }
/// <summary>
/// a form to add a role
/// </summary>
/// <returns>The role.</returns>
[Authorize(Roles="Admin")] [Authorize(Roles="Admin")]
public ActionResult AddRole () public ActionResult AddRole ()
{ {
return View (); return View ();
} }
/// <summary>
/// Add a new role.
/// </summary>
/// <returns>The add role.</returns>
/// <param name="rolename">Rolename.</param>
[Authorize(Roles="Admin")] [Authorize(Roles="Admin")]
public ActionResult DoAddRole (string rolename) public ActionResult DoAddRole (string rolename)
{ {
Roles.CreateRole(rolename); Roles.CreateRole(rolename);
ViewData["Message"] = "Rôle créé : "+rolename; ViewData["Message"] = LocalizedText.role_created+ " : "+rolename;
return View (); return View ();
} }
/// <summary>
/// Shows the roles list.
/// </summary>
/// <returns>The list.</returns>
[Authorize()] [Authorize()]
public ActionResult RoleList () public ActionResult RoleList ()
{ {
return View (Roles.GetAllRoles ()); return View (Roles.GetAllRoles ());
} }
private const string adminRoleName = "Admin"; private const string adminRoleName = "Admin";
protected override void Initialize (System.Web.Routing.RequestContext requestContext)
{
base.Initialize (requestContext);
if (!Roles.RoleExists (adminRoleName)) {
Roles.CreateRole (adminRoleName);
}
}
/// <summary>
/// Assing the Admin role to the specified user in model.
/// </summary>
/// <param name="model">Model.</param>
[Authorize()] [Authorize()]
public ActionResult Admin (NewAdminModel model) public ActionResult Admin (NewAdminModel model)
{ {
string currentUser = Membership.GetUser ().UserName; string currentUser = Membership.GetUser ().UserName;
if (ModelState.IsValid) { if (ModelState.IsValid) {
Roles.AddUserToRole (model.UserName, adminRoleName); Roles.AddUserToRole (model.UserName, adminRoleName);
ViewData ["Message"] = model.UserName + " was added to the role '" + adminRoleName + "'"; ViewData ["Message"] = model.UserName + " "+LocalizedText.was_added_to_the_role+" '" + adminRoleName + "'";
} else { } else {
// ASSERT (Roles.RoleExists (adminRoleName)) // ASSERT (Roles.RoleExists (adminRoleName))
string [] admins = Roles.GetUsersInRole (adminRoleName); string [] admins = Roles.GetUsersInRole (adminRoleName);
if (admins.Length > 0) { if (admins.Length > 0) {
if (! admins.Contains (Membership.GetUser ().UserName)) { if (! admins.Contains (Membership.GetUser ().UserName)) {
ModelState.Remove("UserName"); ModelState.Remove("UserName");
ModelState.AddModelError("UserName", "You're not administrator!"); ModelState.AddModelError("UserName",LocalizedText.younotadmin+"!");
return View ("Index"); return View ("Index");
} }
} else { } else {
Roles.AddUserToRole (currentUser, adminRoleName); Roles.AddUserToRole (currentUser, adminRoleName);
admins = new string[] { currentUser }; admins = new string[] { currentUser };
ViewData ["Message"] += string.Format ( ViewData ["Message"] += string.Format (
"There was no user in the 'Admin' role. You ({0}) was just added as the firt user in the 'Admin' role. ", currentUser); LocalizedText.was_added_to_the_empty_role,
currentUser, adminRoleName);
} }
List<SelectListItem> users = new List<SelectListItem> (); List<SelectListItem> users = new List<SelectListItem> ();

@ -45,26 +45,6 @@
<aside> <aside>
<asp:ContentPlaceHolder ID="MASContent" runat="server"> <asp:ContentPlaceHolder ID="MASContent" runat="server">
</asp:ContentPlaceHolder> </asp:ContentPlaceHolder>
<div id="login">
<% if (Membership.GetUser()==null) { %>
<%= Html.ActionLink( YavscHelpers.SiteName, "Index", "Home" ,null, new { @class="actionlink" } ) %>
<span class="hidcom"> Page d'accueil </span>
<%= Html.ActionLink("Login", "Login", "Account", new { returnUrl=Request.Url.PathAndQuery }, new { @class="actionlink" } ) %>
<span class="hidcom">Pour pouvoir poster ou commenter</span>
<a href="<%=Request.Url.Scheme + "://" + Request.Url.Authority + "/Google/Login"%>?returnUrl=<%=Request.Url.PathAndQuery%>" class="actionlink">
<img src="/images/sign-in-with-google-s.png" style="max-height:1.5em; max-width:6em;" alt="Google sign in">
</a>
<span class="hidcom">S'authentifier avec son compte Google+</span>
<% } else { %>
<%= Html.ActionLink(HttpContext.Current.User.Identity.Name, "Profile", "Account", null, new { @class="actionlink" }) %>
<span class="hidcom"> &Eacute;dition de votre profile </span>
@ <%= Html.ActionLink( YavscHelpers.SiteName, "Index", "Home" ,null, new { @class="actionlink" }) %>
<span class="hidcom"> Page d'accueil </span>
<a href="/Blogs/Post" class="actionlink">Poster</a>
<span class="hidcom"> &Eacute;dition d'un nouveau billet </span>
<%= Html.ActionLink( "Deconnexion", "Logout", "Account", new { returnUrl=Request.Url.PathAndQuery }, new { @class="actionlink" }) %>
<% } %>
</div>
</aside> </aside>
<footer> <footer>
<% foreach ( string link in Yavsc.ThanksHelper.Links()) { %> <% foreach ( string link in Yavsc.ThanksHelper.Links()) { %>

@ -1,6 +1,6 @@
<%@ Page Language="C#" MasterPageFile="~/Models/App.master" Inherits="System.Web.Mvc.ViewPage<TaskOutput>" %> <%@ Page Title="Db init" Language="C#" MasterPageFile="~/Models/App.master" Inherits="System.Web.Mvc.ViewPage<TaskOutput>" %>
<asp:Content ID="MainContentContent" ContentPlaceHolderID="MainContent" runat="server"> <asp:Content ID="MainContentContent" ContentPlaceHolderID="MainContent" runat="server">
<h1><%=Html.Encode(ViewData["BackupName"])%> Restauration</h1> <h1>Initialisation de la base de données</h1>
<div><h2>Error message </h2> <%= Html.Encode(Model.Error) %></div> <div><h2>Error message </h2> <%= Html.Encode(Model.Error) %></div>
<div><h2>Message </h2> <%= Html.Encode(Model.Message) %></div> <div><h2>Message </h2> <%= Html.Encode(Model.Message) %></div>
<div><h2>Exit Code</h2> <%= Html.Encode(Model.ExitCode) %></div> <div><h2>Exit Code</h2> <%= Html.Encode(Model.ExitCode) %></div>

@ -1,21 +1,7 @@
<%@ Page Title="Restore" Language="C#" MasterPageFile="~/Models/App.master" Inherits="System.Web.Mvc.ViewPage<DataAccess>" %> <%@ Page Title="Init db" Language="C#" MasterPageFile="~/Models/StaticPage.master" Inherits="System.Web.Mvc.ViewPage<DataAccess>" %>
<asp:Content ID="MainContentContent" ContentPlaceHolderID="MainContent" runat="server"> <asp:Content ID="MainContentContent" ContentPlaceHolderID="MainContent" runat="server">
<%= Html.ValidationSummary("Restore a database backup") %> <%= Html.ValidationSummary("Init a new data base") %>
<% using (Html.BeginForm("Restore","Admin")) { %> <% using (Html.BeginForm("InitDb","Admin")) { %>
<% string [] bcfiles = (string[]) ViewData["Backups"]; %>
<select name="backupName">
<% foreach (string s in bcfiles)
{
%>
<option value="<%=s%>"><%=s%></option>
<%
}
%>
</select>
<label for="dataOnly">Data only :</label>
<%= Html.CheckBox("dataOnly")%>
<%= Html.LabelFor(model => model.Host) %>: <%= Html.LabelFor(model => model.Host) %>:
<%= Html.TextBox( "Host" ) %> <%= Html.TextBox( "Host" ) %>
<%= Html.ValidationMessage("Host", "*") %><br/> <%= Html.ValidationMessage("Host", "*") %><br/>
@ -31,7 +17,7 @@
<%= Html.LabelFor(model => model.Password) %>: <%= Html.LabelFor(model => model.Password) %>:
<%= Html.Password( "Password" ) %> <%= Html.Password( "Password" ) %>
<%= Html.ValidationMessage("Password", "*") %><br/> <%= Html.ValidationMessage("Password", "*") %><br/>
<label for="doInit">Executer le script de création de la base:</label><input type="checkbox" name="doInit" id="doInit" >
<input type="submit"/> <input type="submit"/>
<% } %> <% } %>
</asp:Content> </asp:Content>

@ -632,6 +632,9 @@
<Content Include="Views\Google\GoogleErrorMessage.aspx" /> <Content Include="Views\Google\GoogleErrorMessage.aspx" />
<Content Include="Views\Home\Contact.aspx" /> <Content Include="Views\Home\Contact.aspx" />
<Content Include="Views\Home\AssemblyInfo.aspx" /> <Content Include="Views\Home\AssemblyInfo.aspx" />
<Content Include="Views\Admin\Created.aspx" />
<Content Include="Views\Admin\InitDb.aspx" />
<Content Include="Models\StaticPage.master" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" /> <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />

@ -69,6 +69,11 @@ namespace Yavsc.Model.Admin
get { return dbpassword; } get { return dbpassword; }
set { dbpassword = value; } set { dbpassword = value; }
} }
public string ConnectionString() {
return string.Format ("Server={0};Port={1};Database={2};User Id={3};Password={4};Encoding=Unicode;",
Host,Port,Dbuser,Password);
}
} }
} }

@ -46,6 +46,12 @@ namespace Yavsc.Model {
} }
} }
public static string was_added_to_the_role {
get {
return ResourceManager.GetString("was_added_to_the_role", resourceCulture);
}
}
public static string Unitary_cost { public static string Unitary_cost {
get { get {
return ResourceManager.GetString("Unitary_cost", resourceCulture); return ResourceManager.GetString("Unitary_cost", resourceCulture);
@ -136,6 +142,12 @@ namespace Yavsc.Model {
} }
} }
public static string younotadmin {
get {
return ResourceManager.GetString("younotadmin", resourceCulture);
}
}
public static string Description { public static string Description {
get { get {
return ResourceManager.GetString("Description", resourceCulture); return ResourceManager.GetString("Description", resourceCulture);
@ -166,6 +178,12 @@ namespace Yavsc.Model {
} }
} }
public static string was_added_to_the_empty_role {
get {
return ResourceManager.GetString("was_added_to_the_empty_role", resourceCulture);
}
}
public static string MinDate { public static string MinDate {
get { get {
return ResourceManager.GetString("MinDate", resourceCulture); return ResourceManager.GetString("MinDate", resourceCulture);
@ -202,6 +220,12 @@ namespace Yavsc.Model {
} }
} }
public static string role_created {
get {
return ResourceManager.GetString("role_created", resourceCulture);
}
}
public static string Register { public static string Register {
get { get {
return ResourceManager.GetString("Register", resourceCulture); return ResourceManager.GetString("Register", resourceCulture);

@ -41,4 +41,9 @@
<data name="Remember_me"><value>Se souvenir du mot de passe</value></data> <data name="Remember_me"><value>Se souvenir du mot de passe</value></data>
<data name="DocTemplateException"><value>Une erreur est survenue à la génération de votre document</value></data> <data name="DocTemplateException"><value>Une erreur est survenue à la génération de votre document</value></data>
<data name="Message_sent"><value>Votre message a été envoyé</value></data> <data name="Message_sent"><value>Votre message a été envoyé</value></data>
<data name="was_added_to_the_role"><value>a été ajouté au rôle</value></data>
<data name="was_added_to_the_empty_role"><value>Il n'y avait pas 'utilisateur dans le rôle '{1}'. Vous ({0}) avez été ajouté au rôle '{1}'.</value></data>
<data name="younotadmin"><value>Vous n'êtes pas administrateur</value></data>
<data name="role_created"><value>Rôle créé</value></data>
</root> </root>

@ -41,5 +41,8 @@
<data name="Remember_me"><value>Remember me</value></data> <data name="Remember_me"><value>Remember me</value></data>
<data name="DocTemplateException"><value>Exception occured when rendering your document</value></data> <data name="DocTemplateException"><value>Exception occured when rendering your document</value></data>
<data name="Message_sent"><value>Your message has been sent.</value></data> <data name="Message_sent"><value>Your message has been sent.</value></data>
<data name="was_added_to_the_role"><value>was added to the role</value></data>
<data name="was_added_to_the_empty_role"><value>There was no user in the '{1}' role. You ({0}) was just added as firt user in the '{1}' role.</value></data>
<data name="younotadmin"><value>You're not administrator</value></data>
<data name="role_created"><value>role created</value></data>
</root> </root>

Loading…