how to get cordova filetransfer parameters - asp.net

am using an asp.net website to receive files from a mobile device using Cordova 3.2.0 FileTransfer.upload command.
This can take parameters which are added to the options(see doco)....so how do I get the parameters?
Tried using:
Dim params As NameValueCollection = HttpContext.Current.Request.Params
UtilityManager.Log_Add("params count: " & params.Count)
For Each key As String In params.AllKeys
stmp = params.GetValues(key)
For x As Integer = 0 To stmp.Length - 1
UtilityManager.Log_Add("Key:" & key & " has value: " & stmp(x) & " at position: " & x)
Next
Next
but get none of my parameters, just the usual request parameters.
Tried the same thing on the Headers but the hosting site is using IIS6 and not in pieline mode so getting an error.
Originally tried WCF but for some reason it didn't like multi-part forms so I kept getting a File Not Found error in phonegap and it wouldn't even enter the function on the server. Could access the server function using Chrome Poster so don't know what is happening there.
Tested it on a aspx page and that worked so added an asmx service to do the work and it seems to be working fine with regards the file and options (except for the arguments). Maybe I should just put them through as querystrings (bad practice).
Trawled the web for a day to get the answer but it doesn't seem to be any out there....any suggestions?

Related

DotNetNuke - First request returns 404

I am having an issue with DotNetNuke platform that I cannot understand for the life of me... Google and SO searches have been no help.
The very first time any user tries to hit the site, regardless of the URL they are requesting, they are redirected to the URL below, and given the 404 error shown below. After that initial 404, if the user requests that exact same URL, everything works perfectly for that user going forward. They are redirected to the correct login page and everything works correctly from that point forward.
Does anyone know why this would only happen on the very first request to the site for each user? I have a Development, Test and Production environments set up, and the issue is consistent across all environments.
Requested URL: http://intranet.domain.com/page
Redirected URL: http://intranet.domain.com/Login.aspx?ReturnUrl=/DesktopModules/AuthenticationServices/ActiveDirectory/WindowsSignin.aspx
Server Error in '/' Application.
The resource cannot be found. Description: HTTP 404. The resource you are looking for (or one of its
dependencies) could have been removed, had its name changed, or is
temporarily unavailable. Please review the following URL and make
sure that it is spelled correctly.
Requested URL: /Login.aspx
IIS: v7
DNN: v7.02.01
Default DNN authentication is disabled and Active Directory Authentication module is enabled. (v5.0.6)
Please let me know if there is any other configuration information I can provide.
This is not a full solution however it should help shed some light on the situation. I experienced the same issue. I would go to the website and it would redirect me to
WebsiteLinkHere/DesktopModules/AuthenticationServices/ActiveDirectory/WindowsSignin.aspx
On removal of the
DesktopModules/AuthenticationServices/ActiveDirectory/WindowsSignin.aspx
it would take me to my homepage and everything acted as expected from there on out. I grabbed the latest sourcecode from github for this module and started debugging. I traced the error down to the DNNUserController.ValidateUser() function. This seems to be returning nothing which then causes the page to error out. I decided to add a bandaid fix for the time being which may help others.
Within the WindowsSignin.aspx.vb file I added a try catch around
objAuthentication.AuthenticationLogon()
Within the catch statement I added the code that is used to redirect you after a successful authentication to the page you came from.
Try
objAuthentication.AuthenticationLogon()
Catch
Dim querystringparams As String = "logon=" & DateTime.Now.Ticks.ToString()
Dim strUrl As String = DotNetNuke.Common.NavigateURL(DotNetNuke.Entities.Portals.PortalSettings.Current.ActiveTab.TabID, String.Empty, querystringparams)
If Not HttpContext.Current.Request.Cookies("DNNReturnTo") Is Nothing _
Then
querystringparams =
HttpContext.Current.Request.Cookies("DNNReturnTo").Value
'ACD-8445
If querystringparams <> String.Empty Then querystringparams = querystringparams.ToLower
If querystringparams <> String.Empty And querystringparams.IndexOf("windowssignin.aspx") < 0 Then _
strUrl = querystringparams
End If
HttpContext.Current.Response.Redirect(strUrl, True)
End Try
This is not an elegant solution however it does escape the issue of the user's initial visit to the site being an error screen. Everything else seems to work as expected after the initial visit.
I finally found the answer over two years later...
The problem was solved by commenting out "add name="Authentication" ..." line in web.config. This disabled autologin feature completely.
http://www.dnnsoftware.com/forums/threadid/459907/scope/posts/site-redirecting-to-desktopmodules-authenticationservices-activedirectory-windowssigninaspx

IIS7 ASP-Classic Parameters Lost

I have an ASP-Classic website, which uses a VBScript called ASPXTOASP.ASP to convert .Net request parameters into Classic request parameters after authentication. Authentication takes place using login.aspx, which uses Active Directory to check that the user logged into Windows has permission to view the website. Login.aspx finishes, dumping the user onto ASPXTOASP.ASP, which immediately crashes because the parameters it needs to iterate through have disappeared. When I write the query string at the top of the page it is blank. The login.aspx would redirect me to a different page if it failed. This leads me to believe that somehow, between those two programs, IIS/ASP is dumping my parameters. What's weird is that production works. This problem has only cropped up on the dev box and only for this particular application which works over HTTPS. We have an application that uses the same authentication method on HTTP and it still works.
Things I have checked:
Application pool is the same on prod and dev
Browser dev console shows the request submitting the proper parameters
Certificate appears correct. Browser gives no certificate error
This is the contents of the ASPXTOASP.ASP program which is crashing:
<%
'Response.Write "Query String: " & Request.QueryString
'Response.End
for i=1 to Request.Form.Count
Session(Request.Form.Key(i))=Request.Form(i)
'Response.write( i & ": " & Request.Form.Key(i) & ": " & Request.Form(i) & "<BR>")
next
'Response.End
Server.Transfer(Session("DestPage"))
%>

Request.Form between HTTP and HTTPS pages in ASP.NET

I have a strange situation and google isn't helping me out. I have an admin site which is in simple HTTP who posts data to a different site running under HTTPS. The HTTP admin site (which I don't have direct access to) is sending the info via basic POST, and I'm trying to capture the Request.Form values in the HTTPS site. It works perfectly well in dev, due to the fact that the receiving site isn't running under SSL, but in prod, I have the Request.Form as empty. Someone could enlighten me? The basic HTTPS request code is below:
Dim nvm As NameValueCollection = Request.Form
Dim _idInscricao As String
Dim _Origem As String
litMensagem.Text = "Wait..."
If nvm.Keys.Count = 0 Then
litMensagem.Text = "Error recovering data. No keys found."
Exit Sub
End If
For Each _Key As String In nvm.Keys
If _Key.ToLower.EndsWith("idinscricao") Then
_idInscricao = nvm(_Key)
End If
If _Key.ToLower.EndsWith("origem") Then
_Origem = nvm(_Key)
End If
Next
If _idInscricao Is Nothing OrElse String.IsNullOrEmpty(_idInscricao) _
OrElse _Origem Is Nothing OrElse String.IsNullOrEmpty(_Origem) Then
litMensagem.Text = "Error recovering data."
Exit Sub
End If
I found this question because I was having the same problem, and I need to thank dana for the fiddler recommendation.
Using Fiddler, I found out what was going on. My page was on HTTPS, and the form that I was posting posted to HTTP. I couldn't figure out why my form structure on the posted page was empty.
Turns out the server couldn't find the http version of the file and did an automatic redirect to the https version, doing a GET with my form variables. They aren't available in the form scope with a GET. (FWIW, I'm using CFML.)
Once I changed the form action to post to HTTPS, everything worked like a charm.
-jason

401 Unauthorised errors when attempting to download ASP page to file

Issue
Msxml2.ServerXMLHTTP keeps returning 401 - Unauthorised errors each time we attempt to read the contents of a file (ASP) from a web server.
Source server is running IIS6, using NTLM integrated login.
This process has been used successfully before, but only in as far as extracting XML files from external websites, not internal ones.
The proxy settings in the registry of the server on which the script is run has also been updated to bypass the website in question, but to no avail.
All paths identified in the VBScript have been checked and tested, and are correct.
User running the script has correct read/write permissions for all locations referenced in the script.
Solution needed
To identify the cause of the HTTP 401 Unauthorised messages, so that the script will work as intended.
Description
Our organisation operates an intranet, where the content is replicated to servers at each of our remote sites. This ensures these sites have continued fast access to important information, documentation and data, even in the event of losing connectivity.
We are in the middle of improving the listing and management of Forms (those pesky pieces of paper that have to be filled in for specific tasks). This involves establising a database of all our forms.
However, as the organisation hasn't been smart enough to invest in MSSQL Server instances at each site, replication of the database and accessing it from the local SQL server isn't an option.
To work around this, I have constructed a series of views (ASP pages) which display the required data. I then intend to use Msxml2.ServerXMLHTTP by VBScript, so I can read the resulting pages and save the output to a static file back on the server.
From there, the existing replication process can stream these files out to the site - with users having no idea that they're looking at a static page that just happened to be generated from database output.
Code
' Forms - Static Page Generator
' Implimented 2011-02-15 by Michael Harris
' Purpose: To download the contents of a page, and save that page to a static file.
' Target category: 1 (Contracts)
' Target Page:
' http://sharename.fpc.wa.gov.au/corporate/forms/generator/index.asp
' Target path: \\servername\sharename\corporate\forms\index.asp
' Resulting URL: http://sharename.fpc.wa.gov.au/corporate/forms/index.asp
' Remove read only
' Remove read only flag on file if present to allow editing
' If file has been set to read only by automated process, turn off read only
Const READ_ONLY = 1
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile("\\server\sharename\corporate\forms\index.asp")
If objFile.Attributes AND READ_ONLY Then
objFile.Attributes = objFile.Attributes XOR READ_ONLY
End If
Dim webObj, strURL
Set webObj = CreateObject("Msxml2.ServerXMLHTTP")
strURL = "http://sharename.fpc.wa.gov.au/corporate/forms/generator/index.asp"
webObj.Open "GET", strURL
webObj.send
If webObj.Status=200 Then
Set objFso = CreateObject("Scripting.FileSystemObject")
Set txtFile = objFso.OpenTextFile("file:\\servername.fpc.wa.gov.au\sharename\corporate\forms\index.asp", 2, True)
txtFile.WriteLine webObj.responseText
txtFile.close
ElseIf webObj.Status >= 400 And webObj.Status <= 599 Then
MsgBox "Error Occurred : " & webObj.Status & " - " & webObj.statusText
Else
MsgBox webObj.ResponseText
End If
Replace your line:
webObj.Open "GET", strURL
With:
webObj.Open "GET", strURL, False, "username", "password"
In most cases 401 Unauthorized means you haven't supplied credentials. Also you should specifiy False to indicate you don't want async mode.
It sounds like the O.P. got this working with the correct proxy settings in the registry (http://support.microsoft.com/kb/291008 explains why proxy configuration will fix this). Newer versions of ServerXMLHTTP have a setProxy method that can be used to set the necessary proxy configuration in your code instead.
In the O.P. code above, after webObj is created, the following line of code would set up the proxy correctly:
webObj.setProxy 2, "0.0.0.0:80", "*.fpc.wa.gov.au"
ServerXMLHTTP will pass on the credentials of the user running the code if it is configured with a proxy, and if the target URL bypasses that proxy. Since you are bypassing the proxy anyway, you can make it a dummy value "0.0.0.0:80", and make sure your target url is covered by what you specify in the bypass list "*.fpc.wa.gov.au"
I would first test if you can reach your url through a normal browser on the same server X you run your code on (A). I would try then reach the url from another PC. One never used to reach that url but in the same network as server X (B).
If B works but A doesn't I would suspect that for some reason your source server (i.e. that one that serves the url) blocks server X for some reason. Check the security settings of II6 and of NTLM.
If both A and B don't work, there is something wrong more in general with your source server (i.e. it blocks everything or NTML doesn't allow you in).
If A works (B doesn't matter then), the problem has to be somewhere in your code. In that case, I would recommend fiddler. This tool can give you the HTTP requests of both your browser and your code in realtime. You can then compare both. That should give you at least a very strong hint about (if not immediately give you) the solution.

CDO.Message.1 error '80070005' Access is denied.

I am getting this error when I try to send via the local server
CDO.Message.1 error '80070005'
Access is denied.
/mail.asp, line xxx
Here is the code I am using
MailBodyText = "TEST"
Set objNewMail = CreateObject("CDO.Message")
objNewMail.To = sSendTo
objNewMail.From = "webmaster#EXAMPLE.com"
objNewMail.Cc = "webmaster#EXAMPLE.com"
objNewMail.Subject = "Information Request & Feedback"
objNewMail.HTMLBody = "The following information was sent from " & sEmail & ":" & "<br>" & CHR(13) & MailBodyText & "<br>copies of this mail we sent to :"& sSendTo
objNewMail.Send
Set objNewMail = Nothing
It looks like it is a permission error at the ISSUR doesn't have write permission to write to the mailroot/pickup folder.
But we have checked that and the services account that this site is using seems to have the rights.
Question is this error always a file permission error?
Question how to know / set the location that CDO is using? So we can confirm the permissions
What else should look at to fix this?
Use the .configuration property which allows for authentication and other fine tuning..
examples at : http://www.paulsadowski.com/wsh/cdo.htm
update
The .configuration property allows to set the pickup directory (as you request)
objNewMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 1
objNewMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverpickupdirectory") = "c:\inetpub\mailroot\pickup"
objNewMail.Configuration.Fields.Update
objNewMail.Send
IF YOU DON'T WANT TO CHANGE YOUR CODE
Grant IIS_IUSRS group write access to c:\inetpub\mailroot\Pickup folder or whatever is your pickup dir.
It must be IIS_IUSRS Group, not the IUSR User (you got it mispelled probably).
I was getting this error after performing steps specified in option 3 at blog.msdn.com
I didn't have to change the ASP code. Your code works fine on my server.
I am migrating some old classic asp sites to a new (windows 2008R2) server and I had "exactly" the same problem (well at least the same error and basically the same code). The solution presented by Gaby:
objNewMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 1
objNewMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverpickupdirectory") = "c:\inetpub\mailroot\pickup"
did not work for me, i still had the same error.
After some searching i found this suggestion:
myMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
myMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "localhost"
(do NOT set the smtpserverpickupdirectory)
Now it works fine.
By the way if you need to set up the necessary SMTP service on Windows 2008 server (IIS7), I found this blog extremely helpfull.
UPDATE:
According to microsoft sendusing = 1 uses the SMTP server and sendusing 2 uses Outlook Express, I've looked on the server, and there doesn't seem to be outlookexpress or windows mail installed, still this setting workes for me. If anyone could explain that I'm curious to know.

Resources