source: protocols/msn/passport.h @ e6648bf

Last change on this file since e6648bf was e6648bf, checked in by Wilmer van der Gaast <wilmer@…>, at 2008-02-17T11:16:01Z

Replaced old MSN Passport (v1.4) authentication code with what's described on
http://msnpiki.msnfanatic.com/index.php/MSNP13:SOAPTweener . This was an
attempt to fix bug #360, but it didn't. However, this change may make BitlBee
a little bit more future-proof. Plus, the code is tidier and sometimes faster
than the old mechanism.

  • Property mode set to 100644
File size: 4.5 KB
Line 
1/* passport.h
2 *
3 * Functions to login to Microsoft Passport service for Messenger
4 * Copyright (C) 2004-2008 Wilmer van der Gaast <wilmer@gaast.net>
5 *
6 * This program is free software; you can redistribute it and/or modify             
7 * it under the terms of the GNU General Public License version 2                   
8 * as published by the Free Software Foundation                                     
9 *                                                                                   
10 * This program is distributed in the hope that is will be useful,                 
11 * bit WITHOU ANY WARRANTY; without even the implied warranty of                   
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                   
13 * GNU General Public License for more details.                                     
14 *                                                                                   
15 * You should have received a copy of the GNU General Public License               
16 * along with this program; if not, write to the Free Software                     
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA         
18 */
19
20/* Thanks to http://msnpiki.msnfanatic.com/index.php/MSNP13:SOAPTweener
21   for the specs! */
22
23#ifndef __PASSPORT_H__
24#define __PASSPORT_H__
25
26#include <stdio.h>
27#include <stdlib.h>
28#include <string.h>
29#include <sys/types.h>
30#ifndef _WIN32
31#include <sys/socket.h>
32#include <netinet/in.h>
33#include <arpa/inet.h>
34#include <unistd.h>
35#endif
36#include "nogaim.h"
37
38struct msn_auth_data
39{
40        char *url;
41        int ttl;
42       
43        char *username;
44        char *password;
45        char *cookie;
46       
47        /* The end result, the only thing we'll really be interested in
48           once finished. */
49        char *token;
50        char *error; /* Yeah, or that... */
51       
52        void (*callback)( struct msn_auth_data *mad );
53        gpointer data;
54};
55
56#define SOAP_AUTHENTICATION_URL "https://loginnet.passport.com/RST.srf"
57
58#define SOAP_AUTHENTICATION_REQUEST \
59"POST %s HTTP/1.0\r\n" \
60"Accept: text/*\r\n" \
61"User-Agent: BitlBee " BITLBEE_VERSION "\r\n" \
62"Host: %s\r\n" \
63"Content-Length: %d\r\n" \
64"Cache-Control: no-cache\r\n" \
65"\r\n" \
66"%s"
67
68#define SOAP_AUTHENTICATION_PAYLOAD \
69"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" \
70"<Envelope xmlns=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:wsse=\"http://schemas.xmlsoap.org/ws/2003/06/secext\" xmlns:saml=\"urn:oasis:names:tc:SAML:1.0:assertion\" xmlns:wsp=\"http://schemas.xmlsoap.org/ws/2002/12/policy\" xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\" xmlns:wsa=\"http://schemas.xmlsoap.org/ws/2004/03/addressing\" xmlns:wssc=\"http://schemas.xmlsoap.org/ws/2004/04/sc\" xmlns:wst=\"http://schemas.xmlsoap.org/ws/2004/04/trust\">" \
71  "<Header>" \
72    "<ps:AuthInfo xmlns:ps=\"http://schemas.microsoft.com/Passport/SoapServices/PPCRL\" Id=\"PPAuthInfo\">" \
73      "<ps:HostingApp>{7108E71A-9926-4FCB-BCC9-9A9D3F32E423}</ps:HostingApp>" \
74      "<ps:BinaryVersion>4</ps:BinaryVersion>" \
75      "<ps:UIVersion>1</ps:UIVersion>" \
76      "<ps:Cookies></ps:Cookies>" \
77      "<ps:RequestParams>AQAAAAIAAABsYwQAAAAzMDg0</ps:RequestParams>" \
78    "</ps:AuthInfo>" \
79    "<wsse:Security>" \
80       "<wsse:UsernameToken Id=\"user\">" \
81         "<wsse:Username>%s</wsse:Username>" \
82         "<wsse:Password>%s</wsse:Password>" \
83       "</wsse:UsernameToken>" \
84    "</wsse:Security>" \
85  "</Header>" \
86  "<Body>" \
87    "<ps:RequestMultipleSecurityTokens xmlns:ps=\"http://schemas.microsoft.com/Passport/SoapServices/PPCRL\" Id=\"RSTS\">" \
88      "<wst:RequestSecurityToken Id=\"RST0\">" \
89        "<wst:RequestType>http://schemas.xmlsoap.org/ws/2004/04/security/trust/Issue</wst:RequestType>" \
90        "<wsp:AppliesTo>" \
91          "<wsa:EndpointReference>" \
92            "<wsa:Address>http://Passport.NET/tb</wsa:Address>" \
93          "</wsa:EndpointReference>" \
94        "</wsp:AppliesTo>" \
95      "</wst:RequestSecurityToken>" \
96      "<wst:RequestSecurityToken Id=\"RST1\">" \
97       "<wst:RequestType>http://schemas.xmlsoap.org/ws/2004/04/security/trust/Issue</wst:RequestType>" \
98        "<wsp:AppliesTo>" \
99          "<wsa:EndpointReference>" \
100            "<wsa:Address>messenger.msn.com</wsa:Address>" \
101          "</wsa:EndpointReference>" \
102        "</wsp:AppliesTo>" \
103        "<wsse:PolicyReference URI=\"?%s\"></wsse:PolicyReference>" \
104      "</wst:RequestSecurityToken>" \
105    "</ps:RequestMultipleSecurityTokens>" \
106  "</Body>" \
107"</Envelope>"
108
109int passport_get_token( gpointer func, gpointer data, char *username, char *password, char *cookie );
110
111#endif /* __PASSPORT_H__ */
Note: See TracBrowser for help on using the repository browser.