def authenticate(self, username=None, password=None): try: myHTTPTransport.set_authentication(settings.PORTAL_SSO_ADMIN_ID, settings.PORTAL_SSO_ADMIN_PASSWORD) server = WSDL.Proxy(settings.PORTAL_SSO_WSDL_ADDRESS, transport=myHTTPTransport) #print server.authentication(username.encode('base64').strip(), password.encode('base64').strip(), PORTAL_SSO_TOKEN) user_info = server.authentication(username.encode('base64').strip(), password.encode('base64').strip(), settings.PORTAL_SSO_TOKEN) if user_info['uid'] == None: # Login Failed return None except: # Failed to access portal page return None kuser_info = {} kuser_info['student_id'] = user_info['ku_std_no'] kuser_info['department'] = user_info['ou'] kuser_info['department_no'] = user_info['ku_kaist_org_id'] try: user = User.objects.get(username__exact=user_info['uid']) user.first_login = False # If this user already exists in our database, just pass or update his info. profile = UserProfile.objects.get(user=user) changed = False try: new_dept = Department.objects.get(id__exact=int(user_info['ku_kaist_org_id'])) except: new_dept = Department.objects.get(id__exact=0) #무학과 if profile.department.name != new_dept.name: profile.department = new_dept changed = True if profile.student_id != user_info['ku_std_no']: profile.student_id = user_info['ku_std_no'] changed = True if changed: profile.save() return user except UserProfile.DoesNotExist: # This may occur when a user stopped at the privacy agreement step and retry afterwards. user.kuser_info = kuser_info user.first_login = True return user except User.DoesNotExist: # If this user doesn't exist yet, make records for him. user = User(username=user_info['uid']) user.first_name = user_info['givenname'] user.last_name = user_info['sn'] if user_info['mail'] == None: user.email = user_info['uid'] + "@kaist.ac.kr" else: user.email = user_info['mail'] user.set_unusable_password() # We don't save the password. user.save() # These two fields are for passing privacy info temporarily. user.kuser_info = kuser_info user.first_login = True return user