Revision: 40
Author: tmyroadctfig
Date: 2006-06-02 06:26:56 -0700 (Fri, 02 Jun 2006)
ViewCVS: http://svn.sourceforge.net/nmailserver/?rev=40&view=rev
Log Message:
-----------
Further work on admin website.
Modified Paths:
--------------
NMail/branches/luke-dev/NMail/ILocalStore.cs
NMail/branches/luke-dev/NMail/ILocalStoreData.cs
NMail/branches/luke-dev/NMail.Administration.Web/UserDetails.aspx
NMail/branches/luke-dev/NMail.Administration.Web/Web.sitemap
NMail/branches/luke-dev/NMail.ImapService/State/AuthenticatedState.cs
NMail/branches/luke-dev/NMail.LocalStore/LocalStore.cs
NMail/branches/luke-dev/NMail.LocalStoreData.MySql/MySqlLocalStoreData.cs
Added Paths:
-----------
NMail/branches/luke-dev/NMail.Administration.Web/App_Code/FolderDataSource.cs
NMail/branches/luke-dev/NMail.Administration.Web/FolderDetails.aspx
NMail/branches/luke-dev/NMail.Administration.Web/FolderDetails.aspx.cs
NMail/branches/luke-dev/NMail.Administration.Web/ViewFolders.aspx
NMail/branches/luke-dev/NMail.Administration.Web/ViewFolders.aspx.cs
Modified: NMail/branches/luke-dev/NMail/ILocalStore.cs
===================================================================
--- NMail/branches/luke-dev/NMail/ILocalStore.cs 2006-06-01 12:15:36 UTC (rev 39)
+++ NMail/branches/luke-dev/NMail/ILocalStore.cs 2006-06-02 13:26:56 UTC (rev 40)
@@ -83,6 +83,14 @@
StoreFolder GetStoreFolder(IAuthenticationToken authToken, string folder);
/// <summary>
+ /// Gets the store folder from the given folder Id.
+ /// </summary>
+ /// <param name="authToken">The authentication credentials.</param>
+ /// <param name="folderId">The Id of the folder to lookup.</param>
+ /// <returns>The store folder or null if the folder Id is invalid.</returns>
+ StoreFolder GetStoreFolder(IAuthenticationToken authToken, int folderId);
+
+ /// <summary>
/// Creates a new folder.
/// </summary>
/// <remarks>
@@ -97,9 +105,9 @@
/// Deletes an existing folder.
/// </summary>
/// <param name="authToken">The authentication credentials.</param>
- /// <param name="folder">The folder to delete.</param>
+ /// <param name="folderId">The Id of the folder to delete.</param>
/// <returns>The result of the delete attempt.</returns>
- LocalStoreFolderResult DeleteFolder(IAuthenticationToken authToken, StoreFolder folder);
+ LocalStoreFolderResult DeleteFolder(IAuthenticationToken authToken, int folderId);
/// <summary>
/// Renames an existing folder in the local store.
Modified: NMail/branches/luke-dev/NMail/ILocalStoreData.cs
===================================================================
--- NMail/branches/luke-dev/NMail/ILocalStoreData.cs 2006-06-01 12:15:36 UTC (rev 39)
+++ NMail/branches/luke-dev/NMail/ILocalStoreData.cs 2006-06-02 13:26:56 UTC (rev 40)
@@ -58,6 +58,13 @@
StoreFolder GetStoreFolder(Folder folder);
/// <summary>
+ /// Gets the store folder from the given folder Id.
+ /// </summary>
+ /// <param name="folderId">The Id of the folder to lookup.</param>
+ /// <returns>The store folder or null if the folder Id is invalid.</returns>
+ StoreFolder GetStoreFolder(int folderId);
+
+ /// <summary>
/// Gets the parent folder for the given folder.
/// </summary>
/// <param name="folder">The folder to lookup the parent of.</param>
@@ -77,9 +84,9 @@
/// <summary>
/// Deletes an existing folder.
/// </summary>
- /// <param name="folder">The folder to delete.</param>
+ /// <param name="folderId">The Id of the folder to delete.</param>
/// <returns>The result of the delete attempt.</returns>
- LocalStoreFolderResult DeleteFolder(StoreFolder folder);
+ LocalStoreFolderResult DeleteFolder(int folderId);
/// <summary>
/// Renames an existing folder in the local store.
Added: NMail/branches/luke-dev/NMail.Administration.Web/App_Code/FolderDataSource.cs
===================================================================
--- NMail/branches/luke-dev/NMail.Administration.Web/App_Code/FolderDataSource.cs (rev 0)
+++ NMail/branches/luke-dev/NMail.Administration.Web/App_Code/FolderDataSource.cs 2006-06-02 13:26:56 UTC (rev 40)
@@ -0,0 +1,71 @@
+using System;
+using System.Collections.Generic;
+using System.Data;
+using System.Configuration;
+using System.Web;
+using System.Web.Security;
+using System.Web.UI;
+using System.Web.SessionState;
+using System.Web.UI.WebControls;
+using System.Web.UI.WebControls.WebParts;
+using System.Web.UI.HtmlControls;
+
+using NMail;
+using NMail.Authentication;
+using NMail.DataTypes;
+
+namespace NMail.Administration.Web
+{
+ /// <summary>
+ /// Summary description for FolderDataSource
+ /// </summary>
+ public static class FolderDataSource
+ {
+ public static List<StoreFolder> GetFolders()
+ {
+ IHttpSessionState session = SessionStateUtility.GetHttpSessionStateFromContext(HttpContext.Current);
+ IAuthenticationToken authToken = (IAuthenticationToken)session["AuthToken"];
+ ILocalStore localStore = (ILocalStore)session["LocalStore"];
+
+ //return new List<StoreFolder>(localStore.GetStoreFolder(authToken));
+ return null;
+ }
+
+ public static StoreFolder GetFolder(int folderId)
+ {
+ IHttpSessionState session = SessionStateUtility.GetHttpSessionStateFromContext(HttpContext.Current);
+ IAuthenticationToken authToken = (IAuthenticationToken)session["AuthToken"];
+ ILocalStore localStore = (ILocalStore)session["LocalStore"];
+
+ return localStore.GetStoreFolder(authToken, folderId);
+ }
+
+ public static List<StoreFolder> GetSubFolders(int folderId)
+ {
+ IHttpSessionState session = SessionStateUtility.GetHttpSessionStateFromContext(HttpContext.Current);
+ IAuthenticationToken authToken = (IAuthenticationToken)session["AuthToken"];
+ ILocalStore localStore = (ILocalStore)session["LocalStore"];
+
+ StoreFolder parent = localStore.GetStoreFolder(authToken, folderId);
+ return new List<StoreFolder>(localStore.GetChildren(authToken, parent));
+ }
+
+ public static LocalStoreFolderResult DeleteFolder(int folderId)
+ {
+ IHttpSessionState session = SessionStateUtility.GetHttpSessionStateFromContext(HttpContext.Current);
+ IAuthenticationToken authToken = (IAuthenticationToken)session["AuthToken"];
+ ILocalStore localStore = (ILocalStore)session["LocalStore"];
+
+ return localStore.DeleteFolder(authToken, folderId);
+ }
+
+ public static LocalStoreFolderResult CreateFolder(string folderName)
+ {
+ IHttpSessionState session = SessionStateUtility.GetHttpSessionStateFromContext(HttpContext.Current);
+ IAuthenticationToken authToken = (IAuthenticationToken)session["AuthToken"];
+ ILocalStore localStore = (ILocalStore)session["LocalStore"];
+
+ return localStore.CreateFolder(authToken, folderName);
+ }
+ }
+}
Added: NMail/branches/luke-dev/NMail.Administration.Web/FolderDetails.aspx
===================================================================
--- NMail/branches/luke-dev/NMail.Administration.Web/FolderDetails.aspx (rev 0)
+++ NMail/branches/luke-dev/NMail.Administration.Web/FolderDetails.aspx 2006-06-02 13:26:56 UTC (rev 40)
@@ -0,0 +1,60 @@
+<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="FolderDetails.aspx.cs" Inherits="FolderDetails" Title="Untitled Page" %>
+<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder" Runat="Server">
+ <h2>Folder Details</h2>
+ <asp:Literal ID="StatusMessage" runat="server"></asp:Literal>
+ <asp:DetailsView ID="FolderDetailsView" runat="server" AutoGenerateRows="False" CellPadding="4" DataSourceID="FolderDataSource" ForeColor="#333333" GridLines="None">
+ <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
+ <CommandRowStyle BackColor="#D1DDF1" Font-Bold="True" />
+ <EditRowStyle BackColor="#2461BF" />
+ <RowStyle BackColor="#EFF3FB" />
+ <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
+ <Fields>
+ <asp:BoundField DataField="FolderId" HeaderText="Folder Id" SortExpression="FolderId" InsertVisible="False" ReadOnly="True" />
+ <asp:BoundField DataField="FolderName" HeaderText="Folder Name" ReadOnly="True" SortExpression="FolderName" />
+ <asp:BoundField DataField="NameSpace" HeaderText="Namespace" ReadOnly="True" SortExpression="NameSpace" InsertVisible="False" />
+ <asp:CheckBoxField DataField="HasChildren" HeaderText="Has Children" SortExpression="HasChildren" InsertVisible="False" />
+ <asp:CommandField ShowDeleteButton="True" ShowInsertButton="True" />
+ </Fields>
+ <FieldHeaderStyle BackColor="#DEE8F5" Font-Bold="True" />
+ <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
+ <AlternatingRowStyle BackColor="White" />
+ </asp:DetailsView>
+ <asp:ObjectDataSource ID="FolderDataSource" runat="server" SelectMethod="GetFolder"
+ TypeName="NMail.Administration.Web.FolderDataSource" DeleteMethod="DeleteFolder" OnDeleted="FolderDataSource_Deleted" OnDeleting="FolderDataSource_Deleting" InsertMethod="CreateFolder" OnInserting="FolderDataSource_Inserting">
+ <SelectParameters>
+ <asp:QueryStringParameter Name="folderId" QueryStringField="FolderId" Type="Int32" />
+ </SelectParameters>
+ <DeleteParameters>
+ <asp:Parameter Name="folderId" Type="Int32" />
+ </DeleteParameters>
+ <InsertParameters>
+ <asp:Parameter Name="folderName" Type="String" />
+ </InsertParameters>
+ </asp:ObjectDataSource>
+ <h2>Sub-folders</h2>
+ <asp:GridView ID="SubFoldersGridView" runat="server" AutoGenerateColumns="False" CellPadding="4"
+ DataSourceID="FolderChildrenDataSource" ForeColor="#333333" GridLines="None">
+ <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
+ <Columns>
+ <asp:BoundField DataField="FolderId" HeaderText="Folder Id" SortExpression="FolderId" />
+ <asp:BoundField DataField="FolderName" HeaderText="Folder Name" ReadOnly="True" SortExpression="FolderName" />
+ <asp:BoundField DataField="NameSpace" HeaderText="Namespace" ReadOnly="True" SortExpression="NameSpace" />
+ <asp:CheckBoxField DataField="HasChildren" HeaderText="HasChildren" SortExpression="HasChildren" />
+ <asp:HyperLinkField DataNavigateUrlFields="FolderId" DataNavigateUrlFormatString="FolderDetails.aspx?FolderId={0}"
+ HeaderText="Details" Text="details" />
+ </Columns>
+ <RowStyle BackColor="#EFF3FB" />
+ <EditRowStyle BackColor="#2461BF" />
+ <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
+ <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
+ <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
+ <AlternatingRowStyle BackColor="White" />
+ </asp:GridView>
+ <asp:ObjectDataSource ID="FolderChildrenDataSource" runat="server" SelectMethod="GetSubFolders"
+ TypeName="NMail.Administration.Web.FolderDataSource">
+ <SelectParameters>
+ <asp:QueryStringParameter Name="folderId" QueryStringField="FolderId" Type="Int32" />
+ </SelectParameters>
+ </asp:ObjectDataSource>
+</asp:Content>
+
Added: NMail/branches/luke-dev/NMail.Administration.Web/FolderDetails.aspx.cs
===================================================================
--- NMail/branches/luke-dev/NMail.Administration.Web/FolderDetails.aspx.cs (rev 0)
+++ NMail/branches/luke-dev/NMail.Administration.Web/FolderDetails.aspx.cs 2006-06-02 13:26:56 UTC (rev 40)
@@ -0,0 +1,44 @@
+using System;
+using System.Data;
+using System.Configuration;
+using System.Collections;
+using System.Web;
+using System.Web.Security;
+using System.Web.UI;
+using System.Web.UI.WebControls;
+using System.Web.UI.WebControls.WebParts;
+using System.Web.UI.HtmlControls;
+
+using NMail;
+
+public partial class FolderDetails : System.Web.UI.Page
+{
+ protected void Page_Load(object sender, EventArgs e)
+ {
+ if (!Request.IsAuthenticated)
+ {
+ Response.Redirect("Login.aspx");
+ }
+ }
+
+ protected void FolderDataSource_Deleting(object sender, ObjectDataSourceMethodEventArgs e)
+ {
+ e.InputParameters["folderId"] = Request.QueryString["FolderId"];
+ }
+
+ protected void FolderDataSource_Deleted(object sender, ObjectDataSourceStatusEventArgs e)
+ {
+ LocalStoreFolderResult result = (LocalStoreFolderResult)e.ReturnValue;
+
+ switch (result)
+ {
+ case LocalStoreFolderResult.HasChildren:
+ this.StatusMessage.Text = "Cannot delete the folder because it still has sub-folders.";
+ break;
+ }
+ }
+ protected void FolderDataSource_Inserting(object sender, ObjectDataSourceMethodEventArgs e)
+ {
+
+ }
+}
Modified: NMail/branches/luke-dev/NMail.Administration.Web/UserDetails.aspx
===================================================================
--- NMail/branches/luke-dev/NMail.Administration.Web/UserDetails.aspx 2006-06-01 12:15:36 UTC (rev 39)
+++ NMail/branches/luke-dev/NMail.Administration.Web/UserDetails.aspx 2006-06-02 13:26:56 UTC (rev 40)
@@ -39,6 +39,8 @@
<asp:BoundField DataField="FolderName" HeaderText="Folder Name" ReadOnly="True" SortExpression="FolderName" />
<asp:BoundField DataField="NameSpace" HeaderText="Namespace" ReadOnly="True" SortExpression="NameSpace" />
<asp:CheckBoxField DataField="HasChildren" HeaderText="Has Children" SortExpression="HasChildren" />
+ <asp:HyperLinkField DataNavigateUrlFields="FolderId" DataNavigateUrlFormatString="FolderDetails.aspx?FolderId={0}"
+ HeaderText="Details" Text="details" />
</Columns>
<RowStyle BackColor="#EFF3FB" />
<EditRowStyle BackColor="#2461BF" />
Added: NMail/branches/luke-dev/NMail.Administration.Web/ViewFolders.aspx
===================================================================
--- NMail/branches/luke-dev/NMail.Administration.Web/ViewFolders.aspx (rev 0)
+++ NMail/branches/luke-dev/NMail.Administration.Web/ViewFolders.aspx 2006-06-02 13:26:56 UTC (rev 40)
@@ -0,0 +1,24 @@
+<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="ViewFolders.aspx.cs" Inherits="ViewFolders" Title="Untitled Page" %>
+<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder" Runat="Server">
+ <asp:GridView ID="FoldersGridView" runat="server" AutoGenerateColumns="False" CellPadding="4"
+ DataSourceID="FoldersDataSource" ForeColor="#333333" GridLines="None">
+ <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
+ <Columns>
+ <asp:BoundField DataField="FolderId" HeaderText="Folder Id" SortExpression="FolderId" />
+ <asp:BoundField DataField="FolderName" HeaderText="Folder Name" ReadOnly="True" SortExpression="FolderName" />
+ <asp:BoundField DataField="NameSpace" HeaderText="Namespace" ReadOnly="True" SortExpression="NameSpace" />
+ <asp:CheckBoxField DataField="HasChildren" HeaderText="Has Children" SortExpression="HasChildren" />
+ <asp:HyperLinkField DataNavigateUrlFields="FolderId" DataNavigateUrlFormatString="FolderDetails.aspx?FolderId={0}"
+ HeaderText="Details" Text="details" />
+ </Columns>
+ <RowStyle BackColor="#EFF3FB" />
+ <EditRowStyle BackColor="#2461BF" />
+ <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
+ <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
+ <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
+ <AlternatingRowStyle BackColor="White" />
+ </asp:GridView>
+ <asp:ObjectDataSource ID="FoldersDataSource" runat="server" SelectMethod="GetFolders"
+ TypeName="NMail.Administration.Web.FolderDataSource"></asp:ObjectDataSource>
+</asp:Content>
+
Added: NMail/branches/luke-dev/NMail.Administration.Web/ViewFolders.aspx.cs
===================================================================
--- NMail/branches/luke-dev/NMail.Administration.Web/ViewFolders.aspx.cs (rev 0)
+++ NMail/branches/luke-dev/NMail.Administration.Web/ViewFolders.aspx.cs 2006-06-02 13:26:56 UTC (rev 40)
@@ -0,0 +1,21 @@
+using System;
+using System.Data;
+using System.Configuration;
+using System.Collections;
+using System.Web;
+using System.Web.Security;
+using System.Web.UI;
+using System.Web.UI.WebControls;
+using System.Web.UI.WebControls.WebParts;
+using System.Web.UI.HtmlControls;
+
+public partial class ViewFolders : System.Web.UI.Page
+{
+ protected void Page_Load(object sender, EventArgs e)
+ {
+ if (!Request.IsAuthenticated)
+ {
+ Response.Redirect("Login.aspx");
+ }
+ }
+}
Modified: NMail/branches/luke-dev/NMail.Administration.Web/Web.sitemap
===================================================================
--- NMail/branches/luke-dev/NMail.Administration.Web/Web.sitemap 2006-06-01 12:15:36 UTC (rev 39)
+++ NMail/branches/luke-dev/NMail.Administration.Web/Web.sitemap 2006-06-02 13:26:56 UTC (rev 40)
@@ -4,5 +4,6 @@
<siteMapNode url="Login.aspx" title="Login" description="" />
<siteMapNode url="ViewMailDomains.aspx" title="Mail Domains" description="" />
<siteMapNode url="ViewUsers.aspx" title="Users" description="" />
+ <siteMapNode url="ViewFolders.aspx" title="Folders" description="" />
</siteMapNode>
</siteMap>
Modified: NMail/branches/luke-dev/NMail.ImapService/State/AuthenticatedState.cs
===================================================================
--- NMail/branches/luke-dev/NMail.ImapService/State/AuthenticatedState.cs 2006-06-01 12:15:36 UTC (rev 39)
+++ NMail/branches/luke-dev/NMail.ImapService/State/AuthenticatedState.cs 2006-06-02 13:26:56 UTC (rev 40)
@@ -270,7 +270,7 @@
StoreFolder folder = LocalStore.GetStoreFolder(Session.AuthenticationToken, cmd.Folder);
if (folder != null) {
- LocalStoreFolderResult result = LocalStore.DeleteFolder(Session.AuthenticationToken, folder);
+ LocalStoreFolderResult result = LocalStore.DeleteFolder(Session.AuthenticationToken, folder.FolderId);
if (result == LocalStoreFolderResult.OkSuccessful) {
// Re-create the inbox folder if it is deleted.
Modified: NMail/branches/luke-dev/NMail.LocalStore/LocalStore.cs
===================================================================
--- NMail/branches/luke-dev/NMail.LocalStore/LocalStore.cs 2006-06-01 12:15:36 UTC (rev 39)
+++ NMail/branches/luke-dev/NMail.LocalStore/LocalStore.cs 2006-06-02 13:26:56 UTC (rev 40)
@@ -295,13 +295,31 @@
StoreFolder storeFolder = LocalStoreData.GetStoreFolder(resolvedFolder);
// Ensure the user has rights to list on the parent folder
- if (storeFolder == null || !hasFolderPrivilege(authToken.Username, storeFolder, StoreFolderPrivilege.None)) {
+ if (storeFolder == null || !hasFolderPrivilege(authToken.Username, storeFolder.FolderId, StoreFolderPrivilege.None)) {
return null;
}
// Either have permission or no parent, either way return the folder
return storeFolder;
}
+
+ /// <summary>
+ /// Gets the store folder from the given folder Id.
+ /// </summary>
+ /// <param name="authToken">The authentication credentials.</param>
+ /// <param name="folderId">The Id of the folder to lookup.</param>
+ /// <returns>The store folder or null if the folder name is invalid.</returns>
+ public StoreFolder GetStoreFolder(IAuthenticationToken authToken, int folderId) {
+ StoreFolder storeFolder = LocalStoreData.GetStoreFolder(folderId);
+
+ // Ensure the user has rights to list on the parent folder
+ if (storeFolder == null || !hasFolderPrivilege(authToken.Username, storeFolder.FolderId, StoreFolderPrivilege.None)) {
+ return null;
+ }
+
+ // Either have permission or no parent, either way return the folder
+ return storeFolder;
+ }
#endregion
#region Create Folder
@@ -322,7 +340,7 @@
if (parent != null) {
// Ensure the user has rights to get the message flags
- if (hasFolderPrivilege(authToken.Username, parent, StoreFolderPrivilege.CreateFolders)) {
+ if (hasFolderPrivilege(authToken.Username, parent.FolderId, StoreFolderPrivilege.CreateFolders)) {
// Get the user Id
int? userId = LocalStoreData.GetUserId(authToken.Username);
@@ -367,15 +385,15 @@
/// Deletes an existing folder.
/// </summary>
/// <param name="authToken">The authentication credentials.</param>
- /// <param name="folder">The folder to delete.</param>
+ /// <param name="folderId">The Id of the folder to delete.</param>
/// <returns>The result of the delete attempt.</returns>
- public LocalStoreFolderResult DeleteFolder(IAuthenticationToken authToken, StoreFolder folder) {
+ public LocalStoreFolderResult DeleteFolder(IAuthenticationToken authToken, int folderId) {
// Ensure the user has rights to delete the folder
- if (hasFolderPrivilege(authToken.Username, folder, StoreFolderPrivilege.Delete)) {
+ if (hasFolderPrivilege(authToken.Username, folderId, StoreFolderPrivilege.Delete)) {
// Delete the folder
- return LocalStoreData.DeleteFolder(folder);
+ return LocalStoreData.DeleteFolder(folderId);
} else {
return LocalStoreFolderResult.NotPermitted;
@@ -400,13 +418,13 @@
/// <returns>The result of the rename attempt.</returns>
public LocalStoreFolderResult RenameFolder(IAuthenticationToken authToken, StoreFolder folder, string newFolderName) {
// Ensure the user has delete privileges on the original folder
- if (hasFolderPrivilege(authToken.Username, folder, StoreFolderPrivilege.Delete)) {
+ if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Delete)) {
Folder newFolder = new Folder(folder.NameSpace, newFolderName);
StoreFolder parent = LocalStoreData.GetStoreFolder(newFolder.Parent);
// Ensure the user has create privileges on the new parent folder
- if (parent != null && hasFolderPrivilege(authToken.Username, parent, StoreFolderPrivilege.CreateFolders)) {
+ if (parent != null && hasFolderPrivilege(authToken.Username, parent.FolderId, StoreFolderPrivilege.CreateFolders)) {
return LocalStoreData.RenameFolder(folder, newFolderName);
} else {
@@ -472,7 +490,7 @@
public StoreFolder[] GetChildren(IAuthenticationToken authToken, StoreFolder parent) {
// Ensure the user has rights to list the folders
- if (hasFolderPrivilege(authToken.Username, parent, StoreFolderPrivilege.Lookup)) {
+ if (hasFolderPrivilege(authToken.Username, parent.FolderId, StoreFolderPrivilege.Lookup)) {
// Return the children
return LocalStoreData.GetChildren(parent);
@@ -536,7 +554,7 @@
public LocalStoreFolderResult Subscribe(IAuthenticationToken authToken, StoreFolder folder) {
// Ensure the user has rights to subscribe to the folder
- if (hasFolderPrivilege(authToken.Username, folder, StoreFolderPrivilege.Lookup)) {
+ if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Lookup)) {
// Subscribe to the folder
LocalStoreData.Subscribe(authToken.Username, folder);
@@ -573,7 +591,7 @@
public int GetNextMessageId(IAuthenticationToken authToken, int currentId, StoreFolder folder) {
// Ensure the user has rights to get the message Id
- if (hasFolderPrivilege(authToken.Username, folder, StoreFolderPrivilege.Read)) {
+ if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Read)) {
// Return the message Id
return LocalStoreData.GetNextMessageId(currentId, folder);
@@ -592,7 +610,7 @@
public int GetNextMessageId(IAuthenticationToken authToken, StoreFolder folder) {
// Ensure the user has rights to get the message Id
- if (hasFolderPrivilege(authToken.Username, folder, StoreFolderPrivilege.Read)) {
+ if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Read)) {
// Return the message Id
return LocalStoreData.GetNextMessageId(folder);
@@ -614,7 +632,7 @@
public int GetMessageId(IAuthenticationToken authToken, int messageOffset, StoreFolder folder) {
// Ensure the user has rights to get the message Id
- if (hasFolderPrivilege(authToken.Username, folder, StoreFolderPrivilege.Read)) {
+ if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Read)) {
// Return the message Id
return LocalStoreData.GetMessageId(messageOffset, folder);
@@ -636,7 +654,7 @@
public int GetMessageOffset(IAuthenticationToken authToken, int messageId, StoreFolder folder) {
// Ensure the user has rights to get the message Id
- if (hasFolderPrivilege(authToken.Username, folder, StoreFolderPrivilege.Read)) {
+ if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Read)) {
// Return the message Id
return LocalStoreData.GetMessageOffset(messageId, folder);
@@ -660,7 +678,7 @@
public StoreMessageFlags? GetMessageFlags(IAuthenticationToken authToken, int messageId, StoreFolder folder) {
// Ensure the user has rights to get the message flags
- if (hasFolderPrivilege(authToken.Username, folder, StoreFolderPrivilege.Read)) {
+ if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Read)) {
// Return the message flags
return LocalStoreData.GetMessageFlags(messageId, folder);
@@ -686,7 +704,7 @@
if ((changedFlags & StoreMessageFlags.Deleted) == StoreMessageFlags.Deleted) {
// Ensure the user has rights to delete a message
- if (!hasFolderPrivilege(authToken.Username, folder, StoreFolderPrivilege.Delete)) {
+ if (!hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Delete)) {
// No rights, replace with the current deleted flag
flags |= StoreMessageFlags.Deleted;
flags ^= StoreMessageFlags.Deleted;
@@ -697,7 +715,7 @@
if ((changedFlags & StoreMessageFlags.Seen) == StoreMessageFlags.Seen) {
// Ensure the user has rights to alter the seen flag
- if (!hasFolderPrivilege(authToken.Username, folder, StoreFolderPrivilege.AlterSeenFlag)) {
+ if (!hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.AlterSeenFlag)) {
// No rights, replace with the current seen flag
flags |= StoreMessageFlags.Seen;
flags ^= StoreMessageFlags.Seen;
@@ -708,7 +726,7 @@
if ((changedFlags ^ (StoreMessageFlags.Deleted | StoreMessageFlags.Seen)) != StoreMessageFlags.None) {
// Ensure the user has rights to alter the other flags
- if (!hasFolderPrivilege(authToken.Username, folder, StoreFolderPrivilege.Write)) {
+ if (!hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Write)) {
// No rights, replace with the current flags (excluding \Seen and \Deleted)
flags &= (StoreMessageFlags.Deleted | StoreMessageFlags.Seen);
currentFlags |= (StoreMessageFlags.Deleted | StoreMessageFlags.Seen);
@@ -735,7 +753,7 @@
public DateTime? GetInternalDate(IAuthenticationToken authToken, int messageId, StoreFolder folder) {
// Ensure the user has rights to get the message date time
- if (hasFolderPrivilege(authToken.Username, folder, StoreFolderPrivilege.Read)) {
+ if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Read)) {
// Return the internal date
return LocalStoreData.GetInternalDate(messageId, folder);
@@ -757,7 +775,7 @@
public int? GetMessageSize(IAuthenticationToken authToken, int messageId, StoreFolder folder) {
// Ensure the user has rights to get the message size
- if (hasFolderPrivilege(authToken.Username, folder, StoreFolderPrivilege.Read)) {
+ if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Read)) {
// Return the message size
return LocalStoreData.GetMessageSize(messageId, folder);
@@ -779,7 +797,7 @@
public MessageHeaders GetMessageHeaders(IAuthenticationToken authToken, int messageId, StoreFolder folder) {
// Ensure the user has rights to get the message headers
- if (hasFolderPrivilege(authToken.Username, folder, StoreFolderPrivilege.Read)) {
+ if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Read)) {
// Return the message headers
return LocalStoreData.GetMessageHeaders(messageId, folder);
@@ -802,7 +820,7 @@
public IMessageBodyPart GetMessageMimePart(IAuthenticationToken authToken, int messageId, StoreFolder folder, int messagePart) {
// Ensure the user has rights to get the message
- if (hasFolderPrivilege(authToken.Username, folder, StoreFolderPrivilege.Read)) {
+ if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Read)) {
// Return the message part
return LocalStoreData.GetMessageMimePart(messageId, folder, messagePart);
@@ -824,7 +842,7 @@
public Message GetMessage(IAuthenticationToken authToken, int messageId, StoreFolder folder) {
// Ensure the user has rights to get the message
- if (hasFolderPrivilege(authToken.Username, folder, StoreFolderPrivilege.Read)) {
+ if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Read)) {
// Return the message
return LocalStoreData.GetMessage(messageId, folder);
@@ -847,7 +865,7 @@
public int? GetMessageCount(IAuthenticationToken authToken, StoreFolder folder) {
// Ensure the user has rights to get the message count
- if (hasFolderPrivilege(authToken.Username, folder, StoreFolderPrivilege.Read)) {
+ if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Read)) {
// Return the message count
return LocalStoreData.GetMessageCount(folder);
@@ -868,7 +886,7 @@
public int? GetRecentMessageCount(IAuthenticationToken authToken, StoreFolder folder) {
// Ensure the user has rights to get the message count
- if (hasFolderPrivilege(authToken.Username, folder, StoreFolderPrivilege.Lookup)) {
+ if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Lookup)) {
// Return the count
return LocalStoreData.GetRecentMessageCount(folder);
@@ -893,7 +911,7 @@
public int[] PurgeDeletedMessages(IAuthenticationToken authToken, StoreFolder folder) {
// Ensure the user has rights to purge the folder
- if (hasFolderPrivilege(authToken.Username, folder, StoreFolderPrivilege.Delete)) {
+ if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Delete)) {
// Purge the folder's deleted messages
return LocalStoreData.PurgeDeletedMessages(folder);
@@ -1114,7 +1132,7 @@
public void SetStoreFolderAce(IAuthenticationToken authToken, StoreFolder folder, StoreFolderAce ace) {
// Ensure the user has rights to alter the ACL
- if (hasFolderPrivilege(authToken.Username, folder, StoreFolderPrivilege.Admin)) {
+ if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Admin)) {
// Set the ACE
LocalStoreData.SetStoreFolderAce(folder, ace);
}
@@ -1123,7 +1141,7 @@
public void RemoveStoreFolderAce(IAuthenticationToken authToken, StoreFolder folder, string identifier) {
// Ensure the user has rights to alter the ACL
- if (hasFolderPrivilege(authToken.Username, folder, StoreFolderPrivilege.Admin)) {
+ if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Admin)) {
// Remove the ACE
LocalStoreData.RemoveStoreFolderAce(folder, identifier);
}
@@ -1132,7 +1150,7 @@
public StoreFolderAcl GetStoreFolderAcl(IAuthenticationToken authToken, StoreFolder folder) {
// Ensure the user has rights to lookup the ACL
- if (hasFolderPrivilege(authToken.Username, folder, StoreFolderPrivilege.Lookup)) {
+ if (hasFolderPrivilege(authToken.Username, folder.FolderId, StoreFolderPrivilege.Lookup)) {
// Return the ACL
StoreFolderAcl currentAcl = LocalStoreData.GetStoreFolderAcl(folder);
return currentAcl;
@@ -1219,9 +1237,10 @@
#endregion
#endregion
- private bool hasFolderPrivilege(string username, StoreFolder folder, StoreFolderPrivilege privilege) {
+ private bool hasFolderPrivilege(string username, int folderId, StoreFolderPrivilege privilege) {
// First check if the user has the required privilege on the folder
+ StoreFolder folder = LocalStoreData.GetStoreFolder(folderId);
StoreFolderAcl currentAcl = LocalStoreData.GetStoreFolderAcl(folder);
StoreFolderAce userAce = currentAcl[username];
@@ -1245,7 +1264,7 @@
StoreFolder parent = LocalStoreData.GetParentFolder(folder);
if (parent != null) {
// Recursively check the parent folders for the lookup privilege
- return hasFolderPrivilege(username, parent, StoreFolderPrivilege.Lookup);
+ return hasFolderPrivilege(username, parent.FolderId, StoreFolderPrivilege.Lookup);
}
// No parent (don't need Lookup priv) and user has the required privilege
Modified: NMail/branches/luke-dev/NMail.LocalStoreData.MySql/MySqlLocalStoreData.cs
===================================================================
--- NMail/branches/luke-dev/NMail.LocalStoreData.MySql/MySqlLocalStoreData.cs 2006-06-01 12:15:36 UTC (rev 39)
+++ NMail/branches/luke-dev/NMail.LocalStoreData.MySql/MySqlLocalStoreData.cs 2006-06-02 13:26:56 UTC (rev 40)
@@ -271,6 +271,12 @@
return null;
}
}
+
+ public StoreFolder GetStoreFolder(int folderId) {
+ using (MySqlConnection cnn = GetConnection()) {
+ return getStoreFolder(folderId);
+ }
+ }
#endregion
#region Get Parent Folder
@@ -340,14 +346,14 @@
/// Deletes an existing folder.
/// </summary>
/// <param name="authToken">The authentication credentials.</param>
- /// <param name="folder">The folder to delete.</param>
+ /// <param name="folderId">The Id of the folder to delete.</param>
/// <returns>The result of the delete attempt.</returns>
- public LocalStoreFolderResult DeleteFolder(StoreFolder folder) {
+ public LocalStoreFolderResult DeleteFolder(int folderId) {
using (MySqlConnection cnn = GetConnection()) {
using (MySqlCommand cmd = cnn.CreateCommand()) {
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "DeleteFolder";
- cmd.Parameters.Add("DeleteFolderId", folder.FolderId);
+ cmd.Parameters.Add("DeleteFolderId", folderId);
cmd.Parameters.Add("Result", MySqlDbType.Int32);
cmd.Parameters["Result"].Direction = ParameterDirection.Output;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|