[Nmailserver-commits] SF.net SVN: nmailserver: [124] NMail/trunk
Brought to you by:
dframpton-oss,
tmyroadctfig
|
From: <tmy...@us...> - 2007-01-26 12:46:48
|
Revision: 124
http://svn.sourceforge.net/nmailserver/?rev=124&view=rev
Author: tmyroadctfig
Date: 2007-01-26 04:46:37 -0800 (Fri, 26 Jan 2007)
Log Message:
-----------
Further work on WebAccess.
Modified Paths:
--------------
NMail/trunk/NMail.RemoteAccessService/App_Code/RemoteAccessService.cs
NMail/trunk/NMail.WebAccess/App_Code/Helper.cs
NMail/trunk/NMail.WebAccess/App_Code/HtmlEscaper.cs
NMail/trunk/NMail.WebAccess/App_Code/SubscribedFolderDataSource.cs
NMail/trunk/NMail.WebAccess/App_Themes/Default/Default.css
NMail/trunk/NMail.WebAccess/App_WebReferences/RemoteAccessService/RemoteAccessService.wsdl
NMail/trunk/NMail.WebAccess/Controls/Mail/MessageBody.aspx.cs
NMail/trunk/NMail.WebAccess/Controls/Mail/MessageViewer.ascx
NMail/trunk/NMail.WebAccess/Controls/Mail/MessageViewer.ascx.cs
NMail/trunk/NMail.WebAccess/Controls/Mail/SubscribedFolderList.ascx.cs
NMail/trunk/NMail.WebAccess/Mail.aspx
NMail/trunk/NMail.WebAccess/Web.config
Removed Paths:
-------------
NMail/trunk/NMail.WebAccess/Images/Skins/Default/ViewBackground.png
Modified: NMail/trunk/NMail.RemoteAccessService/App_Code/RemoteAccessService.cs
===================================================================
--- NMail/trunk/NMail.RemoteAccessService/App_Code/RemoteAccessService.cs 2007-01-24 09:02:05 UTC (rev 123)
+++ NMail/trunk/NMail.RemoteAccessService/App_Code/RemoteAccessService.cs 2007-01-26 12:46:37 UTC (rev 124)
@@ -248,6 +248,29 @@
throw new InvalidOperationException("Authentication token is not valid.");
}
#endregion
+
+ #region GetMessageEnvelope
+ /// <summary>
+ /// Gets the message envelope for a given message Id.
+ /// </summary>
+ /// <param name="authToken">The authentication credentials.</param>
+ /// <param name="messageId">The Id of the message to get the envelope for.</param>
+ /// <param name="folderId">The Id of the folder the message is in.</param>
+ /// <returns>The message envelope.</returns>
+ [WebMethod]
+ public EnvelopeSerializer GetMessageEnvelope(string authToken, int messageId, int folderId)
+ {
+ IAuthenticationToken token = ValidateAuthenticationToken(authToken);
+ if (token != null)
+ {
+ MessageHeaders headers = ServiceState.remoteAdmin.NMailServer.LocalStore.GetMessageHeaders(token, messageId, folderId);
+ Envelope e = new Envelope(headers);
+ return new EnvelopeSerializer(e);
+ }
+
+ throw new InvalidOperationException("Authentication token is not valid.");
+ }
+ #endregion
#region GetMessageStructure
/// <summary>
Modified: NMail/trunk/NMail.WebAccess/App_Code/Helper.cs
===================================================================
--- NMail/trunk/NMail.WebAccess/App_Code/Helper.cs 2007-01-24 09:02:05 UTC (rev 123)
+++ NMail/trunk/NMail.WebAccess/App_Code/Helper.cs 2007-01-26 12:46:37 UTC (rev 124)
@@ -29,5 +29,20 @@
return result;
}
+
+ public static Envelope GetEnvelope(EnvelopeSerializer es)
+ {
+ Envelope result = new Envelope(es.From, es.Date, es.Subject);
+
+ result.Bcc = es.Bcc;
+ result.Cc = es.Cc;
+ result.InReplyTo = es.InReplyTo;
+ result.MessageId = es.MessageId;
+ result.ReplyTo = es.ReplyTo;
+ result.Sender = es.Sender;
+ result.To = es.To;
+
+ return result;
+ }
}
}
Modified: NMail/trunk/NMail.WebAccess/App_Code/HtmlEscaper.cs
===================================================================
--- NMail/trunk/NMail.WebAccess/App_Code/HtmlEscaper.cs 2007-01-24 09:02:05 UTC (rev 123)
+++ NMail/trunk/NMail.WebAccess/App_Code/HtmlEscaper.cs 2007-01-26 12:46:37 UTC (rev 124)
@@ -27,5 +27,16 @@
return result;
}
+
+ public static string EscapeScriptsAndImages(string html)
+ {
+ string result = html.Replace("<img", "<img");
+ result = result.Replace("<script", "<script");
+
+ // TODO: other nasty tags
+ // TODO: css proxy
+
+ return result;
+ }
}
}
Modified: NMail/trunk/NMail.WebAccess/App_Code/SubscribedFolderDataSource.cs
===================================================================
--- NMail/trunk/NMail.WebAccess/App_Code/SubscribedFolderDataSource.cs 2007-01-24 09:02:05 UTC (rev 123)
+++ NMail/trunk/NMail.WebAccess/App_Code/SubscribedFolderDataSource.cs 2007-01-26 12:46:37 UTC (rev 124)
@@ -24,6 +24,14 @@
string authToken = (string)session["AuthToken"];
RemoteAccessService.RemoteAccessService ras = (RemoteAccessService.RemoteAccessService)session["RAS"];
+ if (ras == null || authToken == null)
+ {
+ session.Abandon();
+ FormsAuthentication.SignOut();
+ FormsAuthentication.RedirectToLoginPage();
+ return null;
+ }
+
StoreFolderSerializer[] serializedFolders = ras.GetAllSubscribedFolders(authToken);
List<StoreFolder> result = new List<StoreFolder>();
List<int> folderIds = new List<int>();
Modified: NMail/trunk/NMail.WebAccess/App_Themes/Default/Default.css
===================================================================
--- NMail/trunk/NMail.WebAccess/App_Themes/Default/Default.css 2007-01-24 09:02:05 UTC (rev 123)
+++ NMail/trunk/NMail.WebAccess/App_Themes/Default/Default.css 2007-01-26 12:46:37 UTC (rev 124)
@@ -22,9 +22,7 @@
.ViewButton
{
text-align: center;
- background-image: url('../../Images/Skins/Default/ViewBackground.png');
- background-repeat: repeat-x;
- background-position: left top;
+ background-color: lightblue;
height: 30px;
vertical-align: middle;
padding-left: 0.5em;
@@ -62,4 +60,4 @@
.MailListHeader
{
background-color: buttonface;
-}
\ No newline at end of file
+}
Modified: NMail/trunk/NMail.WebAccess/App_WebReferences/RemoteAccessService/RemoteAccessService.wsdl
===================================================================
--- NMail/trunk/NMail.WebAccess/App_WebReferences/RemoteAccessService/RemoteAccessService.wsdl 2007-01-24 09:02:05 UTC (rev 123)
+++ NMail/trunk/NMail.WebAccess/App_WebReferences/RemoteAccessService/RemoteAccessService.wsdl 2007-01-26 12:46:37 UTC (rev 124)
@@ -155,6 +155,22 @@
<s:element minOccurs="0" maxOccurs="1" name="To" type="s:string" />
</s:sequence>
</s:complexType>
+ <s:element name="GetMessageEnvelope">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="0" maxOccurs="1" name="authToken" type="s:string" />
+ <s:element minOccurs="1" maxOccurs="1" name="messageId" type="s:int" />
+ <s:element minOccurs="1" maxOccurs="1" name="folderId" type="s:int" />
+ </s:sequence>
+ </s:complexType>
+ </s:element>
+ <s:element name="GetMessageEnvelopeResponse">
+ <s:complexType>
+ <s:sequence>
+ <s:element minOccurs="1" maxOccurs="1" name="Envelope" nillable="true" type="tns:EnvelopeSerializer" />
+ </s:sequence>
+ </s:complexType>
+ </s:element>
<s:element name="GetMessageStructure">
<s:complexType>
<s:sequence>
@@ -248,6 +264,12 @@
<wsdl:message name="GetAllMessageEnvelopesSoapOut">
<wsdl:part name="parameters" element="tns:GetAllMessageEnvelopesResponse" />
</wsdl:message>
+ <wsdl:message name="GetMessageEnvelopeSoapIn">
+ <wsdl:part name="parameters" element="tns:GetMessageEnvelope" />
+ </wsdl:message>
+ <wsdl:message name="GetMessageEnvelopeSoapOut">
+ <wsdl:part name="parameters" element="tns:GetMessageEnvelopeResponse" />
+ </wsdl:message>
<wsdl:message name="GetMessageStructureSoapIn">
<wsdl:part name="parameters" element="tns:GetMessageStructure" />
</wsdl:message>
@@ -289,6 +311,10 @@
<wsdl:input message="tns:GetAllMessageEnvelopesSoapIn" />
<wsdl:output message="tns:GetAllMessageEnvelopesSoapOut" />
</wsdl:operation>
+ <wsdl:operation name="GetMessageEnvelope">
+ <wsdl:input message="tns:GetMessageEnvelopeSoapIn" />
+ <wsdl:output message="tns:GetMessageEnvelopeSoapOut" />
+ </wsdl:operation>
<wsdl:operation name="GetMessageStructure">
<wsdl:input message="tns:GetMessageStructureSoapIn" />
<wsdl:output message="tns:GetMessageStructureSoapOut" />
@@ -363,6 +389,15 @@
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
+ <wsdl:operation name="GetMessageEnvelope">
+ <soap:operation soapAction="http://nmailserver.sf.net/RemoteAccessService/1.0/GetMessageEnvelope" style="document" />
+ <wsdl:input>
+ <soap:body use="literal" />
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal" />
+ </wsdl:output>
+ </wsdl:operation>
<wsdl:operation name="GetMessageStructure">
<soap:operation soapAction="http://nmailserver.sf.net/RemoteAccessService/1.0/GetMessageStructure" style="document" />
<wsdl:input>
@@ -447,6 +482,15 @@
<soap12:body use="literal" />
</wsdl:output>
</wsdl:operation>
+ <wsdl:operation name="GetMessageEnvelope">
+ <soap12:operation soapAction="http://nmailserver.sf.net/RemoteAccessService/1.0/GetMessageEnvelope" style="document" />
+ <wsdl:input>
+ <soap12:body use="literal" />
+ </wsdl:input>
+ <wsdl:output>
+ <soap12:body use="literal" />
+ </wsdl:output>
+ </wsdl:operation>
<wsdl:operation name="GetMessageStructure">
<soap12:operation soapAction="http://nmailserver.sf.net/RemoteAccessService/1.0/GetMessageStructure" style="document" />
<wsdl:input>
Modified: NMail/trunk/NMail.WebAccess/Controls/Mail/MessageBody.aspx.cs
===================================================================
--- NMail/trunk/NMail.WebAccess/Controls/Mail/MessageBody.aspx.cs 2007-01-24 09:02:05 UTC (rev 123)
+++ NMail/trunk/NMail.WebAccess/Controls/Mail/MessageBody.aspx.cs 2007-01-26 12:46:37 UTC (rev 124)
@@ -19,9 +19,23 @@
{
protected void Page_Load(object sender, EventArgs e)
{
+ // Ensure there is a valid folder Id
+ if (Session["SelectedFolderId"] == null)
+ {
+ this.MessageBody.Text = "No folder selected.";
+ return;
+ }
+
+ // Ensure there is a valid message Id
+ if (Session["SelectedMessageId"] == null)
+ {
+ this.MessageBody.Text = "No message selected.";
+ return;
+ }
+
+ // Get our session variables
int selectedFolderId = (int) Session["SelectedFolderId"];
int messageId = (int) Session["SelectedMessageId"];
-
string authToken = (string) Session["AuthToken"];
RemoteAccessService.RemoteAccessService ras = (RemoteAccessService.RemoteAccessService) Session["RAS"];
@@ -29,6 +43,7 @@
BodyStructure bodyStructure = Helper.GetBodyStructure(bs);
int bodyPartNumber = 1;
+ bool htmlBody = false;
if (bodyStructure.Count == 0)
{
@@ -51,6 +66,7 @@
if (subType == "html")
{
// We'll display the first HTML part we find
+ htmlBody = true;
break;
}
}
@@ -58,8 +74,16 @@
}
string base64Body = ras.GetMessageMimePart(authToken, bodyPartNumber, messageId, selectedFolderId);
- string bodyData = Encoding.UTF8.GetString(Convert.FromBase64String(base64Body));
+ ByteString bodyData = new ByteString(Convert.FromBase64String(base64Body), Encoding.UTF8);
+ SimpleBodyPart body = MessageHelper.ParseMessage(bodyData);
- this.MessageBody.Text = bodyData;
+ if (htmlBody)
+ {
+ this.MessageBody.Text = HtmlEscaper.EscapeScriptsAndImages(body.Data.ToString());
+ }
+ else
+ {
+ this.MessageBody.Text = HtmlEscaper.EscapeAll(body.Data.ToString());
+ }
}
}
Modified: NMail/trunk/NMail.WebAccess/Controls/Mail/MessageViewer.ascx
===================================================================
--- NMail/trunk/NMail.WebAccess/Controls/Mail/MessageViewer.ascx 2007-01-24 09:02:05 UTC (rev 123)
+++ NMail/trunk/NMail.WebAccess/Controls/Mail/MessageViewer.ascx 2007-01-26 12:46:37 UTC (rev 124)
@@ -1,3 +1,9 @@
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="MessageViewer.ascx.cs" Inherits="Controls_Mail_MessageViewer" %>
-<iframe src="Controls/Mail/MessageBody.aspx"></iframe>
\ No newline at end of file
+<asp:Panel ID="EnvelopePanel" runat="server" Visible="false" Width="100%">
+ <span class="MessageSubject">
+ <asp:Literal ID="MessageSubject" runat="server" />
+ </span>
+</asp:Panel>
+
+<iframe src="Controls/Mail/MessageBody.aspx" Width="100%" />
\ No newline at end of file
Modified: NMail/trunk/NMail.WebAccess/Controls/Mail/MessageViewer.ascx.cs
===================================================================
--- NMail/trunk/NMail.WebAccess/Controls/Mail/MessageViewer.ascx.cs 2007-01-24 09:02:05 UTC (rev 123)
+++ NMail/trunk/NMail.WebAccess/Controls/Mail/MessageViewer.ascx.cs 2007-01-26 12:46:37 UTC (rev 124)
@@ -9,10 +9,29 @@
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
+using NMail.DataTypes;
+using NMail.WebAccess;
+using RemoteAccessService;
+
public partial class Controls_Mail_MessageViewer : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
+ // Ensure there is a valid folder and message Ids
+ if (Session["SelectedFolderId"] != null && Session["SelectedMessageId"] != null)
+ {
+ // Get our session variables
+ int selectedFolderId = (int)Session["SelectedFolderId"];
+ int messageId = (int)Session["SelectedMessageId"];
+ string authToken = (string)Session["AuthToken"];
+ RemoteAccessService.RemoteAccessService ras = (RemoteAccessService.RemoteAccessService)Session["RAS"];
- }
+ EnvelopeSerializer es = ras.GetMessageEnvelope(authToken, messageId, selectedFolderId);
+ Envelope envelope = Helper.GetEnvelope(es);
+
+ this.MessageSubject.Text = envelope.Subject;
+
+ this.EnvelopePanel.Visible = true;
+ }
+ }
}
Modified: NMail/trunk/NMail.WebAccess/Controls/Mail/SubscribedFolderList.ascx.cs
===================================================================
--- NMail/trunk/NMail.WebAccess/Controls/Mail/SubscribedFolderList.ascx.cs 2007-01-24 09:02:05 UTC (rev 123)
+++ NMail/trunk/NMail.WebAccess/Controls/Mail/SubscribedFolderList.ascx.cs 2007-01-26 12:46:37 UTC (rev 124)
@@ -50,6 +50,17 @@
int folderId = int.Parse(args.CommandArgument as string);
NMail.DataTypes.LocalStore.StoreFolder folder = NMail.WebAccess.SubscribedFolderDataSource.GetStoreFolder(folderId);
+ if (Session["SelectedFolderId"] != null)
+ {
+ int currentFolderId = (int)Session["SelectedFolderId"];
+
+ // If the folder has changed remove the selected message Id
+ if (folderId != currentFolderId)
+ {
+ Session.Remove("SelectedMessageId");
+ }
+ }
+
Session["SelectedFolderId"] = folderId;
Session["SelectedFolderName"] = folder.FullFolderName;
}
Deleted: NMail/trunk/NMail.WebAccess/Images/Skins/Default/ViewBackground.png
===================================================================
(Binary files differ)
Modified: NMail/trunk/NMail.WebAccess/Mail.aspx
===================================================================
--- NMail/trunk/NMail.WebAccess/Mail.aspx 2007-01-24 09:02:05 UTC (rev 123)
+++ NMail/trunk/NMail.WebAccess/Mail.aspx 2007-01-26 12:46:37 UTC (rev 124)
@@ -21,7 +21,7 @@
<table width="100%" border="0">
<tr>
<td rowspan="3" valign="top">
- <asp:WebPartZone ID="LeftZone" runat="server" HeaderText=" ">
+ <asp:WebPartZone ID="LeftZone" runat="server" HeaderText=" " BorderColor="Transparent" BorderStyle="None">
<CloseVerb Enabled="false" Visible="false" />
<ZoneTemplate>
<uc2:SubscribedFolderList ID="SubscribedFolderList" runat="server" />
@@ -30,13 +30,13 @@
</asp:WebPartZone>
</td>
<td valign="top">
- <asp:WebPartZone Width="100%" ID="TopZone" runat="server" LayoutOrientation="Horizontal" HeaderText=" ">
- <CloseVerb Enabled="false" Visible="false" />
+ <asp:WebPartZone Width="100%" ID="TopZone" runat="server" LayoutOrientation="Vertical" HeaderText=" " BorderStyle="None">
+ <CloseVerb Enabled="False" Visible="False" />
</asp:WebPartZone>
</td>
<td rowspan="3" valign="top">
- <asp:WebPartZone ID="RightZone" runat="server" HeaderText=" ">
- <CloseVerb Enabled="false" Visible="false" />
+ <asp:WebPartZone ID="RightZone" runat="server" HeaderText=" " BorderColor="Transparent" BorderStyle="None">
+ <CloseVerb Enabled="False" Visible="False" />
<ZoneTemplate>
</ZoneTemplate>
</asp:WebPartZone>
@@ -44,7 +44,7 @@
</tr>
<tr>
<td valign="top">
- <asp:WebPartZone Width="100%" ID="CenterZone" runat="server" LayoutOrientation="Vertical" HeaderText=" ">
+ <asp:WebPartZone Width="100%" ID="CenterZone" runat="server" LayoutOrientation="Vertical" HeaderText=" " BorderColor="Transparent" BorderStyle="None">
<CloseVerb Enabled="false" Visible="false" />
<ZoneTemplate>
<uc3:MailList ID="MailList1" runat="server" />
@@ -54,7 +54,7 @@
</tr>
<tr>
<td valign="top">
- <asp:WebPartZone Width="100%" ID="BottomZone" runat="server" LayoutOrientation="Horizontal" HeaderText=" ">
+ <asp:WebPartZone ID="BottomZone" runat="server" LayoutOrientation="Vertical" HeaderText=" " BorderColor="Transparent" BorderStyle="None" Width="100%">
<CloseVerb Enabled="false" Visible="false" />
<ZoneTemplate>
<uc4:MessageViewer ID="MessageViewer1" runat="server" />
Modified: NMail/trunk/NMail.WebAccess/Web.config
===================================================================
--- NMail/trunk/NMail.WebAccess/Web.config 2007-01-24 09:02:05 UTC (rev 123)
+++ NMail/trunk/NMail.WebAccess/Web.config 2007-01-26 12:46:37 UTC (rev 124)
@@ -24,7 +24,7 @@
<connectionStrings/>
<system.web>
- <pages theme="Default"/>
+ <pages theme="Default" enableEventValidation="false" viewStateEncryptionMode="Never"/>
<!--
Set compilation debug="true" to insert debugging
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|