Example #1
0
    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