PageRenderTime 49ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/WpfMembershipAdmin/MainWindow.xaml.cs

#
C# | 399 lines | 343 code | 51 blank | 5 comment | 28 complexity | ae8a3be5f3f6f5e26657fd381333f644 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Data;
  8. using System.Windows.Documents;
  9. using System.Windows.Input;
  10. using System.Windows.Media;
  11. using System.Windows.Media.Imaging;
  12. using System.Windows.Navigation;
  13. using System.Windows.Shapes;
  14. using System.Web.Security;
  15. using WpfMembershipAdmin.Properties;
  16. using System.Diagnostics;
  17. using Microsoft.Win32;
  18. namespace WpfMembershipAdmin
  19. {
  20. /// <summary>
  21. /// Interaction logic for MainWindow.xaml
  22. /// </summary>
  23. public partial class MainWindow : Window
  24. {
  25. public MainWindow()
  26. {
  27. InitializeComponent();
  28. }
  29. private void ShowError(Exception ex)
  30. {
  31. //ErrorDetailWindow.BuildErrorDetailWindow(this, ex).ShowDialog();
  32. MessageBox.Show(ex.Message);
  33. }
  34. #region Role Management
  35. private void RefreshRoleTree()
  36. {
  37. mainTreeView.Items.Clear();
  38. TreeViewItem rootItem = new TreeViewItem()
  39. {
  40. Header = Properties.Resources.Role_All
  41. };
  42. rootItem.Selected += new RoutedEventHandler(RootItem_Selected);
  43. String[] allRoles = Roles.GetAllRoles();
  44. foreach (String r in allRoles)
  45. {
  46. TreeViewItem tvi = new TreeViewItem()
  47. {
  48. Header = r
  49. };
  50. tvi.Selected += new RoutedEventHandler(TreeViewItem_Selected);
  51. rootItem.Items.Add(tvi);
  52. }
  53. mainTreeView.Items.Add(rootItem);
  54. rootItem.IsExpanded = true;
  55. }
  56. private IEnumerator<String> EnumerateAllUsers()
  57. {
  58. MembershipUserCollection allUsers = Membership.GetAllUsers();
  59. foreach (MembershipUser u in allUsers)
  60. {
  61. yield return u.UserName;
  62. }
  63. }
  64. private IEnumerator<String> EnumerateRole(String roleName)
  65. {
  66. if (Roles.RoleExists(roleName))
  67. {
  68. String[] users = Roles.GetUsersInRole(roleName);
  69. foreach (String u in users)
  70. {
  71. yield return u;
  72. }
  73. }
  74. }
  75. private void ShowUserResults(IEnumerator<String> userResults)
  76. {
  77. this.resultsListView.Items.Clear();
  78. while (userResults.MoveNext())
  79. {
  80. ListViewItem lvi = new ListViewItem()
  81. {
  82. Content = userResults.Current
  83. };
  84. lvi.MouseDoubleClick += new MouseButtonEventHandler(ListViewItem_MouseDoubleClick);
  85. this.resultsListView.Items.Add(lvi);
  86. }
  87. }
  88. void ListViewItem_MouseDoubleClick(object sender, MouseButtonEventArgs e)
  89. {
  90. try
  91. {
  92. ListViewItem doubleClickedItem = e.Source as ListViewItem;
  93. if (doubleClickedItem != null)
  94. {
  95. String username = doubleClickedItem.Content as String;
  96. if (username != null)
  97. {
  98. MembershipUser doubleClickedUser = Membership.GetUser(username);
  99. if (doubleClickedUser != null)
  100. {
  101. UserDetailsWindow userDetails = this.BuildOwnedWindowWithTitle<UserDetailsWindow>(doubleClickedUser.UserName);
  102. userDetails.DisplayedUser = doubleClickedUser;
  103. userDetails.Show();
  104. }
  105. }
  106. }
  107. }
  108. catch (Exception ex)
  109. {
  110. ShowError(ex);
  111. }
  112. }
  113. private void CreateRole(String roleName)
  114. {
  115. Roles.CreateRole(roleName);
  116. RefreshRoleTree();
  117. }
  118. private void RemoveRole(String roleName)
  119. {
  120. Roles.DeleteRole(roleName);
  121. RefreshRoleTree();
  122. }
  123. #endregion
  124. internal T BuildOwnedWindowWithTitle<T>(String title)
  125. where T: Window, new()
  126. {
  127. T detailsWindow = new T();
  128. detailsWindow.Owner = this;
  129. detailsWindow.Title = title;
  130. return detailsWindow;
  131. }
  132. private void Window_Loaded(object sender, RoutedEventArgs e)
  133. {
  134. RefreshRoleTree();
  135. }
  136. private void RootItem_Selected(object sender, RoutedEventArgs e)
  137. {
  138. try
  139. {
  140. IEnumerator<String> userEnum = EnumerateAllUsers();
  141. ShowUserResults(userEnum);
  142. }
  143. catch (Exception ex)
  144. {
  145. ShowError(ex);
  146. }
  147. }
  148. private void TreeViewItem_Selected(object sender, RoutedEventArgs e)
  149. {
  150. try
  151. {
  152. TreeViewItem tvi = e.Source as TreeViewItem;
  153. if (tvi != null)
  154. {
  155. String roleName = tvi.Header.ToString();
  156. IEnumerator<String> userEnum = EnumerateRole(roleName);
  157. ShowUserResults(userEnum);
  158. }
  159. e.Handled = true;
  160. }
  161. catch (Exception ex)
  162. {
  163. ShowError(ex);
  164. }
  165. }
  166. private void AddRole_MenuItem_Click(object sender, RoutedEventArgs e)
  167. {
  168. try
  169. {
  170. DialogWindow dlg = this.BuildOwnedWindowWithTitle<DialogWindow>(Properties.Resources.Role_Add);
  171. dlg.SetDisplayValues(Properties.Resources.Role_Label, String.Empty);
  172. bool? dlgResult = dlg.ShowDialog();
  173. if (dlgResult.HasValue && dlgResult.Value)
  174. {
  175. String roleName = dlg.textBox1.Text;
  176. CreateRole(roleName);
  177. }
  178. }
  179. catch (Exception ex)
  180. {
  181. ShowError(ex);
  182. }
  183. }
  184. private void RemoveRole_MenuItem_Click(object sender, RoutedEventArgs e)
  185. {
  186. try
  187. {
  188. String defaultRoleName = GetSelectedRoleName();
  189. DialogWindow dlg = this.BuildOwnedWindowWithTitle<DialogWindow>(Properties.Resources.Role_Remove);
  190. dlg.SetDisplayValues(Properties.Resources.Role_Label, defaultRoleName);
  191. bool? dlgResult = dlg.ShowDialog();
  192. if (dlgResult.HasValue && dlgResult.Value)
  193. {
  194. String roleName = dlg.textBox1.Text;
  195. RemoveRole(roleName);
  196. }
  197. }
  198. catch (Exception ex)
  199. {
  200. ShowError(ex);
  201. }
  202. }
  203. private String GetSelectedRoleName()
  204. {
  205. TreeViewItem tvi = mainTreeView.SelectedItem as TreeViewItem;
  206. String defaultRoleName = (tvi != null) ? tvi.Header.ToString() : String.Empty;
  207. return defaultRoleName;
  208. }
  209. private void AddUser_MenuItem_Click(object sender, RoutedEventArgs e)
  210. {
  211. try
  212. {
  213. UserCreateWindow newUserDetails = BuildOwnedWindowWithTitle<UserCreateWindow>(Properties.Resources.User_Add);
  214. newUserDetails.Show();
  215. }
  216. catch (Exception ex)
  217. {
  218. ShowError(ex);
  219. }
  220. }
  221. private void RemoveUser_MenuItem_Click(object sender, RoutedEventArgs e)
  222. {
  223. try
  224. {
  225. ListViewItem selectedItem = this.resultsListView.SelectedItem as ListViewItem;
  226. if (selectedItem != null)
  227. {
  228. String selectedUsername = selectedItem.Content as string;
  229. bool userSuccessfullyDeleted = Membership.DeleteUser(selectedUsername);
  230. if (userSuccessfullyDeleted)
  231. {
  232. this.resultsListView.Items.Remove(selectedItem);
  233. }
  234. }
  235. }
  236. catch (Exception ex)
  237. {
  238. ShowError(ex);
  239. }
  240. }
  241. private static String BuildAspNetRegSqlCommand(bool add)
  242. {
  243. // TODO: add support for more flags
  244. String defaultConnectionString = "<connection string>";
  245. System.Configuration.ConnectionStringSettingsCollection connectionStrings = System.Web.Configuration.WebConfigurationManager.ConnectionStrings;
  246. if ((connectionStrings != null) && (connectionStrings.Count != 0))
  247. {
  248. defaultConnectionString = connectionStrings[0].ConnectionString;
  249. }
  250. String aspnetRegSql = Settings.Default.AspNetRegSqlLocation;
  251. String flag = (add) ? "A" : "R";
  252. String commandString = String.Format("\"{0}\" -C {1} -{2} all", aspnetRegSql, defaultConnectionString, flag);
  253. return commandString;
  254. }
  255. private void PromptWithAspnetCommand(bool addFlag)
  256. {
  257. String commandString = BuildAspNetRegSqlCommand(addFlag);
  258. DialogWindow d = BuildOwnedWindowWithTitle<DialogWindow>(Properties.Resources.Tools_AddFeatures);
  259. d.SetDisplayValues(Properties.Resources.Tools_ConnectionString, commandString);
  260. d.btnOk.Content = Properties.Resources.Tools_CopyToClipboard;
  261. bool? result = d.ShowDialog();
  262. }
  263. private void AddDbFeatures_MenuItem_Click(object sender, RoutedEventArgs e)
  264. {
  265. PromptWithAspnetCommand(true);
  266. }
  267. private void RemoveDbFeatures_MenuItem_Click(object sender, RoutedEventArgs e)
  268. {
  269. PromptWithAspnetCommand(false);
  270. }
  271. private void GenerateUserPassword_MenuItem_Click(object sender, RoutedEventArgs e)
  272. {
  273. String newPassword = Membership.GeneratePassword(
  274. Settings.Default.PasswordGenerator_Length,
  275. Settings.Default.PasswordGenerator_NumberOfNonAlphaNumericCharacters);
  276. DialogWindow d = BuildOwnedWindowWithTitle<DialogWindow>(Properties.Resources.Tools_GeneratePassword);
  277. d.SetDisplayValues(Properties.Resources.User_PasswordLabel, newPassword);
  278. d.btnOk.Content = Properties.Resources.Tools_CopyToClipboard;
  279. bool? result = d.ShowDialog();
  280. if (result.HasValue && result.Value)
  281. {
  282. Clipboard.SetData(DataFormats.Text, d.textBox1.Text);
  283. }
  284. }
  285. private void GenerateUserRoleMappingSql_MenuItem_Click(object sender, RoutedEventArgs e)
  286. {
  287. try
  288. {
  289. DialogWindow dlg = BuildOwnedWindowWithTitle<DialogWindow>(Properties.Resources.Tools_GenerateSqlTitle);
  290. dlg.SetDisplayValues(Properties.Resources.Tools_GenerateSqlLabel, String.Empty);
  291. bool? result = dlg.ShowDialog();
  292. if (result.HasValue && result.Value)
  293. {
  294. String applicationName = dlg.textBox1.Text;
  295. SaveFileDialog saveFileDlg = new SaveFileDialog()
  296. {
  297. Title = Properties.Resources.Tools_GenerateSqlTitle,
  298. InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
  299. CheckPathExists = true,
  300. FileName = "generate-user-roles.sql",
  301. Filter = "SQL Files (*.sql)|*.sql",
  302. FilterIndex = 0
  303. };
  304. bool? saveFileResult = saveFileDlg.ShowDialog(this);
  305. if (saveFileResult.HasValue && saveFileResult.Value)
  306. {
  307. using (System.IO.Stream fileStream = saveFileDlg.OpenFile())
  308. {
  309. WriteSqlScript(applicationName, fileStream);
  310. }
  311. }
  312. }
  313. }
  314. catch (Exception ex)
  315. {
  316. ShowError(ex);
  317. }
  318. }
  319. private static void WriteSqlScript(String applicationName, System.IO.Stream fileStream)
  320. {
  321. using (System.IO.StreamWriter streamWriter = new System.IO.StreamWriter(fileStream, Encoding.UTF8))
  322. {
  323. streamWriter.WriteLine("-- Autogenerated from Wpf Membership Console on {0:yyyy/MM/dd HH:mm:ss.zzzz}", DateTime.Now);
  324. streamWriter.WriteLine();
  325. streamWriter.WriteLine("declare @dt datetime");
  326. streamWriter.WriteLine("declare @appname nvarchar(100)");
  327. streamWriter.WriteLine("set @dt = convert(nvarchar, getutcdate())");
  328. streamWriter.WriteLine("set @appname = N'{0}'", applicationName);
  329. streamWriter.WriteLine();
  330. foreach (String roleName in Roles.GetAllRoles())
  331. {
  332. foreach (String userName in Roles.GetUsersInRole(roleName))
  333. {
  334. streamWriter.WriteLine("EXEC [aspnet_UsersInRoles_AddUsersToRoles]");
  335. streamWriter.WriteLine("\t\t@ApplicationName = @appname,");
  336. streamWriter.WriteLine("\t\t@UserNames = N'{0}',", userName);
  337. streamWriter.WriteLine("\t\t@RoleNames = N'{0}',", roleName);
  338. streamWriter.WriteLine("\t\t@CurrentTimeUtc = @dt");
  339. streamWriter.WriteLine();
  340. }
  341. }
  342. streamWriter.WriteLine();
  343. streamWriter.WriteLine("GO");
  344. streamWriter.WriteLine();
  345. }
  346. }
  347. }
  348. }