Skip to content

Instantly share code, notes, and snippets.

@shalakolee
Created April 25, 2017 23:17
Show Gist options
  • Save shalakolee/038fbd5b0de0c0ac370c66c3541653b0 to your computer and use it in GitHub Desktop.
Save shalakolee/038fbd5b0de0c0ac370c66c3541653b0 to your computer and use it in GitHub Desktop.
Classic ASP Directory Browser
<%@ Language=VBScript %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<%
' ***** Which Folder to Share?
' ********** ********** **********
sDirectory = "/foldertoshare/"
' ********** ********** **********
AllowExt = "all"
'AllowExt = "all"
' DenyExt overrides AllowExt
DenyExt = "asp, db, lnk"
' Top navigation separator
Const sChevron = "&gt;" ' "/"
' Always display the navigation path?
Const bShowPath = True 'False
' Always display the root directory?
Const bShowRoot = False 'True
' Page font tag
Const sFont = "<font face=""Verdana, Arial, Helvetica"" size=""2"">"
' Column header font tag
Const sColFont = "<font face=""Verdana, Arial, Helvetica"" size=""2"" COLOR=""#FFFFFF"">"
' Column header color
Const TblHeader = "#BFBFBF" 'Grey
' Directory grid alternating colors
Const FileRow1 = "#b6cbeb" 'Dark Blue
Const FileRow2 = "#cadfff" 'Light Blue
Const FolderRow1 = "#EE933B" 'dark red
Const FolderRow2 = "#C78F57" 'Light light
' Some nice color pairs
'#91619b 'Dark Purple
'#be9cc5 'Light Purple
'#b6cbeb 'Dark Blue
'#cadfff 'Light Blue
'#879966 'Dark Green
'#c5e095 'Light Green
'#a7342a 'Dark Red
'#df867f 'Light Red
'#f8bc03 'Dark Yellow
'#f8e094 'Light Yellow
' ***** Begin Script
Dim sError
On Error Resume Next
sDirectory = trim(sDirectory)
If right(sDirectory,1) <> "/" Then sDirectory = sDirectory & "/"
' ***** Get subfolder from passed querystring
sDir = sDirectory & Request.querystring("dir")
sDir = trim(sDir)
If right(sDir,1) <> "/" Then sDir = sDir & "/"
' ***** Important! Make sure the subfolder path is in the shared folder. This keeps
' users from browsing directories outside of the shared. ie: dir=../
' You may want to include some logging code if this happens, here we just
' put the user back into the default directory.
sFolder = Server.MapPath( sDir )
sDirFolder = Server.MapPath( sDirectory )
sSubFolder = right(sDir,len(sDir)-len(sDirectory))
If instr( sFolder , sDirFolder ) = 0 Then
sFolder = sDirFolder
sSubFolder = ""
sError = sError & " Path not authorized;"
End If
' ***** Load the file system and navigate to our shared folder.
Set objFileObject = Server.CreateObject("Scripting.FileSystemObject")
Set objFolder = objFileObject.GetFolder( sFolder )
' ***** Oops, missing or misspelled folder path.
If IsEmpty( objFolder ) Then
sFolder = sDirFolder
sSubFolder = ""
sDir = sDirectory
Set objFolder = objFileObject.GetFolder( sFolder )
sError = sError & " Folder not found;"
End If
%>
<HTML><BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#000000" VLINK="#000000" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0">
<TABLE BORDER=0 align="center" CELLPADDING=0 CELLSPACING=1 bgcolor="#f0f0f0" width="100%">
<% ' ***** Feel free to edit the above table tag
' ***** Build path navigation
aNames = Split( sSubFolder , "/")
If bShowPath Then
If UBound( aNames ) > 0 Or bShowRoot Then %>
<TR BGCOLOR="#ffffff">
<TD><%= sFont %>&nbsp;</font></TD>
<TD COLSPAN="4"><%= sFont %>
<B>&nbsp; <A HREF="<%= Request.ServerVariables("SCRIPT_NAME") %>"><%= Left(sDirectory,len(sDirectory)-1) %></A></B>
<% End If
For count = 0 to UBound( aNames ) -1
aURL = aURL & aNames(count) & "/"
%>&nbsp;<%= sChevron %>&nbsp;<B><A HREF="<%= Request.ServerVariables("SCRIPT_NAME") %>?dir=<%= Server.URLEncode( aURL ) %>"><%= aNames(count) %></A></B><%
Next %></font></TD></TR><%
End If
For count = 0 to UBound( aNames ) -2
aDirUp = aDirUp & aNames(count) & "/"
Next %>
<TR BGCOLOR="<%= TblHeader %>">
<TD BGCOLOR="#ffffff"><A HREF="<%= Request.ServerVariables("SCRIPT_NAME") %>?dir=<%= Server.URLEncode( aDirUp ) %>"><font face="Wingdings" COLOR="<%= TblHeader %>">Ç</font></a></TD>
<TD><%= sColFont %>&nbsp; <B>Directory / Filename:</B> &nbsp;</FONT></TD>
<TD><%= sColFont %>&nbsp; <B>Size:</B> &nbsp;</FONT></TD>
<%
' ***** Iterate through the subfolders in our shared folder.
For Each objFile In objFolder.SubFolders
' ***** Alternate between these two row colors.
If iAlternate = 0 Then
response.write "<TR BGCOLOR=""" & FolderRow1 & """>"
iAlternate = 1
Else
response.write "<TR BGCOLOR=""" & FolderRow2 & """>"
iAlternate = 0
End If
' ***** Display folder with link to navigate
%> <TD align="center" BGCOLOR="<%= TblHeader %>"><font face="Wingdings" COLOR="#ffffff">0</font></TD>
<TD><%= sFont %>&nbsp; <A HREF="<%= Request.ServerVariables("SCRIPT_NAME") %>?dir=<%= Server.URLEncode( sSubFolder & objFile.Name )%>"><%= objFile.Name %></A> &nbsp;</font></TD>
<TD align="right"><%= sFont %>&nbsp; <%= ByteConversion( objFile.Size ) %> &nbsp;</font></TD>
</TR>
<%
' ***** Next Folder
NEXT
' ***** Iterate through the files in our shared folder / subfolder.
For Each objFile In objFolder.Files
sFileName = objFile.name
' ***** Only continue if it's a valid extension
If ( IsValidFile (sFileName) ) Then
' ***** Alternate between these two row colors.
' We'll use the same counter variable to continue alternating between
' the light / dark shade according to the previous folder row color.
If iAlternate = 0 Then
response.write "<TR BGCOLOR=""" & FileRow1 & """>"
iAlternate = 1
Else
response.write "<TR BGCOLOR=""" & FileRow2 & """>"
iAlternate = 0
End If
' ***** Display file with link to execute / dowload.
%> <TD align="center" BGCOLOR="<%= TblHeader %>"><font face="Wingdings" COLOR="#ffffff"><</font></TD>
<TD><%= sFont %>&nbsp; <A HREF="<%= sDir %><%= sFileName %>"><%= sFileName %></A> &nbsp;</font></TD>
<TD ALIGN=RIGHT><%= sFont %>&nbsp; <%= ByteConversion( objFile.Size ) %> &nbsp;</font></TD>
</TR><%
End If
' ***** Next File
NEXT
' ***** Clean up those nasty memory leaks
Set objFileObject = nothing
Set objFolder = nothing
' ***** Iterate through and approve extensions
Function IsValidFile(FileName)
If Not AllowExt <> "" or LCase( AllowExt ) = "all" Then
IsValidFile = True
Else
aAllowExt = Split( AllowExt & "," , ",")
IsValidFile = False
For iCnt = 0 to UBound( aAllowExt ) -1
If right( FileName , len( FileName ) - InStrRev( FileName , "." ) ) = Trim(aAllowExt( iCnt )) Then IsValidFile = True
Next
End If
If DenyExt <> "" Then
aDenyExt = Split( DenyExt & "," , ",")
For iCnt = 0 to UBound( aDenyExt ) -1
If right( FileName , len( FileName ) - InStrRev( FileName , "." ) ) = Trim(aDenyExt( iCnt )) Then IsValidFile = False
Next
End If
End Function
' ***** Display friendly byte size
Function ByteConversion(NumberOfBytes)
If NumberOfBytes < 1024 Then
sDisplayBytes = NumberOfBytes & " Bytes"
End If
If NumberOfBytes >= 1024 Then
sDisplayBytes = FormatNumber( NumberOfBytes / 1024, 2) & " KB"
End If
If NumberOfBytes > 1048576 Then
sDisplayBytes = FormatNumber( NumberOfBytes / 1048576, 2) & " MB"
End If
Response.Write sDisplayBytes
End Function
' ***** Did we encounter an Error?
If Err <> 0 or sError <> "" Then
response.write "<TR><TD bgcolor=""#ffffff"" colspan=""5""><font face=""Verdana, Arial, Helvetica"" color=""red"" size=""1"">ERROR: " & sError & space(1) & "ASP: " & Err.description & ";</font></TD></TR>"
End If
%>
<TR>
<TD align="right" bgcolor="#ffffff" colspan="5"><font face="Verdana, Arial, Helvetica" color="#BFBFBF" size="1">© 2003 shal187.wareZ</font></a></TD>
</TR>
</TABLE>
<script type="text/javascript">
<!--
document.write('<img src="/cgi-bin/axs/ax.pl?trans.gif&ref=');
document.write(document.referrer);
document.write('" height="1" width="1" alt="" />');
// -->
</script><noscript>
<img src="/cgi-bin/axs/ax.pl?trans.gif" height="1" width="1" alt="" />
</noscript>
</BODY></HTML>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment