| 
     
      
      
      From: <mar...@us...> - 2010-02-13 21:24:59
      
     
   | 
Revision: 30
          http://cronoscontrol.svn.sourceforge.net/cronoscontrol/?rev=30&view=rev
Author:   marioarce
Date:     2010-02-13 21:24:52 +0000 (Sat, 13 Feb 2010)
Log Message:
-----------
Ticket #5
renamed concept from 'Tracker' to 'Project User'. Project User includes a 'project manager', a 'project team members', and any other project stakeholder
The following are examples of project stakeholders:
    * Project manager
    * Project team members
    * Upper management
    * Project customer
    * Resource Managers
    * Product user group
    * Project testers
    * Sponsor
Added Paths:
-----------
    source/trunk/CronosControl/Libraries/BusinessLogic/ProjectUser/
    source/trunk/CronosControl/Libraries/BusinessLogic/ProjectUser/ProjectUserManager.cs
    source/trunk/CronosControl/Libraries/BusinessLogic/ProjectUser/ProjectUserSession.cs
Added: source/trunk/CronosControl/Libraries/BusinessLogic/ProjectUser/ProjectUserManager.cs
===================================================================
--- source/trunk/CronosControl/Libraries/BusinessLogic/ProjectUser/ProjectUserManager.cs	                        (rev 0)
+++ source/trunk/CronosControl/Libraries/BusinessLogic/ProjectUser/ProjectUserManager.cs	2010-02-13 21:24:52 UTC (rev 30)
@@ -0,0 +1,339 @@
+//------------------------------------------------------------------------------
+// The contents of this file are subject to the GNU General Public License Version 3.0 ("License"); you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at http://www.cronoscontrol.net/license.html. 
+// 
+// Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. 
+// See the License for the specific language governing rights and limitations under the License.
+// 
+// The Original Code is CronosControl.
+// The Initial Developer of the Original Code is WebImageConsulting http://www.wicnow.com/.
+// All Rights Reserved.
+// 
+// Contributor(s): Mario Alberto Arce, _______. 
+//------------------------------------------------------------------------------
+
+using System;
+using System.Linq;
+using System.Text;
+using System.Web.Security;
+using System.Collections.Generic;
+using System.Configuration.Provider;
+using System.Security.Cryptography;
+using CronosControl.Model;
+using CronosControl.Business;
+using CronosControl.Common.Utils;
+using CronosControl.BusinessLogic.Configuration.Settings;
+
+namespace CronosControl.BusinessLogic.ProjectUser
+{
+    /// <summary>
+    /// Project User manager
+    /// </summary>
+    public partial class ProjectUserManager
+    {
+        #region Methods
+        /// <summary>
+        /// Adds a project user
+        /// </summary>
+        /// <param name="Email">The email</param>
+        /// <param name="Username">The username</param>
+        /// <param name="Password">The password</param>
+        /// <param name="Name">A value indicating whether the name of the project user</param>
+        /// <param name="Lastname">A value indicating whether the lastname of the project user</param>
+        /// <param name="Enabled">A value indicating whether the project user is active</param>
+        /// <param name="status">Status</param>
+        /// <returns>A project user</returns>
+        public static User AddProjectUser(string email, string username, string password,
+            string name, string lastname,
+            bool enabled, out MembershipCreateStatus status)
+        {
+            string saltKey = string.Empty;
+            string passwordHash = string.Empty;
+            status = MembershipCreateStatus.UserRejected;
+
+            // duplicated UserName ?
+            //status = MembershipCreateStatus.DuplicateUserName;
+
+            // invalid UserName ?
+            //status = MembershipCreateStatus.InvalidUserName;
+
+            // duplicated email ?
+            //status = MembershipCreateStatus.DuplicateEmail;
+
+            // invalid email ?
+            if (!CommonHelper.IsValidEmail(email))
+                status = MembershipCreateStatus.InvalidEmail;
+
+
+            int idCompany = CronosControlContext.Current.CurrentCompany.IdCompany;
+            passwordHash = CreatePasswordMd5Hash(password);
+
+            User userEntity = new User();
+            userEntity.Name = name;
+            userEntity.Lastname = lastname;
+            userEntity.Username = username;
+            userEntity.Password = passwordHash;
+            userEntity.Email = email;
+            userEntity.IdCompany = idCompany;
+            userEntity.CreatedAt = DateTimeHelper.ConvertToUtcTime(DateTime.Now);
+            userEntity.Enabled = enabled;
+
+            try
+            {
+                Users users = new Users();
+                users.Save(userEntity);
+            }
+            catch
+            {
+                status = MembershipCreateStatus.ProviderError;
+            }
+
+            status = MembershipCreateStatus.Success;
+            return userEntity;
+        }
+
+        /// <summary>
+        /// Adds the specified user names to the specified roles for the configured applicationName
+        /// </summary>
+        /// <param name="usernames">A string array of user names to be added to the specified roles.</param>
+        /// <param name="roleNames">A string array of the role names to add the specified user names to.</param>
+        public static void AddUsersToRoles(string[] usernames, string[] roleNames)
+        {
+            foreach (string username in usernames)
+            {
+                // get User
+                User user = GetProjectUserByUsername(username);
+                if (user == null)
+                {
+                    // user not found!, continue...
+                    continue;
+                }
+
+                foreach (var roleName in roleNames)
+                {
+                    CronosControlEntities cronosControlEntities = new CronosControlEntities();
+                    // get Role
+                    Role role = (from r in cronosControlEntities.Role
+                                 where r.Name.Equals(roleName)
+                                 select r).First<Role>();
+
+                    Project project = CronosControlContext.Current.CurrentProject;
+
+                    // assign role to the user
+                    UserProjectRole userProjectRole = new UserProjectRole();
+                    userProjectRole.Role = role;
+                    userProjectRole.Project = project;
+                    userProjectRole.IdUser = user.IdUser;
+
+                    cronosControlEntities.AddToUserProjectRole(userProjectRole);
+                    cronosControlEntities.SaveChanges();
+                }
+            }
+        }
+
+        /// <summary>
+        /// Creates a salt
+        /// </summary>
+        /// <param name="size">A salt size</param>
+        /// <returns>A salt</returns>
+        private static string CreateSalt(int size)
+        {
+            RNGCryptoServiceProvider provider = new RNGCryptoServiceProvider();
+            byte[] data = new byte[size];
+            provider.GetBytes(data);
+            return Convert.ToBase64String(data);
+        }
+
+        /// <summary>
+        /// Creates a password hash
+        /// </summary>
+        /// <param name="Password">Password</param>
+        /// <param name="Salt">Salt</param>
+        /// <returns>Password hash</returns>
+        private static string CreatePasswordHash(string Password, string Salt)
+        {
+            //MD5, SHA1
+            string passwordFormat = SettingManager.Current["Security", "PasswordFormat"];
+            if (String.IsNullOrEmpty(passwordFormat))
+                passwordFormat = "SHA1";
+
+            return FormsAuthentication.HashPasswordForStoringInConfigFile(Password + Salt, passwordFormat);
+        }
+
+        /// <summary>
+        /// Creates a password Md5 hash
+        /// </summary>
+        /// <param name="Password">Password</param>
+        /// <returns>Password hash</returns>
+        private static string CreatePasswordMd5Hash(string password)
+        {
+            if (string.IsNullOrEmpty(password))
+                return string.Empty;
+
+            // Create a new instance of the MD5CryptoServiceProvider object.
+            MD5CryptoServiceProvider md5Hasher = new MD5CryptoServiceProvider();
+
+            // Convert the input string to a byte array and compute the hash.
+            byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(password));
+
+            // Create a new Stringbuilder to collect the bytes
+            // and create a string.
+            StringBuilder sBuilder = new StringBuilder();
+
+            // Loop through each byte of the hashed data 
+            // and format each one as a hexadecimal string.
+            for (int i = 0; i < data.Length; i++)
+            {
+                sBuilder.Append(data[i].ToString("x2"));
+            }
+
+            // Return the hexadecimal string.
+            return sBuilder.ToString();
+        }
+
+        /// <summary>
+        /// Gets a list of the roles that a specified user is in for the configured applicationName.
+        /// </summary>
+        /// <param name="username">The user to return a list of roles for.</param>
+        /// <returns>A string array containing the names of all the roles that the specified user is in for the configured applicationName.</returns>
+        public static string[] GetRolesForUser(string username)
+        {
+            // get User
+            User user = GetProjectUserByUsername(username);
+            if (user == null)
+            {
+                // user not found!
+                return new string[] { };
+            }
+
+            CronosControlEntities cronosControlEntities = new CronosControlEntities();
+
+            Project project = CronosControlContext.Current.CurrentProject;
+
+            // get UserProjectRole
+            List<string> userProjectRoles = (from upr in cronosControlEntities.UserProjectRole
+                                                  join ro in cronosControlEntities.Role
+                                                  on new { upr.Role.IdRole } equals new { ro.IdRole }
+                                                  where (upr.IdUser == user.IdUser && upr.Project.IdProject == project.IdProject)
+                                                  select ro.Name).ToList<string>();
+
+            string[] result = new string[userProjectRoles.Count];
+            for (int i = 0; i < userProjectRoles.Count; i++)
+            {
+                result[i] = userProjectRoles[i];
+            }
+            return result;
+        }
+
+        /// <summary>
+        /// Gets a tracket by email
+        /// </summary>
+        /// <param name="Username">Project user email</param>
+        /// <returns>A project user</returns>
+        public static User GetProjectUserByEmail(string email)
+        {
+            if (string.IsNullOrEmpty(email))
+                return null;
+            if (!CommonHelper.IsValidEmail(email))
+                return null;
+
+            CronosControlEntities cronosControlEntities = new CronosControlEntities();
+            User user = (from u in cronosControlEntities.User
+                         where u.Email.Equals(email)
+                         select u).First<User>();
+
+            return user;
+        }
+
+        /// <summary>
+        /// Gets a tracket
+        /// </summary>
+        /// <param name="Username">Project user identifier</param>
+        /// <returns>A project user</returns>
+        public static User GetProjectUserByID(int projectUserID)
+        {
+            if (projectUserID == 0)
+                return null;
+
+            CronosControlEntities cronosControlEntities = new CronosControlEntities();
+            User user = (from u in cronosControlEntities.User
+                         where u.IdUser.Equals(projectUserID)
+                         select u).First<User>();
+
+            return user;
+        }
+
+        /// <summary>
+        /// Gets a tracket by username
+        /// </summary>
+        /// <param name="Username">Project user username</param>
+        /// <returns>A project user</returns>
+        public static User GetProjectUserByUsername(string username)
+        {
+            if (string.IsNullOrEmpty(username))
+                return null;
+
+            User user;
+            CronosControlEntities cronosControlEntities = new CronosControlEntities();
+            try
+            {
+                user = (from u in cronosControlEntities.User
+                             where u.Username.Equals(username)
+                             select u).First<User>();
+            }
+            catch
+            {
+                return null;
+            }
+
+            return user;
+        }
+
+        /// <summary>
+        /// Gets a value indicating whether the specified user is in the specified role for the configured applicationName.
+        /// </summary>
+        /// <param name="username">The user name to search for.</param>
+        /// <param name="roleName">The role to search in.</param>
+        /// <returns>true if the specified user is in the specified role for the configured applicationName; otherwise, false.</returns>
+        public static bool IsUserInRole(string username, string roleName)
+        {
+            if (string.IsNullOrEmpty(username))
+                return false;
+            if (string.IsNullOrEmpty(roleName))
+                return false;
+
+            User user = GetProjectUserByUsername(username);
+
+            CronosControlEntities cronosControlEntities = new CronosControlEntities();
+            int result = (from upr in cronosControlEntities.UserProjectRole
+                          where (upr.IdUser == 1 && upr.Role.Name.Equals(roleName))
+                         select upr).Count<UserProjectRole>();
+
+            return (result == 1);
+        }
+
+        /// <summary>
+        /// Login a project user
+        /// </summary>
+        /// <param name="Email">A project user username</param>
+        /// <param name="Password">Password</param>
+        /// <returns>Result</returns>
+        public static bool Login(string username, string password)
+        {
+            User user = GetProjectUserByUsername(username);
+
+            if (user == null)
+                return false;
+            if (!user.Enabled)
+                return false;
+
+            string passwordHash = CreatePasswordMd5Hash(password);
+            bool result = user.Password.Equals(passwordHash);
+
+            // any session stuff here ...
+
+            return result;
+        }
+        #endregion
+    }
+}
Added: source/trunk/CronosControl/Libraries/BusinessLogic/ProjectUser/ProjectUserSession.cs
===================================================================
--- source/trunk/CronosControl/Libraries/BusinessLogic/ProjectUser/ProjectUserSession.cs	                        (rev 0)
+++ source/trunk/CronosControl/Libraries/BusinessLogic/ProjectUser/ProjectUserSession.cs	2010-02-13 21:24:52 UTC (rev 30)
@@ -0,0 +1,75 @@
+//------------------------------------------------------------------------------
+// The contents of this file are subject to the GNU General Public License Version 3.0 ("License"); you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at http://www.cronoscontrol.net/license.html. 
+// 
+// Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. 
+// See the License for the specific language governing rights and limitations under the License.
+// 
+// The Original Code is CronosControl.
+// The Initial Developer of the Original Code is WebImageConsulting http://www.wicnow.com/.
+// All Rights Reserved.
+// 
+// Contributor(s): Mario Alberto Arce, _______. 
+//------------------------------------------------------------------------------
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.Specialized;
+using System.Text;
+using System.Web;
+using System.Xml;
+using CronosControl.Model;
+
+namespace CronosControl.BusinessLogic.ProjectUser
+{
+    /// <summary>
+    /// Represents a project user session
+    /// </summary>
+    public partial class ProjectUserSession : BaseEntity
+    {
+        #region Constructor
+        /// <summary>
+        /// Creates a new instance of the ProjectUserSession class
+        /// </summary>
+        public ProjectUserSession()
+        {
+        }
+        #endregion
+
+        #region Properties
+        /// <summary>
+        /// Gets or sets the project user session identifier
+        /// </summary>
+        public Guid ProjectUserSessionGUID { get; set; }
+
+        /// <summary>
+        /// Gets or sets the project user identifier
+        /// </summary>
+        public int ProjectUserID { get; set; }
+
+        /// <summary>
+        /// Gets or sets the last accessed date and time
+        /// </summary>
+        public DateTime LastAccessed { get; set; }
+
+        /// <summary>
+        /// Gets or sets a value indicating whether the project user session is expired
+        /// </summary>
+        public bool IsExpired { get; set; }
+        #endregion
+
+        #region Custom Properties
+        /// <summary>
+        /// Gets or sets the project user
+        /// </summary>
+        public User User
+        {
+            get
+            {
+                return ProjectUserManager.GetProjectUserByID(ProjectUserID);
+            }
+        }
+        #endregion
+    }
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
 |