<%@ 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 %>