%@ EnableSessionState=False %>
<%
Option Explicit
On Error Resume Next
%>
<%
Const pluginRepositaryPrefix = "pluginRepository"
Const defaultConfigPrefix = "defaultPluginConfig"
Const configPrefix = "siteconfig"
Const configFilePrefix = "deployment_"
Const GMTdiff = #00:00:00#
Const ForReading = 1, ForWriting = 2, ForAppending = 3
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Function scrubData(str)
Dim SecuredString
'replace chars
SecuredString=replace(str,"<","")
SecuredString=replace(SecuredString,">","")
SecuredString=replace(SecuredString,"'","")
SecuredString=replace(SecuredString,"""","")
SecuredString=replace(SecuredString,"(","")
SecuredString=replace(SecuredString,")","")
SecuredString=replace(SecuredString,"--","")
'return the new clean str
scrubData=SecuredString
End Function 'scrubData(str)
Dim site
site=scrubData(Request.QueryString("site"))
'site = Request.QueryString("site")
Dim d_id
d_id=scrubData(Request.QueryString("d_id"))
'd_id = Request.QueryString("d_id")
Dim clearCount
clearCount = scrubData(Request.QueryString("clear").Count)
'clearCount = Request.QueryString("clear").Count
Dim defaultPlugins
defaultPlugins = scrubData(Request.QueryString("default"))
'defaultPlugins = Request.QueryString("default")
'check if we have a redirection cookie for this site
if(Request.Cookies("HumanClickRedirect")<>"") then
if(Request.Cookies("HumanClickRedirectOrgSite")=cstr(site)) then
if(Request.Cookies("HumanClickRedirectDestSite")<>"") then
site = scrubData(Request.Cookies("HumanClickRedirectDestSite"))
'site = Request.Cookies("HumanClickRedirectDestSite")
end if
end if
end if
'Response.Write "//Plugins for site " & site & VbCrLf
Function getLastModifiedTime(site,d_id)
Dim pluginBasePath 'the location where the plugins are
Dim siteConfigPath 'the location of site configurations
Dim fs, folder, item
Dim lastModified
pluginBasePath = pluginRepositaryPrefix & "/"
'Response.Write pluginBasePath & " " & Server.MapPath(pluginBasePath) & "
"
set fs = CreateObject("Scripting.FileSystemObject")
set folder = fs.GetFolder(Server.MapPath(pluginBasePath) & "\")
for each item in folder.Files
if item.DateLastModified > lastModified Then
lastModified = item.DateLastModified
End If
'Response.Write(item.Name & " " & item.DateLastModified & "
")
next
siteConfigPath = configPrefix & "/" & site
'Response.Write("
"& siteConfigPath &"
")
set folder = fs.GetFolder(Server.MapPath(siteConfigPath) & "\")
for each item in folder.Files
if item.DateLastModified > lastModified Then
lastModified = item.DateLastModified
End If
'Response.Write(item.Name & " " & item.DateLastModified & "
")
next
getLastModifiedTime=lastModified
'Response.Write(lastModified & "
")
End Function 'getLastModifiedTime
Function getLastModifiedTimeBasic()
Dim pluginName
Dim file, FSO
Dim pluginFile, pluginFileName
pluginName = "lpEMTinit"
pluginFileName = pluginRepositaryPrefix & "/" & pluginName & ".js"
pluginFile = Server.MapPath(pluginFileName)
set FSO = server.createObject("Scripting.FileSystemObject")
If FSO.FileExists(pluginFile) = True Then
'Response.Write "Plugin File exists:" & pluginFile & "
"
Else
'Response.Write "Plugin File DOES NOT exists:" & pluginFile & "
"
getLastModifiedTimeBasic = Date()
Exit Function
End If
set file = FSO.GetFile(pluginFile)
getLastModifiedTimeBasic = file.DateLastModified
End Function 'getLastModifiedTimeBasic()
Function getSiteDeployment(site, d_id)
Dim siteConfigFile, siteConfigFileJS
Dim file, TextStream, FSO,siteConfigFileJSPath
Dim firstPlugin
Dim config
'plugins declared in query string but not inside of plugin config file
Dim unspecifiedDefaultPlugins
Dim unspecifiedDefaultPluginsCount
unspecifiedDefaultPlugins = Array()
Redim unspecifiedDefaultPlugins(Request.QueryString("default").Count)
firstPlugin = true
config = ""
unspecifiedDefaultPluginsCount = 0
config = config & getPluginContents("lpEMTinit", "", false)
config = config & getPluginContents("getLPVarValue", "", false)
config = config & getPluginContents("checkMobile", "", false)
siteConfigFileJS = configPrefix & "/" & site & "/" & configFilePrefix & d_id & ".js"
'Response.Write("["&siteConfigFileJS & "]")
config = config & getPluginContents(siteConfigFileJS, "", true)
siteConfigFileJSPath = Server.MapPath(siteConfigFileJS)
set FSO = server.createObject("Scripting.FileSystemObject")
'if no deployment-specific file, we're done
If FSO.FileExists(siteConfigFileJSPath) = false Then
getSiteDeployment = config & getDefaultDeployment()
exit function
End If
if(FSO.FileExists(siteConfigFileJSPath) = false) then
getSiteDeployment = config & getDefaultDeployment()
exit function
end if
set file = FSO.GetFile(siteConfigFileJSPath)
Set TextStream = file.OpenAsTextStream(ForReading, TristateUseDefault)
' Read the file line by line, find the plugins list
Do While Not TextStream.AtEndOfStream
Dim Line, i, j
Dim tmpArr, tmpArr1, tmpArr2
Dim plugin, ver
Dim defaultPlugin, item
ver = ""
Line = TextStream.readline
if (InStr(1,Line, "//PLUGINS_LIST",1)=1) then
'extract the list of plugins
tmpArr = split(Line, "=")
if (not isArray(tmpArr)) then exit do
'extract each plugin
tmpArr1 = Split(tmpArr(1), ",")
if (not isArray(tmpArr1)) then exit do
'go through list of default plugins
For i=1 to Request.QueryString("default").Count
Dim foundPlugin
foundPlugin = false
defaultPlugin = scrubData(Request.QueryString("default")(i))
'defaultPlugin = Request.QueryString("default")(i)
for j=0 to UBound(tmpArr1)
tmpArr2 = split(tmpArr1(j),"#")
plugin = tmpArr2(0)
if (defaultPlugin = plugin) Then
foundPlugin = true
End If
next
if (not foundPlugin) Then
unspecifiedDefaultPlugins(unspecifiedDefaultPluginsCount) = defaultPlugin
unspecifiedDefaultPluginsCount = unspecifiedDefaultPluginsCount + 1
End If
Next
Redim Preserve unspecifiedDefaultPlugins(unspecifiedDefaultPluginsCount)
'add default plugins that were not specified in simpleDeploy.js
for i=0 to UBound(unspecifiedDefaultPlugins)
if firstPlugin Then
firstPlugin = false
'add base plugin
if clearCount > 0 Then
config = config & getPluginContents("lpBasePlugin.clear", "", false)
Else
config = config & getPluginContents("lpBasePlugin", "", false)
End If
End If
defaultPlugin = unspecifiedDefaultPlugins(i)
'config = config & "// Adding default plugin" & defaultPlugin
config = getDefaultPluginConfig(defaultPlugin,"",false) & config & getDefaultPluginContents(defaultPlugin,"",false)
next
'for each plugin
for i=0 To UBound(tmpArr1)
tmpArr2 = split(tmpArr1(i), "#")
plugin = tmpArr2(0)
if uBound(tmpArr2) > 0 Then
ver = tmpArr2(1)
End If
if firstPlugin Then
firstPlugin = false
'add base plugin
if clearCount > 0 Then
config = config & getPluginContents("lpBasePlugin.clear", "", false)
Else
config = config & getPluginContents("lpBasePlugin", "", false)
End If
End If
config = config & getPluginContents(plugin, ver, false)
next
'we're done
exit do
end if
Loop
if firstPlugin=false Then
if clearCount > 0 Then
config = config & getPluginContents("lpPluginSystem2.clear", "", false)
Else
config = config & getPluginContents("lpPluginSystem2", "", false)
End If
End If
getSiteDeployment = config
End Function 'getSiteDeployment
Function getDefaultDeployment()
Dim firstPlugin, defaultPlugin
Dim config
Dim i
firstPlugin = true
config = ""
if firstPlugin Then
for i=1 to Request.QueryString("default").Count
if firstPlugin Then
firstPlugin = false
'add base plugin
if clearCount > 0 Then
config = config & getPluginContents("lpBasePlugin.clear", "", false)
Else
config = config & getPluginContents("lpBasePlugin", "", false)
End If
End If
defaultPlugin = scrubData(Request.QueryString("default")(i))
'defaultPlugin = Request.QueryString("default")(i)
config = getDefaultPluginConfig(defaultPlugin,"",false) & config & getDefaultPluginContents(defaultPlugin,"",false)
next
End If
if firstPlugin=false Then
if clearCount > 0 Then
config = config & getPluginContents("lpPluginSystem2.clear", "", false)
Else
config = config & getPluginContents("lpPluginSystem2", "", false)
End If
End If
getDefaultDeployment = config
End Function 'getDefaultDeployment
Function getDefaultPluginConfig(pluginName, version, fullName)
Dim str
Dim file, TextStream, FSO
Dim pluginConfigFile, pluginConfigFileName
str = ""
If fullName = true Then
pluginConfigFileName = pluginName
Else
if version <> "" Then
pluginConfigFileName = defaultConfigPrefix & "/" & pluginName & "_" & version & ".js"
Else
pluginConfigFileName = defaultConfigPrefix & "/" & pluginName & ".js"
End If
End If
pluginConfigFile = Server.MapPath(pluginConfigFileName)
set FSO = server.createObject("Scripting.FileSystemObject")
if FSO.FileExists(pluginConfigFile) = True Then
'Response.Write "Default Config Plugin File exists:" & pluginConfigFile & "
"
Else
Exit Function
End If
set file = FSO.GetFile(pluginConfigFile)
Set TextStream = file.OpenAsTextStream(ForReading,TristateUseDefault)
Do While Not TextStream.AtEndOfStream
Dim Line
Line = TextStream.readLine
str = str & Line & vbCrLf
Loop
getDefaultPluginConfig = str
End Function 'getDefaultPluginConfig
Function getDefaultPluginContents(pluginName, version, fullName)
getDefaultPluginContents = getPluginContents(pluginName,version,fullName)
End Function 'getDefaultPluginContents
Function getPluginContents(pluginName, version, fullName)
Dim str
Dim file, TextStream, FSO
Dim pluginFile, pluginFileName
str = ""
if fullName = true Then
pluginFileName = pluginName
Else
if version <> "" Then
pluginFileName = pluginRepositaryPrefix & "/" & pluginName & "_" & version & ".js"
Else
pluginFileName = pluginRepositaryPrefix & "/" & pluginName & ".js"
End If
End If
'Response.Write pluginName & " ver=" & version & "[" & pluginFileName & "]
"
pluginFile = Server.MapPath(pluginFileName)
set FSO = server.createObject("Scripting.FileSystemObject")
If FSO.FileExists(pluginFile) = True Then
'Response.Write "Plugin File exists:" & pluginFile & "
"
Else
'Response.Write "Plugin File DOES NOT exists:" & pluginFile & "
"
Exit Function
End If
set file = FSO.GetFile(pluginFile)
Set TextStream = file.OpenAsTextStream(ForReading, TristateUseDefault)
'Read the file line by line
Do While Not TextStream.AtEndOfStream
Dim Line
Line = TextStream.readline
str = str & Line & vbCrLf
Loop
getPluginContents = str
End Function 'getPluginContents
'Converts date (19991022 11:08:38)
'to http form (Fri, 22 Oct 1999 12:08:38 GMT)
Function DateToHTTPDate(p_date)
Dim UseDate
UseDate = p_Date + GMTdiff
DateToHTTPDate = EnglishWeekDayName(UseDate) & _
", " & Right("0" & Day(UseDate),2) & " " & EnglishMonthName(UseDate) & _
" " & Year(UseDate) & " " & Right("0" & Hour(UseDate),2) & _
":" & Right("0" & Minute(UseDate),2) & ":" & Right("0" & Second(UseDate),2) & " GMT"
End Function
Private Function DateFromHTTP(HTTPDate)
Dim strWeekday, strDay, strMonth
Dim strYear, strHour, strMinute, strSecond
Dim Out
Dim strHDate
'On Error Resume Next
strHDate = Trim(LCase(HTTPDate)) ' case independant
If right("---" & strHDate ,3) = "gmt" Then
' split into parts, assume correct build (otherwise error)
strWeekday = Mid(strHDate, 1, 3)
strDay = Mid(strHDate, 6, 2)
strMonth = Mid(strHDate, 9, 3)
strYear = Mid(strHDate, 13, 4)
strHour = Mid(strHDate, 18, 2)
strMinute = Mid(strHDate, 21, 2)
strSecond = Mid(strHDate, 24, 2)
' try to build a date
err.Clear
Out = DateSerial(strYear, MonthFromString(strMonth), strDay) + _
TimeSerial(strHour, strMinute, strSecond) + GMTDiff
If err <> 0 then
Out = DateSerial(1970,1,1) ' = error, components invalid
End If
Else
Out = DateSerial(1971,1,1) ' = error, date/time doesn't end with 'gmt'
End If
DateFromHTTP = Out
End Function
Function MonthFromString(strMonth)
Dim intMonthNr
Select Case strMonth ' assume lower case
Case "jan" : intMonthNr = 1
Case "feb" : intMonthNr = 2
Case "mar" : intMonthNr = 3
Case "apr" : intMonthNr = 4
Case "may" : intMonthNr = 5
Case "jun" : intMonthNr = 6
Case "jul" : intMonthNr = 7
Case "aug" : intMonthNr = 8
Case "sep" : intMonthNr = 9
Case "oct" : intMonthNr = 10
Case "nov" : intMonthNr = 11
Case "dec" : intMonthNr = 12
End Select
MonthFromString = intMonthNr
End Function
Private Function EnglishWeekDayName(p_Date)
Dim strWeekday
Select Case Weekday(p_Date, 1)
Case 1 : strWeekday = "Sun"
Case 2 : strWeekday = "Mon"
Case 3 : strWeekday = "Tue"
Case 4 : strWeekday = "Wed"
Case 5 : strWeekday = "Thu"
Case 6 : strWeekday = "Fri"
Case 7 : strWeekday = "Sat"
End Select
EnglishWeekDayName = strWeekday
End Function
Private Function EnglishMonthName(dt)
Dim strMonthName
Select Case Month(dt)
Case 1 : strMonthName = "Jan"
Case 2 : strMonthName = "Feb"
Case 3 : strMonthName = "Mar"
Case 4 : strMonthName = "Apr"
Case 5 : strMonthName = "May"
Case 6 : strMonthName = "Jun"
Case 7 : strMonthName = "Jul"
Case 8 : strMonthName = "Aug"
Case 9 : strMonthName = "Sep"
Case 10 : strMonthName = "Oct"
Case 11 : strMonthName = "Nov"
Case 12 : strMonthName = "Dec"
End Select
EnglishMonthName = strMonthName
End Function
Sub OutputBasicTag()
Dim dt, httpdt
Dim reqModDate, resModHttpDate
reqModHttpDate = Request.ServerVariables("HTTP_" & "If-Modified-Since")
reqModDate=DateFromHTTP(reqModHttpDate)
dt = getLastModifiedTimeBasic()
httpdt = DateToHTTPDate(dt)
if dt > reqModDate Then
Response.CacheControl = "public, max-age=3600, s-maxage=3600"
Response.ContentType = "application/x-javascript"
'Response.AddHeader "max-age", "1800"
Response.AddHeader "Last-Modified", httpdt
'Response.AddHeader "Content-type","application/x-javascript"
Response.Write getPluginContents("lpEMTinit", "", false) & getPluginContents("getLPVarValue", "", false) & getPluginContents("checkMobile", "", false) & getDefaultDeployment()
Else
Response.Clear()
Response.Status = "304 Not Modified"
Response.End()
End If
End Sub
' ///////////////////////////////////////////////////////////
' ///////////////////////////////////////////////////////////
' ///////////////////////////////////////////////////////////
' ///////////////////////////////////////////////////////////
Dim cfg,fs
Dim dt, httpdt
Dim reqModDate, reqModHttpDate
'check if we have a config folder. If not, just send mtag command
set fs = CreateObject("Scripting.FileSystemObject")
if(not fs.FolderExists(Server.MapPath(configPrefix & "/" & site))) then
call OutputBasicTag() 'return basic tag and exit
else
if(not fs.FileExists(Server.MapPath(configPrefix & "/" & site & "/" & configFilePrefix & d_id & ".js"))) then
call OutputBasicTag() 'return basic tag and exit
else
reqModHttpDate = Request.ServerVariables("HTTP_" & "If-Modified-Since")
reqModDate=DateFromHTTP(reqModHttpDate)
dt=getLastModifiedTime(site,d_id)
httpdt = DateToHTTPDate(dt)
if dt > reqModDate Then
Response.ContentType = "application/x-javascript"
Response.CacheControl = "public, max-age=3600, s-maxage=3600"
'Response.AddHeader "Cache-control","public"
'Response.AddHeader "max-age", "1800"
Response.AddHeader "Last-Modified", httpdt
cfg = getSiteDeployment(site, d_id)
Response.Write cfg
Else
Response.Clear()
Response.Status = "304 Not Modified"
Response.End()
End If
end if
end if
%>