Пример #1
0
def login(request):

    num_users = cache_with_default('stat.num_users',
                                   lambda: User.objects.count() - 1, 60)
    num_lectures = cache_with_default('stat.num_lectures',
                                      lambda: Lecture.objects.count(), 600)
    num_favorites = cache_with_default('stat.num_favorites',
                                       lambda: CourseLink.objects.count(), 60)
    num_schedules = cache_with_default(
        'stat.num_schedules', lambda: Schedule.objects.filter(one_of=None).
        count() + RepeatedSchedule.objects.count(), 30)
    num_groups = cache_with_default('stat.num_groups',
                                    lambda: GroupBoard.objects.count(), 60)
    num_comments = cache_with_default('stat.num_comments',
                                      lambda: Comment.objects.count(), 60)

    next_url = request.GET.get('next', '/')
    if request.method == 'POST':

        if not request.POST.has_key('agree'):
            # Do login process
            f = LoginForm(request.POST)
            if not f.is_valid():
                return render_to_response(
                    'login.html', {
                        'form_login': f,
                        'title': ugettext(u'로그인'),
                        'error': True,
                        'msg': ugettext(u'아이디/비밀번호를 모두 적어야 합니다.'),
                        'next': next_url,
                        'num_users': num_users,
                        'num_lectures': num_lectures,
                        'num_favorites': num_favorites,
                        'num_schedules': num_schedules,
                        'num_groups': num_groups,
                        'num_comments': num_comments,
                    },
                    context_instance=RequestContext(request))

            try:
                user = auth.authenticate(username=request.POST['username'],
                                         password=request.POST['password'])
            except UnicodeEncodeError:
                return HttpResponseBadRequest('Bad Request')

            if user is None:  # Login Failed
                return render_to_response(
                    'login.html', {
                        'form_login': f,
                        'title': ugettext(u'로그인'),
                        'error': True,
                        'msg': ugettext(u'로그인에 실패하였습니다.'),
                        'next': next_url,
                        'num_users': num_users,
                        'num_lectures': num_lectures,
                        'num_favorites': num_favorites,
                        'num_schedules': num_schedules,
                        'num_groups': num_groups,
                        'num_comments': num_comments,
                    },
                    context_instance=RequestContext(request))
            else:  # Login OK
                try:
                    temp = user.first_login
                except AttributeError:
                    user.first_login = False
                if user.first_login:
                    # First Login
                    return render_to_response(
                        'login_agreement.html', {
                            'username': user.username,
                            'title': ugettext(u'로그인'),
                            'kuser_info': user.kuser_info,
                            'form_profile': ProfileForm(),
                            'next': next_url,
                        },
                        context_instance=RequestContext(request))
                else:
                    # Already existing user
                    if not user.is_superuser:
                        profile = UserProfile.objects.get(user=user)
                    # Create user's default system calendars if not exists
                    color = 1
                    for key, value in SYSTEM_CALENDAR_NAMES.iteritems():
                        try:
                            Calendar.objects.get(owner=user, system_id=key)
                        except Calendar.DoesNotExist:
                            c = Calendar()
                            c.owner = user
                            c.system_id = key
                            c.title = value
                            c.color = color
                            c.save()
                        color += 1
                    auth.login(request, user)
                    # If persistent login options is set, let the session expire after 2-weeks.
                    if request.POST.has_key('persistent_login'):
                        request.session.set_expiry(14 * 24 * 3600)
                    request.session[
                        'django_language'] = user.userprofile.language[:2]
                    return HttpResponseRedirect(next_url)
        else:
            # Show privacy agreement form after confirming this is a valid user in KAIST.
            if request.POST['agree'] == 'yes':
                user = User.objects.get(username=request.POST['username'])
                user.backend = 'otl.apps.accounts.backends.KAISTSSOBackend'

                # Create user's profile
                try:
                    profile = UserProfile.objects.get(user__exact=user)
                except UserProfile.DoesNotExist:
                    profile = UserProfile()
                profile.user = user
                profile.language = request.POST['language']
                try:
                    profile.department = Department.objects.get(
                        id__exact=int(request.POST['department_no']))
                except:
                    profile.department = Department.objects.get(
                        id__exact=0)  # 찾을 수 없는 학과 사람은 일단 무학과로 등록
                profile.student_id = request.POST['student_id']
                profile.nickname = user.username
                profile.save()
                profile.favorite_departments.add(
                    Department.objects.get(id=2044))  # 인문사회과학부는 기본으로 추가

                # Create user's default system calendars
                color = 1
                for key, value in SYSTEM_CALENDAR_NAMES.iteritems():
                    try:
                        Calendar.objects.get(owner=user, system_id=key)
                    except Calendar.DoesNotExist:
                        c = Calendar()
                        c.owner = user
                        c.system_id = key
                        c.title = value
                        c.color = color
                        c.save()
                    color += 1

                # Registration finished!
                auth.login(request, user)
                return HttpResponseRedirect(next_url)
            else:
                return HttpResponseNotAllowed(
                    ugettext(u'개인정보 활용에 동의하셔야 서비스를 이용하실 수 있습니다. 죄송합니다.'))

    else:
        # Show login form for GET requests
        return render_to_response('login.html', {
            'title': ugettext(u'로그인'),
            'form_login': LoginForm(),
            'next': next_url,
            'num_users': num_users,
            'num_lectures': num_lectures,
            'num_favorites': num_favorites,
            'num_schedules': num_schedules,
            'num_groups': num_groups,
            'num_comments': num_comments,
        },
                                  context_instance=RequestContext(request))
Пример #2
0
def login(request):

    num_users = cache_with_default('stat.num_users', lambda: User.objects.count() - 1, 60)
    num_lectures = cache_with_default('stat.num_lectures', lambda: Lecture.objects.count(), 600)
    num_favorites = cache_with_default('stat.num_favorites', lambda: CourseLink.objects.count(), 60)
    num_schedules = cache_with_default('stat.num_schedules', lambda: Schedule.objects.filter(one_of=None).count() + RepeatedSchedule.objects.count(), 30)
    num_groups = cache_with_default('stat.num_groups', lambda: GroupBoard.objects.count(), 60)
    num_comments = cache_with_default('stat.num_comments', lambda: Comment.objects.count(), 60)

    next_url = request.GET.get('next', '/')
    if request.method == 'POST':

        if not request.POST.has_key('agree'):
            # Do login process
            f = LoginForm(request.POST)
            if not f.is_valid():
                return render_to_response('login.html', {
                    'form_login': f,
                    'title': ugettext(u'로그인'),
                    'error': True,
                    'msg': ugettext(u'아이디/비밀번호를 모두 적어야 합니다.'),
                    'next': next_url,
                    'num_users': num_users,
                    'num_lectures': num_lectures,
                    'num_favorites': num_favorites,
                    'num_schedules': num_schedules,
                    'num_groups': num_groups,
                    'num_comments': num_comments,
                }, context_instance=RequestContext(request))

            try:
                user = auth.authenticate(username=request.POST['username'], password=request.POST['password'])
            except UnicodeEncodeError:
                return HttpResponseBadRequest('Bad Request')

            if user is None: # Login Failed
                return render_to_response('login.html', {
                    'form_login': f,
                    'title': ugettext(u'로그인'),
                    'error': True,
                    'msg': ugettext(u'로그인에 실패하였습니다.'),
                    'next': next_url,
                    'num_users': num_users,
                    'num_lectures': num_lectures,
                    'num_favorites': num_favorites,
                    'num_schedules': num_schedules,
                    'num_groups': num_groups,
                    'num_comments': num_comments,
                }, context_instance=RequestContext(request))
            else: # Login OK
                try:
                    temp = user.first_login
                except AttributeError:
                    user.first_login = False
                if user.first_login:
                    # First Login
                    return render_to_response('login_agreement.html', {
                        'username': user.username,
                        'title': ugettext(u'로그인'),
                        'kuser_info': user.kuser_info,
                        'form_profile': ProfileForm(),
                        'next': next_url,
                    }, context_instance=RequestContext(request))
                else:
                    # Already existing user
                    if not user.is_superuser:
                        profile = UserProfile.objects.get(user=user)
                    # Create user's default system calendars if not exists
                    color = 1
                    for key, value in SYSTEM_CALENDAR_NAMES.iteritems():
                        try:
                            Calendar.objects.get(owner=user, system_id=key)
                        except Calendar.DoesNotExist:
                            c = Calendar()
                            c.owner = user
                            c.system_id = key
                            c.title = value
                            c.color = color
                            c.save()
                        color += 1
                    auth.login(request, user)
                    # If persistent login options is set, let the session expire after 2-weeks.
                    if request.POST.has_key('persistent_login'):
                        request.session.set_expiry(14*24*3600)
                    request.session['django_language'] = user.userprofile.language[:2]
                    return HttpResponseRedirect(next_url)
        else:
            # Show privacy agreement form after confirming this is a valid user in KAIST.
            if request.POST['agree'] == 'yes':
                user = User.objects.get(username = request.POST['username'])
                user.backend = 'otl.apps.accounts.backends.KAISTSSOBackend'

                # Create user's profile
                try:
                    profile = UserProfile.objects.get(user__exact = user)
                except UserProfile.DoesNotExist:
                    profile = UserProfile()
                profile.user = user
                profile.language = request.POST['language']
                try:
                    profile.department = Department.objects.get(id__exact=int(request.POST['department_no']))
                except:
                    profile.department = Department.objects.get(id__exact=0) # 찾을 수 없는 학과 사람은 일단 무학과로 등록
                profile.student_id = request.POST['student_id']
                profile.nickname = user.username
                profile.save()
                profile.favorite_departments.add(Department.objects.get(id=2044)) # 인문사회과학부는 기본으로 추가

                # Create user's default system calendars
                color = 1
                for key, value in SYSTEM_CALENDAR_NAMES.iteritems():
                    try:
                        Calendar.objects.get(owner=user, system_id=key)
                    except Calendar.DoesNotExist:
                        c = Calendar()
                        c.owner = user
                        c.system_id = key
                        c.title = value
                        c.color = color
                        c.save()
                    color += 1

                # Registration finished!
                auth.login(request, user)
                return HttpResponseRedirect(next_url)
            else:
                return HttpResponseNotAllowed(ugettext(u'개인정보 활용에 동의하셔야 서비스를 이용하실 수 있습니다. 죄송합니다.'))

    else:
        # Show login form for GET requests
        return render_to_response('login.html', {
            'title': ugettext(u'로그인'),
            'form_login': LoginForm(),
            'next': next_url,
            'num_users': num_users,
            'num_lectures': num_lectures,
            'num_favorites': num_favorites,
            'num_schedules': num_schedules,
            'num_groups': num_groups,
            'num_comments': num_comments,
        }, context_instance=RequestContext(request))