static void ListAction() { String profile = ExtConsole .Create() .LabelWith("Profile: ") .GetString(new SimpleStringValidator("Select profile from config")); ListFiles(profile); }
public void Process() { String mode = ExtConsole .Create() .LabelWith("Mode: ([L]ist, [D]elete) ") .GetString(new ModeValidator("Choose one: L, D")); modeAction[mode.ToLowerInvariant()](); Console.WriteLine(new StringBuilder() .AppendLine("Done.") .AppendLine() .ToString()); }
public void ShowMenu() { String mode = ExtConsole .Create() .LabelWith("Mode: ([R]eset, [C]reate, [D]elete, [V]iew, [L]ist) ") .GetString(new ModeValidator("Choose one: R, C, D, V, L")); String connString = ExtConsole .Create() .LabelWith("Connection String: ") .GetString(new SimpleStringValidator("Same as the one from your app.config / web.config")); Action <String> action = modeAction[mode.ToLowerInvariant()]; action(connString); Console.WriteLine(new StringBuilder() .AppendLine("Done.") .AppendLine() .ToString()); }
static void DeleteAction(String connString) { String appName = ExtConsole .Create() .LabelWith("App Name: ") .GetString(new SimpleStringValidator("Same as the one from your app.config / web.config")); String hashAlgo = ExtConsole .Create() .LabelWith("Hash Algo: (MD5, SHA1, SHA512) ") .GetString(new SimpleStringValidator("Choose one: MD5, SHA1, SHA512")); String username = ExtConsole .Create() .LabelWith("Username: "******"Input Username you want to delete")); SqlMembershipProvider provider = MembershipService.InitializeAndGetAspMembershipConfig(connString, appName, hashAlgo); provider.DeleteUser(username, true); }
static void ResetAction(String connString) { String appName = ExtConsole .Create() .LabelWith("App Name: ") .GetString(new SimpleStringValidator("Same as the one from your app.config / web.config")); String hashAlgo = ExtConsole .Create() .LabelWith("Hash Algo: (MD5, SHA1, SHA512) ") .GetString(new SimpleStringValidator("Choose one: MD5, SHA1, SHA512")); String username = ExtConsole .Create() .LabelWith("Username: "******"Input Username you want to reset")); String pwd = ExtConsole .Create() .LabelWith("Password: "******"Input new Password")); SqlMembershipProvider provider = MembershipService.InitializeAndGetAspMembershipConfig(connString, appName, hashAlgo); MembershipUser user = provider.GetUser(username, false); if (user == null) { throw new InvalidOperationException("User not found."); } Console.WriteLine($"User '{username}' found."); String reset = provider.ResetPassword(username, null); provider.ChangePassword(username, reset, pwd); UpdateUserLoginProperty(connString, username); }
static void ViewAction(String connString) { String appName = ExtConsole .Create() .LabelWith("App Name: ") .GetString(new SimpleStringValidator("Same as the one from your app.config / web.config")); String username = ExtConsole .Create() .LabelWith("Username: "******"Input Username you want to view")); using (var db = new Database(connString, true)) { IEnumerable <UserInfo> result = db.NQuery <UserInfo>(@" SET NOCOUNT ON ; WITH AspApp AS ( SELECT ApplicationId [Id], ApplicationName [Name], [Description] [Desc] FROM aspnet_Applications ), AspUser AS ( SELECT ApplicationId AppId, UserId [Id], UserName Username, LastActivityDate LastActivity FROM aspnet_Users ), AspMembership AS ( SELECT ApplicationId AppId, UserId, Email, IsApproved Approved, IsLockedOut LockedOut, LastLoginDate LastLogin, LastPasswordChangedDate LastPwdChanged, LastLockoutDate LastLockedOut, FailedPasswordAttemptCount FailedLoginCount, FailedPasswordAnswerAttemptCount FailedPwdAnswerCount FROM aspnet_Membership mbr ), AspRole AS ( SELECT r.ApplicationId AppId, usr.UserId, us.Username, r.RoleName [Role], r.[Description] [Desc] FROM aspnet_UsersInRoles usr LEFT JOIN AspUser us ON usr.UserId = us.[Id] LEFT JOIN aspnet_Roles r ON usr.RoleId = r.RoleId AND r.ApplicationId = us.AppId ), AspProfile AS ( SELECT us.[Id] UserId, prf.PropertyNames, prf.PropertyValuesString, prf.PropertyValuesBinary FROM aspnet_Profile prf LEFT JOIN AspUser us ON prf.UserId = us.[Id] ), AspProfileNV AS ( SELECT UserId, ':' + CAST(PropertyNames AS VARCHAR(8000)) Names, PropertyValuesString [Values] FROM AspProfile ) SELECT app.[Name] App, app.[Desc] AppDesc, us.Username, CONVERT(VARCHAR, us.LastActivity, 104) + ' ' + CONVERT(VARCHAR, us.LastActivity, 108) LastActivity, mbr.Email, CASE mbr.Approved WHEN 0 THEN 'False' WHEN 1 THEN 'True' END Approved, CASE mbr.LockedOut WHEN 0 THEN 'False' WHEN 1 THEN 'True' END LockedOut, CONVERT(VARCHAR, mbr.LastLogin, 104) + ' ' + CONVERT(VARCHAR, mbr.LastLogin, 108) LastLogin, CONVERT(VARCHAR, mbr.LastPwdChanged, 104) + ' ' + CONVERT(VARCHAR, mbr.LastPwdChanged, 108) LastPwdChanged, CONVERT(VARCHAR, mbr.LastLockedOut, 104) + ' ' + CONVERT(VARCHAR, mbr.LastLockedOut, 108) LastLockedOut, mbr.FailedLoginCount, mbr.FailedPwdAnswerCount, r.[Role], r.[Desc] RoleDesc, prf.Names ProfileNames, prf.[Values] ProfileValues FROM AspApp app LEFT JOIN AspUser us ON app.[Id] = us.AppId LEFT JOIN AspMembership mbr ON app.[Id] = mbr.AppId AND us.[Id] = mbr.UserId LEFT JOIN AspRole r ON us.AppId = r.AppId AND us.[Id] = r.UserId LEFT JOIN AspProfileNV prf ON prf.UserId = us.[Id] WHERE app.[Name] = @App AND us.Username = @Username SET NOCOUNT OFF", new { App = appName, Username = username }); foreach (UserInfo user in result) { Console.WriteLine($" > App: {user.App}"); Console.WriteLine($" > AppDesc: {user.AppDesc}"); Console.WriteLine($" > Username: {user.Username}"); Console.WriteLine($" > LastActivity: {user.LastActivity}"); Console.WriteLine($" > Email: {user.Email}"); Console.WriteLine($" > Approved: {user.Approved}"); Console.WriteLine($" > LockedOut: {user.LockedOut}"); Console.WriteLine($" > LastLogin: {user.LastLogin}"); Console.WriteLine($" > LastPwdChanged: {user.LastPwdChanged}"); Console.WriteLine($" > LastLockedOut: {user.LastLockedOut}"); Console.WriteLine($" > FailedLoginCount: {user.FailedLoginCount}"); Console.WriteLine($" > FailedPwdAnswerCount: {user.FailedPwdAnswerCount}"); Console.WriteLine($" > Role: {user.Role}"); Console.WriteLine($" > RoleDesc: {user.RoleDesc}"); Console.WriteLine($" > ProfileNames: {user.ProfileNames}"); Console.WriteLine($" > ProfileValues: {user.ProfileValues}"); } } }
static void CreateAction(String connString) { String appName = ExtConsole .Create() .LabelWith("App Name: ") .GetString(new SimpleStringValidator("Same as the one from your app.config / web.config")); String hashAlgo = ExtConsole .Create() .LabelWith("Hash Algo: (MD5, SHA1, SHA512) ") .GetString(new SimpleStringValidator("Choose one: MD5, SHA1, SHA512")); String username = ExtConsole .Create() .LabelWith("Username: "******"Input Username you want to create")); String pwd = ExtConsole .Create() .LabelWith("Password: "******"Input new Password")); String email = ExtConsole .Create() .LabelWith("Email: ") .GetString(new SimpleEmailValidator("Email format is invalid")); Console.WriteLine("Roles:"); using (var db = new Database(connString, true)) { db.Query <SimpleResult>(@" BEGIN SET NOCOUNT ON SELECT RoleName Result FROM dbo.aspnet_Roles SET NOCOUNT OFF END") .ToList() .ForEach(result => Console.WriteLine($" > {result.Result}")); } String role = ExtConsole .Create() .LabelWith("Role: ") .GetString(new SimpleStringValidator("Choose one from above")); SqlMembershipProvider provider = MembershipService.InitializeAndGetAspMembershipConfig(connString, appName, hashAlgo); MembershipUser user = provider.CreateUser(username, pwd, email, "Your account might have technical difficulties. Please ask your Administrator.", "TECHNICAL DIFFICULTIES BECAUSE OF RESET", true, Guid.NewGuid(), out MembershipCreateStatus status); IDictionary <MembershipCreateStatus, String> statusMessage = new Dictionary <MembershipCreateStatus, String> { [MembershipCreateStatus.DuplicateUserName] = "Username already exists. Please enter a different user name.", [MembershipCreateStatus.DuplicateEmail] = "A username for that email address already exists. Please enter a different email address.", [MembershipCreateStatus.InvalidPassword] = "The password provided is invalid. Please enter a valid password value.", [MembershipCreateStatus.InvalidEmail] = "The email address provided is invalid. Please check the value and try again.", [MembershipCreateStatus.InvalidAnswer] = "The password retrieval answer provided is invalid. Please check the value and try again.", [MembershipCreateStatus.InvalidQuestion] = "The password retrieval question provided is invalid. Please check the value and try again.", [MembershipCreateStatus.InvalidUserName] = "The user name provided is invalid. Please check the value and try again.", [MembershipCreateStatus.ProviderError] = "The authentication provider returned an error. Please verify your entry and try again. If the problem persists, please contact your system administrator.", [MembershipCreateStatus.UserRejected] = "The user creation request has been canceled. Please verify your entry and try again. If the problem persists, please contact your system administrator.", [MembershipCreateStatus.Success] = "the user creation done in success." }; if (!statusMessage.ContainsKey(status)) { throw new InvalidOperationException("An unknown error occurred. Please verify your entry and try again. If the problem persists, please contact your system administrator."); } Console.WriteLine(statusMessage[status]); using (var db = new Database(connString, true)) { Int32 result = db.NQueryScalar <Int32>(@" BEGIN SET NOCOUNT ON SELECT COUNT(0) FROM dbo.aspnet_Roles WHERE LoweredRoleName = @RoleName SET NOCOUNT OFF END", new { RoleName = role.ToLowerInvariant() }); if (result < 1) { throw new InvalidOperationException($"Role {role} isn't found anywhere."); } } using (var db = new Database(connString, true)) { String result = db.NQueryScalar <String>(@" BEGIN SET NOCOUNT ON BEGIN TRAN AssignRole BEGIN TRY DECLARE @@message VARCHAR(MAX) DECLARE @@roleId UNIQUEIDENTIFIER SELECT TOP 1 @@roleId = RoleId FROM dbo.aspnet_Roles WHERE LoweredRoleName = @RoleName INSERT INTO dbo.aspnet_UsersInRoles (RoleId, UserId) VALUES (@@roleId, @UserId) COMMIT TRAN AssignRole SET @@message = 'S|Finish' END TRY BEGIN CATCH ROLLBACK TRAN AssignRole SET @@message = 'E|' + CAST(ERROR_LINE() AS VARCHAR) + ': ' + ERROR_MESSAGE() END CATCH SET NOCOUNT OFF SELECT @@message [Message] END", new { UserId = user.ProviderUserKey.ToString(), RoleName = role.ToLowerInvariant() }); result.AsActionResponseViewModel(); } UpdateUserLoginProperty(connString, username); }