using System; using System.Collections.Generic; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using ScrewTurn.Wiki.PluginFramework; using System.Text; using System.Security.Cryptography; namespace ScrewTurn.Wiki { public partial class User : BasePage { private string currentUsername = null; private UserInfo currentUser = null; protected void Page_Load(object sender, EventArgs e) { Page.Title = Properties.Messages.UserTitle + " - " + Settings.WikiTitle; currentUsername = Request["User"]; if(string.IsNullOrEmpty(currentUsername)) currentUsername = Request["Username"]; if(string.IsNullOrEmpty(currentUsername)) UrlTools.Redirect("Default.aspx"); if(currentUsername == "admin") { currentUser = Users.GetAdministratorAccount(); } else currentUser = Users.FindUser(currentUsername); if(currentUser == null) UrlTools.Redirect("Default.aspx"); if(!Page.IsPostBack) { lblTitle.Text = lblTitle.Text.Replace("##NAME##", Users.GetDisplayName(currentUser)); txtSubject.Text = Request["Subject"]; if(txtSubject.Text != "" && SessionFacade.LoginKey == null) UrlTools.Redirect("Login.aspx?Redirect=" + Tools.UrlEncode(Request.Url.ToString())); } if(SessionFacade.LoginKey == null) pnlMessage.Visible = false; else pnlMessage.Visible = true; DisplayGravatar(); DisplayRecentActivity(); } /// /// Displays the gravatar of the user. /// private void DisplayGravatar() { if(Settings.DisplayGravatars) { lblGravatar.Text = string.Format(@"", GetGravatarHash(currentUser.Email)); } } /// /// Gets the gravatar hash of an email. /// /// The email. /// The hash. private static string GetGravatarHash(string email) { MD5 md5 = MD5.Create(); byte[] bytes = md5.ComputeHash(Encoding.ASCII.GetBytes(email.ToLowerInvariant())); StringBuilder sb = new StringBuilder(100); foreach(byte b in bytes) { sb.AppendFormat("{0:x2}", b); } return sb.ToString(); } /// /// Displays the recent activity. /// private void DisplayRecentActivity() { RecentChange[] changes = RecentChanges.GetAllChanges(); List result = new List(Settings.MaxRecentChangesToDisplay); foreach(RecentChange c in changes) { if(c.User == currentUser.Username) { result.Add(c); } } // Sort by date/time descending result.Reverse(); lblNoActivity.Visible = result.Count == 0; lblRecentActivity.Text = Formatter.BuildRecentChangesTable(result, FormattingContext.Other, null); } protected void btnSend_Click(object sender, EventArgs e) { lblSendResult.Text = ""; lblSendResult.CssClass = ""; Page.Validate(); if(!Page.IsValid) return; UserInfo loggedUser = SessionFacade.GetCurrentUser(); Log.LogEntry("Sending Email to " + currentUser.Username, EntryType.General, loggedUser.Username); EmailTools.AsyncSendEmail(currentUser.Email, "\"" + Users.GetDisplayName(loggedUser) + "\" <" + Settings.SenderEmail + ">", txtSubject.Text, Users.GetDisplayName(loggedUser) + " sent you this message from " + Settings.WikiTitle + ". To reply, please go to " + Settings.MainUrl + "User.aspx?Username=" + Tools.UrlEncode(loggedUser.Username) + "&Subject=" + Tools.UrlEncode("Re: " + txtSubject.Text) + "\nPlease do not reply to this Email.\n\n------------\n\n" + txtBody.Text, false); lblSendResult.Text = Properties.Messages.MessageSent; lblSendResult.CssClass = "resultok"; txtSubject.Text = ""; txtBody.Text = ""; } } }