Files
yavsc/NpgsqlMRPProviders/NpgsqlUserNameProvider.cs
Paul Schneider d9d5bb308e Many fixes
* Profile.aspx:
* ProfileEdition.cs: Fixes the username modification

* Book-next.aspx: pollution

* NpgsqlMembershipProvider.cs: xmldoc

* NpgsqlProfileProvider.cs: use default values from configuration

* NpgsqlUserNameProvider.cs: Fixes the username detection

* test-domain-TestAPI.config: profile dates must be returned as
  DateTime

* instdbws.sql: The conversion to a valid .Net DateTime requires a
  credible date time as source value, the null one is not supported.

* style.css: Fixes the new notification style

* AccountController.cs: Fixes the profile edition.
Now using the anti forgery key at login time

* Book.aspx:
* LocalizedText.resx:
* LocalizedText.fr.resx:
* CalendarApi.cs:
* GoogleController.cs:
* LocalizedText.Designer.cs:
* LocalizedText.fr.Designer.cs: WIP booking

* HomeController.cs: code prettying

* Global.asax.cs: Limits the usage of titles in a route to the blog
  controller

* OAuth2.cs: Profile values may be of type DBNull ...

* T.cs: All translated strings will be Html encoded, as expected from
  an html helper

* YavscHelpers.cs: A new method to build a javascript string...

* App.master:
* AppAdmin.master: Notification.body is now a js string literal

* NoLogin.master: sync with the true master

* Login.aspx: Permits the anti forgery key usage

* Estimate.aspx: refactoring

* Web.config: Fixes a later commit on the catalog name space

* Web.csproj: An ajax helper to notify

* ChangePasswordModel.cs:
* RegisterClientModel.cs: A regexp for user name

* LoginModel.cs: A regexp for user name and password

* Profile.cs: A regexp for user name, and profile usage fixes

* UserManager.cs: Checks for username availability before trying to
  modify it

* YavscModel.csproj: `ProfileEdition` class addition

* ChangeLog: should not be indexed

* ChangeLog: useless here

* ValidateAjaxAttribute.cs: Fixes usage of HtmlFieldPrefix

* BookQuery.cs: Start, end hour and role are required

* OtherWebException.cs: useless
2015-11-01 01:47:42 +01:00

106 lines
3.4 KiB
C#

//
// NpgsqlUserNameProvider.cs
//
// Author:
// Paul Schneider <paul@pschneider.fr>
//
// Copyright (c) 2015 GNU GPL
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
using System;
using System.Collections.Specialized;
using System.Configuration;
namespace Npgsql.Web.RolesAndMembers
{
using Yavsc.Model.RolesAndMembers;
/// <summary>
/// Npgsql user name provider.
/// </summary>
public class NpgsqlUserNameProvider: ChangeUserNameProvider {
private string applicationName;
private string connectionString;
/// <summary>
/// Initialize the specified iname and config.
/// </summary>
/// <param name="iname">Iname.</param>
/// <param name="config">Config.</param>
public override void Initialize (string iname, NameValueCollection config)
{
// get the
// - application name
// - connection string name
// - the connection string from its name
string cnxName = config ["connectionStringName"];
connectionString = ConfigurationManager.ConnectionStrings [cnxName].ConnectionString;
config.Remove ("connectionStringName");
applicationName = config ["applicationName"];
config.Remove ("applicationName");
base.Initialize (iname, config);
}
private string GetConfigValue (string configValue, string defaultValue)
{
if (String.IsNullOrEmpty (configValue))
return defaultValue;
return configValue;
}
#region implemented abstract members of ChangeUserNameProvider
/// <summary>
/// Changes the name.
/// </summary>
/// <param name="oldName">Old name.</param>
/// <param name="newName">New name.</param>
public override void ChangeName (string oldName, string newName)
{
using (NpgsqlConnection conn = new NpgsqlConnection (connectionString)) {
conn.Open ();
using (NpgsqlCommand cmd = new NpgsqlCommand (
"UPDATE users set " +
"username = :uname where username = :oname" +
" AND ApplicationName = :appname ", conn)) {
cmd.Parameters.AddWithValue ("uname", newName);
cmd.Parameters.AddWithValue ("oname", oldName);
cmd.Parameters.AddWithValue ("appname", this.applicationName);
cmd.ExecuteNonQuery ();
}
}
}
/// <summary>
/// Determines whether this instance is name available the specified name.
/// </summary>
/// <returns>true</returns>
/// <c>false</c>
/// <param name="name">Name.</param>
public override bool IsNameAvailable (string name)
{
using (NpgsqlConnection conn = new NpgsqlConnection (connectionString)) {
conn.Open ();
using (NpgsqlCommand cmd = new NpgsqlCommand (
"SELECT count(*)=0 FROM users " +
"WHERE username = :uname AND ApplicationName = :appname", conn)) {
cmd.Parameters.AddWithValue ("uname", name);
cmd.Parameters.AddWithValue ("appname", this.applicationName);
return (bool) cmd.ExecuteScalar ();
}
}
}
#endregion
}
}