Hi Tony, I forgot to add service name and source.
string postData = "accountType=HOSTED&Email=" + email + "&Passwd=" + password + "&service=xapi&source=NCC-TESTAPP-1.0"; Once I did this I was able to get the "Auth" token, but I'm still getting the same error. I'm wondering if Julian could email me the DLL's. Error: --------- Google.GData.Client.GDataRequestException was unhandled Message="Execution of request failed: https://www.google.com/a/feeds/students.ncc.edu/user/2.0/intisof" Source="Google.GData.Apps" ResponseString="<HTML>\n<HEAD>\n<TITLE>Token invalid</TITLE>\n</HEAD> \n<BODY BGCOLOR=\"#FFFFFF\" TEXT=\"#000000\">\n<H1>Token invalid</H1> \n<H2>Error 401</H2>\n</BODY>\n</HTML>\n" StackTrace: at Google.GData.Apps.UserService.Query(UserQuery feedQuery) at Google.GData.Apps.AppsService.RetrieveUser(String username) at GoogleMod.Program.Main(String[] args) in C:\Documents and Settings\Administrator\Desktop\VSprojects\GoogleMod\GoogleMod \Program.cs:line 29 at System.AppDomain._nExecuteAssembly(Assembly assembly, String [] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() On Dec 3, 8:40 pm, "Tony (Google)" <[EMAIL PROTECTED]> wrote: > Hi Fred, > > Yes, there is really an "Auth" token in the response. Since all three > tokens (SID, LSID and Auth) will be returned in the response, my guess > is that your current code logic just skips the second and third tokens > as the first condition of the "if" statement is satisfied. You may > want to update your code logic and create an array to store all three > tokens for other services. For example, the Reporting API is using > the SID. > > Thanks, > > --Tony > > On Dec 3, 5:13 pm, NCCFred <[EMAIL PROTECTED]> wrote: > > > > > Hi Julian, > > > Thanks for the code sample, it took me sometime to actually understand > > exactly where this belonged. I was able to add that Constructor code > > to the AppsService Class and recompile the project which produced 3 > > new DLL's (Extensions.dll, Client.dll and Apps.dll). I copied these > > to the correct location on my machine and made a small test app (see > > code below). > > > Questions: > > 1. Am I supposed to get a value for "Auth"? The documentation says I > > will get a SID, LSID and Auth, I do not see the "Auth". I assumed to > > use the SID and got the following error below when trying to > > RetrieveAllUsers(); > > > Exception/Error: > > Execution of request > > failed:https://www.google.com/a/feeds/students.ncc.edu/user/2.0 > > > Google.GData.Client.GDataRequestException was unhandled > > Message="Execution of request > > failed:https://www.google.com/a/feeds/students.ncc.edu/user/2.0" > > Source="Google.GData.Apps" > > ResponseString="<HTML>\n<HEAD>\n<TITLE>Token invalid</TITLE>\n</HEAD> > > \n<BODY BGCOLOR=\"#FFFFFF\" TEXT=\"#000000\">\n<H1>Token invalid</H1> > > \n<H2>Error 401</H2>\n</BODY>\n</HTML>\n" > > StackTrace: > > at Google.GData.Apps.UserService.Query(UserQuery feedQuery) > > at Google.GData.Apps.AppsService.RetrieveAllUsers() > > at GoogleMod.Program.Main(String[] args) in C:\Documents and > > Settings\Administrator\Desktop\TempVS\GoogleMod\GoogleMod > > \Program.cs:line 30 > > at System.AppDomain._nExecuteAssembly(Assembly assembly, String > > [] args) > > at System.AppDomain.ExecuteAssembly(String assemblyFile, > > Evidence assemblySecurity, String[] args) > > at > > Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() > > at System.Threading.ThreadHelper.ThreadStart_Context(Object > > state) > > at System.Threading.ExecutionContext.Run(ExecutionContext > > executionContext, ContextCallback callback, Object state) > > at System.Threading.ThreadHelper.ThreadStart() > > > My Code: > > Program.cs > > --------------------- > > > using System; > > using System.Collections.Generic; > > using System.Text; > > using Google.GData.Apps; > > using Google.GData.Extensions; > > using Google.GData.Client; > > using System.Web; > > using System.Net; > > using System.Diagnostics; > > using System.IO; > > > namespace GoogleMod > > { > > class Program > > { > > static void Main(string[] args) > > { > > UserFeed feed = null; > > > string email = "[EMAIL PROTECTED]"; > > string password = "XXXXX"; > > > string SID = GetSecurityToken(email, password); > > Debug.WriteLine("SID = " + SID); > > > AppsService service = new AppsService("students.ncc.edu", > > SID); > > > try > > { > > feed = service.RetrieveAllUsers(); > > > for (int i = 0; i < feed.Entries.Count; i++) > > { > > UserEntry entry = feed.Entries[i] as UserEntry; > > > Debug.WriteLine(entry.Name.FamilyName); > > Debug.WriteLine(entry.Name.GivenName); > > Debug.WriteLine(entry.Login.UserName); > > } > > > } > > catch (AppsException e) > > { > > Debug.WriteLine(e.ErrorCode); > > Debug.WriteLine(e.Data); > > Debug.WriteLine(e.Message); > > Debug.WriteLine(e.Reason); > > Debug.WriteLine(e.Response); > > Debug.WriteLine(e.ResponseString); > > Debug.WriteLine(e.Source); > > } > > > } > > > static string GetSecurityToken(string email, string password) > > { > > string postBody = string.Format( > > "accountType=HOSTED&Email={0}&Passwd={1}", > > HttpUtility.UrlEncode(email), > > HttpUtility.UrlEncode(password)); > > > string targetUrl = "https://www.google.com/accounts/ > > ClientLogin"; > > > string result; > > HttpStatusCode status; > > > WebUtility.DoHttpPost(targetUrl, postBody, out status, out > > result); > > > string sid = string.Empty; > > string lsid = string.Empty; > > > foreach (string token in result.Split('\n')) > > { > > if (token.StartsWith("SID=")) > > { > > sid = token.Substring(4); > > } > > else if (token.StartsWith("LSID=")) > > { > > lsid = token.Substring(5); > > } > > else > > { > > if (token.Trim().Length > 0) > > { > > Debug.WriteLine("Error authenticating Google > > user " + email); > > } > > } > > } > > > return sid; > > } > > > } > > > } > > > WebUtility.cs > > ---------------------- > > > using System; > > using System.IO; > > using System.Net; > > using System.Text; > > > namespace GoogleMod > > { > > /// <summary> > > /// Provides convenience methods for issuing a HTTP "POST" command > > and returning the results. > > /// </summary> > > public class WebUtility > > { > > private WebUtility() { ;} > > > public static HttpWebResponse DoHttpPost(string targetUrl, > > string postBody) > > { > > HttpWebRequest request = > > (HttpWebRequest)WebRequest.Create(targetUrl); > > > request.Method = "POST"; > > > Encoding encoding = Encoding.GetEncoding("ISO-8859-1"); > > > byte[] postBuffer = encoding.GetBytes(postBody); > > > request.ContentLength = postBuffer.Length; > > request.ContentType = "application/x-www-form-urlencoded"; > > > using (Stream requestStream = request.GetRequestStream()) > > { > > requestStream.Write(postBuffer, 0, postBuffer.Length); > > } > > > HttpWebResponse response; > > > try > > { > > response = (HttpWebResponse)request.GetResponse(); > > } > > catch (WebException we) > > { > > response = (HttpWebResponse)we.Response; > > } > > > return response; > > } > > > public static void DoHttpPost(string targetUrl, string > > postBody, > > out HttpStatusCode resultCode, out string resultBody) > > { > > HttpWebResponse response = DoHttpPost(targetUrl, > > postBody); > > > using (StreamReader reader = new StreamReader > > (response.GetResponseStream())) > > { > > resultCode = response.StatusCode; > > resultBody = reader.ReadToEnd(); > > } > > } > > } > > > } > > > On Dec 3, 11:14 am, "Julian (Google)" <[EMAIL PROTECTED]> wrote: > > > > Hi Fred, > > > > To be able to reuse a cached token, you need to modify the AppsService > > > by adding the following constructor: > > > > public AppsService(string domain, string authenticationToken) > > > { > > > this.domain = domain; > > > this.applicationName = "apps-" + domain; > > > > emailListRecipientService = new EmailListRecipientService > > > (applicationName); > > > emailListRecipientService.SetAuthenticationToken > > > (authenticationToken); > > > ((GDataRequestFactory) > > > emailListRecipientService.RequestFactory).KeepAlive = false; > > > > emailListService = new EmailListService(applicationName); > > > emailListService.SetAuthenticationToken > > > (authenticationToken); > > > ((GDataRequestFactory) > > > emailListService.RequestFactory).KeepAlive = false; > > > > nicknameService = new NicknameService(applicationName); > > > nicknameService.SetAuthenticationToken > > > (authenticationToken); > > > ((GDataRequestFactory) > > > nicknameService.RequestFactory).KeepAlive = false; > > > > userAccountService = new UserService(applicationName); > > > userAccountService.SetAuthenticationToken > > > (authenticationToken); > > > ((GDataRequestFactory) > > > userAccountService.RequestFactory).KeepAlive = false; > > > } > > > > This will allow you to specify a Authentication Token instead of > > > username and password. > > > > If you need to perform many operations I recommend using Threads, for > > > example 10 running instances of AppService will help you > > ... > > read more »- Hide quoted text - > > - Show quoted text - --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google Apps APIs" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/google-apps-apis?hl=en -~----------~----~----~----~------~----~------~--~---
