UNPKG

googleclientlogin

Version:

Log in to Google services using CllientLogin method

216 lines (215 loc) 8.49 kB
<h2 id="google-s-clientlogin-authentication-implementation-for-node-js">Google&#39;s ClientLogin authentication implementation for Node.js</h2> <h3 id="requires-at-least-nodejs-0-4-1">Requires at least nodejs 0.4.1</h3> <h4 id="properties-">Properties:</h4> <h5 id="errors-">errors:</h5> <p><em>That is an object, filled with the possible error messages.</em></p> <h5 id="accounttypes-">accountTypes:</h5> <p><em>An object, where you can set the type of account to request authorization for.</em> properties are: <em>google</em>, <em>hosted</em>, <em>hostedOrGoogle</em> default is <strong>hostedOrGoogle</strong></p> <h4 id="events-">Events:</h4> <h5 id="login-">login:</h5> <p><em>emitted when login was success</em></p> <h5 id="error-">error:</h5> <p><em>emitted when an error occured. Has two parameters, the response object and the received data</em></p> <p>You can access to their names via constants: GoogleClientLogin.events.login or GoogleClientLogin.events.error or you can use &#39;login&#39; and &#39;error&#39; as string.</p> <h4 id="methods-">Methods:</h4> <h5 id="login">login</h5> <p><em>Starts the login process. It has one optional parameter, which should be an object with two properties:</em></p> <p><strong>logincaptcha</strong>, <strong>logintoken.</strong></p> <p>The logincaptcha is the user&#39;s answer to the captcha question</p> <p>You will receive the logintoken if the login failed and the CaptchaRequired error code arrived</p> <p>You must pass both the logincaptcha and logintoken if you must pass a captcha challange</p> <h5 id="getauthid">getAuthId</h5> <p><em>Returns the value of the authId key from the response.</em> If the login was success you will need to use this value to perform additional requests. You must put it into a the Authorization header like this: <code style="margin:0 0.1em;padding:0 0.2em;background-color:#f8f8f8;border:1px solid #eaeaea;border-radius:3px;">&#39;Authorization&#39;: &#39;GoogleLogin auth=&#39; + googleAuth.getAuthId(),</code></p> <h5 id="getsid">getSID</h5> <p><em>Returns the value of SID key from the response.</em></p> <h5 id="getlsid">getLSID</h5> <p><em>Returns the value of LSID key from the response.</em></p> <h5 id="iscaptcharequired">isCaptchaRequired</h5> <p><em>If the login was not success and the user need to pass a captcha challenge this method will return true</em></p> <h5 id="getcaptchaurl">getCaptchaUrl</h5> <p><em>Url of the captcha image</em></p> <h5 id="getcaptchatoken">getCaptchaToken</h5> <p><em>You will need to pass it back to the google with the user&#39;s answer to the captcha if the login failed and captcha authentication required.</em></p> <h5 id="geterror">getError</h5> <p><em>If the login was not success, google will send back an error code what you can get with this method</em></p> <p>After the login was success, you should use the AuthId in each of your requests, see example below</p> <p><a href="http://code.google.com/apis/gdata/faq.html#clientlogin">http://code.google.com/apis/gdata/faq.html#clientlogin</a> list of services:</p> <table> <thead> <tr> <th>Name</th> <th>name in googleclientlogin module</th> <th>value</th> </tr> </thead> <tbody> <tr> <td>Google Adwords APIs:</td> <td>adwords:</td> <td>&#39;adwords&#39;</td> </tr> <tr> <td>Google Analytics Data APIs:</td> <td>analytics:</td> <td>&#39;analytics&#39;</td> </tr> <tr> <td>Google Apps APIs (Domain Information &amp; Management):</td> <td>apps:</td> <td>&#39;apps&#39;</td> </tr> <tr> <td>Google Base Data API:</td> <td>base:</td> <td>&#39;gbase&#39;</td> </tr> <tr> <td>Google Sites Data API:</td> <td>sites:</td> <td>&#39;jotspot&#39;</td> </tr> <tr> <td>Blogger Data API:</td> <td>blogger:</td> <td>&#39;blogger&#39;</td> </tr> <tr> <td>Book Search Data API:</td> <td>book:</td> <td>&#39;print&#39;</td> </tr> <tr> <td>Calendar Data API:</td> <td>calendar:</td> <td>&#39;cl&#39;</td> </tr> <tr> <td>Google Code Search Data API:</td> <td>codesearch:</td> <td>&#39;codesearch&#39;</td> </tr> <tr> <td>Contacts Data API:</td> <td>contacts:</td> <td>&#39;cp&#39;</td> </tr> <tr> <td>Documents List Data API:</td> <td>docs:</td> <td>&#39;writely&#39;</td> </tr> <tr> <td>Finance Data API:</td> <td>finance:</td> <td>&#39;finance&#39;</td> </tr> <tr> <td>Gmail Atom feed:</td> <td>mail:</td> <td>&#39;mail&#39;</td> </tr> <tr> <td>Health Data API:</td> <td>health:</td> <td>&#39;health&#39;</td> </tr> <tr> <td>Health Data API H9 Sandbox</td> <td>weaver:</td> <td>&#39;weaver&#39;</td> </tr> <tr> <td>Maps Data APIs:</td> <td>maps:</td> <td>&#39;local&#39;</td> </tr> <tr> <td>Picasa Web Albums Data API:</td> <td>picasaweb:</td> <td>&#39;lh2&#39;</td> </tr> <tr> <td>Sidewiki Data API:</td> <td>sidewiki:</td> <td>&#39;annotateweb&#39;</td> </tr> <tr> <td>Spreadsheets Data API:</td> <td>spreadsheets:</td> <td>&#39;wise&#39;</td> </tr> <tr> <td>Webmaster Tools API:</td> <td>webmastertools:</td> <td>&#39;sitemaps&#39;</td> </tr> <tr> <td>YouTube Data API:</td> <td>youtube:</td> <td>&#39;youtube&#39;</td> </tr> <tr> <td>C2DM Push Notification Service:</td> <td>c2dm:</td> <td>&#39;ac2dm&#39;</td> </tr> <tr> <td>Google Reader Data API (unofficial):</td> <td>reader:</td> <td>&#39;reader&#39;</td> </tr> <tr> <td>Google Voice API (unoffical):</td> <td>voice:</td> <td>&#39;grandcentral&#39;</td> </tr> <tr> <td>Google Music API (unoffical):</td> <td>sj:</td> <td>&#39;sj&#39;</td> </tr> </tbody> </table> <h3 id="how-to-use-">How to use:</h3> <pre><code style="display:block;padding:0.5em;background:#fdf6e3;color:#657b83;"><span class="keyword" style="color:#859900;">var</span> GoogleClientLogin = import(<span class="string" style="color:#2aa198;">'googleclientlogin'</span>).GoogleClientLogin; <span class="keyword" style="color:#859900;">var</span> googleAuth = <span class="keyword" style="color:#859900;">new</span> GoogleClientLogin({ email: <span class="string" style="color:#2aa198;">'yourmail@gmail.com'</span>, password: <span class="string" style="color:#2aa198;">'yourpassword'</span>, service: <span class="string" style="color:#2aa198;">'contacts'</span>, accountType: GoogleClientLogin.accountTypes.google }); googleAuth.on(GoogleClientLogin.events.login, <span class="keyword" style="color:#859900;">function</span>(){ <span class="comment" style="color:#93a1a1;font-style:italic;">// do things with google services</span> require(<span class="string" style="color:#2aa198;">'https'</span>).request({ host: <span class="string" style="color:#2aa198;">'www.google.com'</span>, port: <span class="number" style="color:#2aa198;">443</span>, path: path, method: <span class="string" style="color:#2aa198;">'GET'</span>, headers: { <span class="string" style="color:#2aa198;">'Authorization'</span>: <span class="string" style="color:#2aa198;">'GoogleLogin auth='</span> + googleAuth.getAuthId(), ... } }); }); googleAuth.on(GoogleClientLogin.events.error, <span class="keyword" style="color:#859900;">function</span>(e) { <span class="keyword" style="color:#859900;">switch</span>(e.message) { <span class="keyword" style="color:#859900;">case</span> GoogleClientLogin.errors.loginFailed: <span class="keyword" style="color:#859900;">if</span> (<span class="keyword" style="color:#859900;">this</span>.isCaptchaRequired()) { requestCaptchaFromUser(<span class="keyword" style="color:#859900;">this</span>.getCaptchaUrl(), <span class="keyword" style="color:#859900;">this</span>.getCaptchaToken()); } <span class="keyword" style="color:#859900;">else</span> { requestLoginDetailsAgain(); } <span class="keyword" style="color:#859900;">break</span>; <span class="keyword" style="color:#859900;">case</span> GoogleClientLogin.errors.tokenMissing: <span class="keyword" style="color:#859900;">case</span> GoogleClientLogin.errors.captchaMissing: <span class="keyword" style="color:#859900;">throw</span> <span class="keyword" style="color:#859900;">new</span> Error(<span class="string" style="color:#2aa198;">'You must pass the both captcha token and the captcha'</span>) <span class="keyword" style="color:#859900;">break</span>; } <span class="keyword" style="color:#859900;">throw</span> <span class="keyword" style="color:#859900;">new</span> Error(<span class="string" style="color:#2aa198;">'Unknown error'</span>); <span class="comment" style="color:#93a1a1;font-style:italic;">// damn..</span> }); googleAuth.login();</code></pre>