Example #1
0
File: api.py Project: pnhoang/osqa
def check_password(username,password):
    """connects to external site and submits username/password pair
    return True or False depending on correctness of login
    saves remote unique id and remote session data in table ExternalLoginData
    may raise forms.ValidationError
    """
    host = settings.EXTERNAL_LEGACY_LOGIN_HOST
    port = settings.EXTERNAL_LEGACY_LOGIN_PORT
    ext_site = httplib.HTTPConnection(host,port)

    print 'connected to %s:%s' % (str(host),str(port))

    #custom code. this one does authentication through
    #MediaWiki API
    params = urllib.urlencode({'action':'login','format':'xml',
            'lgname':username,'lgpassword':password})
    headers = {"Content-type": "application/x-www-form-urlencoded",
                'User-Agent':"User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7",
              "Accept": "text/xml"}
    ext_site.request("POST","/wiki/api.php",params,headers)
    response = ext_site.getresponse()
    if response.status != 200:
        raise forms.ValidationError('error ' + response.status + ' ' + response.reason)
    data = response.read().strip()
    ext_site.close()

    print data

    dom = xml.parseString(data)
    login = dom.getElementsByTagName('login')[0]
    result = login.getAttribute('result')
    
    if result == 'Success':
        username = login.getAttribute('lgusername')
        try:
            eld = ExternalLoginData.objects.get(external_username=username)
        except ExternalLoginData.DoesNotExist:
            eld = ExternalLoginData()
        eld.external_username = username
        eld.external_session_data = data
        eld.save()
        return True 
    else:
        error = login.getAttribute('details')
        raise forms.ValidationError(error)
    return False