|
// For convenience of reloading
public void Connect (string strServer)
{
_server = strServer;
ConnectToServer ();
}
// For convenience of reloading
public void Connect (string strServer, string strWebSite)
{
_server = strServer;
_website = strWebSite;
ConnectToServer ();
}
// Determine whether to save this virtual directory
public bool Exists (string strVirdir)
{
return _virdirs.Contains (strVirdir);
}
// Add a virtual directory
public void Create (VirtualDirectory newdir)
{
string strPath = "IIS: //" + _server + "/ W3SVC /" + _website + "/ ROOT /" + newdir.Name;
if (! _ virdirs.Contains (newdir.Name) || _batchflag)
{
try
{
// Add to ROOT's Children collection
DirectoryEntry newVirDir = rootfolder.Children.Add (newdir.Name, "IIsWebVirtualDir");
newVirDir.Invoke ("AppCreate", true);
newVirDir.CommitChanges ();
rootfolder.CommitChanges ();
// Then update the data
UpdateDirInfo (newVirDir, newdir);
}
catch (Exception ee)
{
throw new Exception (ee.ToString ());
}
}
else
{
throw new Exception ("This virtual directory is already exist.");
}
}
// Get a virtual directory
public VirtualDirectory GetVirDir (string strVirdir)
{
VirtualDirectory tmp = null;
if (_virdirs.Contains (strVirdir))
{
tmp = _virdirs.Find (strVirdir);
((VirtualDirectory) _virdirs [strVirdir]). Flag = 2;
}
else
{
throw new Exception ("This virtual directory is not exists");
}
return tmp;
}
// Update a virtual directory
public void Update (VirtualDirectory dir)
{
// Determine whether the virtual directory that needs to be changed exists
if (_virdirs.Contains (dir.Name))
{
DirectoryEntry ode = rootfolder.Children.Find (dir.Name, "IIsWebVirtualDir");
UpdateDirInfo (ode, dir);
}
else
{
throw new Exception ("This virtual directory is not exists.");
}
}
// Delete a virtual directory
public void Delete (string strVirdir)
{
if (_virdirs.Contains (strVirdir))
{
object [] paras = new object [2];
paras [0] = "IIsWebVirtualDir"; // Indicating that the operation is a virtual directory
paras [1] = strVirdir;
rootfolder.Invoke ("Delete", paras);
rootfolder.CommitChanges ();
}
else
{
throw new Exception ("Can't delete" + strVirdir + ", because it isn't exists.");
}
}
// Batch update
public void UpdateBatch ()
{
BatchUpdate (_virdirs);
}
// Reload one :-)
public void UpdateBatch (VirtualDirectories vds)
{
BatchUpdate (vds);
}
/// <summary>
/// Private method
/// </ summary>
//connect to the server
private void ConnectToServer ()
{
string strPath = "IIS: //" + _server + "/ W3SVC /" + _website + "/ ROOT";
try
{
this.rootfolder = new DirectoryEntry (strPath);
_virdirs = GetVirDirs (this.rootfolder.Children);
}
catch (Exception e)
{
throw new Exception ("Can't connect to the server [" + _server + "] ...", e);
}
}
// Perform batch update
private void BatchUpdate (VirtualDirectories vds)
{
_batchflag = true;
foreach (object item in vds.Values)
{
VirtualDirectory vd = (VirtualDirectory) item;
switch (vd.flag)
{
case 0:
break;
case 1:
Create (vd);
break;
case 2:
Update (vd);
break;
}
}
_batchflag = false;
}
// Update stuff
private void UpdateDirInfo (DirectoryEntry de, VirtualDirectory vd)
{
de.Properties ["AnonymousUserName"] [0] = vd.AnonymousUserName;
de.Properties ["AnonymousUserPass"] [0] = vd.AnonymousUserPass;
de.Properties ["AccessRead"] [0] = vd.AccessRead;
de.Properties ["AccessExecute"] [0] = vd.AccessExecute;
de.Properties ["AccessWrite"] [0] = vd.AccessWrite;
de.Properties ["AuthBasic"] [0] = vd.AuthBasic;
de.Properties ["AuthNTLM"] [0] = vd.AuthNTLM;
de.Properties ["ContentIndexed"] [0] = vd.ContentIndexed;
de.Properties ["EnableDefaultDoc"] [0] = vd.EnableDefaultDoc;
de.Properties ["EnableDirBrowsing"] [0] = vd.EnableDirBrowsing;
de.Properties ["AccessSSL"] [0] = vd.AccessSSL;
de.Properties ["AccessScript"] [0] = vd.AccessScript;
de.Properties ["DefaultDoc"] [0] = vd.DefaultDoc;
de.Properties ["Path"] [0] = vd.Path;
de.CommitChanges ();
}
// Get virtual directory collection
private VirtualDirectories GetVirDirs (DirectoryEntries des)
{
VirtualDirectories tmpdirs = new VirtualDirectories ();
foreach (DirectoryEntry de in des)
{
if (de.SchemaClassName == "IIsWebVirtualDir")
{
VirtualDirectory vd = new VirtualDirectory ();
vd.Name = de.Name;
vd.AccessRead = (bool) de.Properties ["AccessRead"] [0];
vd.AccessExecute = (bool) de.Properties ["AccessExecute"] [0];
vd.AccessWrite = (bool) de.Properties ["AccessWrite"] [0];
vd.AnonymousUserName = (string) de.Properties ["AnonymousUserName"] [0];
vd.AnonymousUserPass = (string) de.Properties ["AnonymousUserName"] [0];
vd.AuthBasic = (bool) de.Properties ["AuthBasic"] [0];
vd.AuthNTLM = (bool) de.Properties ["AuthNTLM"] [0];
vd.ContentIndexed = (bool) de.Properties ["ContentIndexed"] [0];
vd.EnableDefaultDoc = (bool) de.Properties ["EnableDefaultDoc"] [0];
vd.EnableDirBrowsing = (bool) de.Properties ["EnableDirBrowsing"] [0];
vd.AccessSSL = (bool) de.Properties ["AccessSSL"] [0];
vd.AccessScript = (bool) de.Properties ["AccessScript"] [0];
vd.Path = (string) de.Properties ["Path"] [0];
vd.flag = 0;
vd.DefaultDoc = (string) de.Properties ["DefaultDoc"] [0];
tmpdirs.Add (vd.Name, vd);
}
}
return tmpdirs;
}
}
/// <summary>
/// VirtualDirectory class
/// </ summary>
public class VirtualDirectory
{
private bool _read, _execute, _script, _ssl, _write, _authbasic, _authntlm, _indexed, _endirbrow, _endefaultdoc;
private string _ausername, _auserpass, _name, _path;
private int _flag;
private string _defaultdoc;
/// <summary>
/// Constructor
/// </ summary>
public VirtualDirectory ()
{
SetValue ();
}
public VirtualDirectory (string strVirDirName)
{
_name = strVirDirName;
SetValue ();
}
private void SetValue ()
{
_read = true; _execute = false; _script = false; _ssl = false; _write = false; _authbasic = false; _authntlm = false;
_indexed = false; _endirbrow = false; _endefaultdoc = false;
_flag = 1;
_defaultdoc = "default.htm, default.aspx, default.asp, index.htm";
_path = "C:\\";
_ausername = ""; _auserpass = ""; _ name = "";
}
/// <summary>
/// Define attributes, IISVirtualDir too many attributes
/// I only made some of the more important ones, other guys need to add it.
/// </ summary>
public int flag
{
get {return _flag;}
set {_flag = value;}
}
public bool AccessRead
{
get {return _read;}
set {_read = value;}
}
public bool AccessWrite
{
get {return _write;}
set {_write = value;}
}
public bool AccessExecute
{
get {return _execute;}
set {_execute = value;}
}
public bool AccessSSL
{
get {return _ssl;}
set {_ssl = value;}
}
public bool AccessScript
{
get {return _script;}
set {_script = value;}
}
public bool AuthBasic
{
get {return _authbasic;}
set {_authbasic = value;}
}
public bool AuthNTLM
{
get {return _authntlm;}
set {_authntlm = value;}
}
public bool ContentIndexed
{
get {return _indexed;}
set {_indexed = value;}
}
public bool EnableDirBrowsing
{
get {return _endirbrow;}
set {_endirbrow = value;}
}
public bool EnableDefaultDoc
{
get {return _endefaultdoc;}
set {_endefaultdoc = value;}
}
public string Name
{
get {return _name;}
set {_name = value;}
}
public string Path
{
get {return _path;}
set {_path = value;}
}
public string DefaultDoc
{
get {return _defaultdoc;}
set {_defaultdoc = value;}
}
public string AnonymousUserName
{
get {return _ausername;}
set {_ausername = value;}
}
public string AnonymousUserPass
{
get {return _auserpass;}
set {_auserpass = value;}
}
}
/// <summary>
/// Collection of VirtualDirectories
/// </ summary>
public class VirtualDirectories: System.Collections.Hashtable
{
public VirtualDirectories ()
{
}
// Add new method
public VirtualDirectory Find (string strName)
{
return (VirtualDirectory) this [strName];
}
}
} |
|