Ejemplo n.º 1
0
 def add_student_to_db(self, credentials, request):
     '''
     Adds a new user in the Database, along with the collected credentials from
     dionysos.teilar.gr
     '''
     user = User(
         username = credentials['username'],
         first_name = credentials['first_name'],
         last_name = credentials['last_name'],
         email = credentials['username'] + '@emptymail.com'
     )
     user.is_staff = False
     user.is_superuser = False
     try:
         user.save()
     except Exception as error:
         logger_syslog.error(error, extra = log_extra_data(credentials['username'], request))
         logger_mail.exception(error)
         raise CronosError(u'Σφάλμα αποθήκευσης βασικών στοιχείων χρήστη')
     '''
     Additional information are added in the userprofile table
     '''
     try:
         user_profile = UserProfile(
             user = user,
             dionysos_username = credentials['username'],
             dionysos_password = encrypt_password(credentials['password']),
             registration_number = credentials['registration_number'],
             semester = credentials['semester'],
             school = Departments.objects.get(name = credentials['school']),
             introduction_year = credentials['introduction_year'],
             declaration = credentials['declaration'],
             #grades = credentials['grades'],
         )
         user_profile.save()
     except Exception as error:
         logger_syslog.error(error, extra = log_extra_data(credentials['username'], request))
         logger_mail.exception(error)
         raise CronosError(u'Σφάλμα αποθήκευσης πρόσθετων στοιχείων χρήστη')
     '''
     Everything went fine
     Notify admins about the new registration
     '''
     title = u'New user No.%s: %s' % (user.id, user.username)
     message = u'Name: %s %s\nDepartment: %s\nSemester: %s' % (
         user.first_name, user.last_name, user_profile.school, user_profile.semester
     )
     logger_syslog.info(title, extra = log_extra_data(user.username, request))
     try:
         send_mail(settings.EMAIL_SUBJECT_PREFIX + title, message,
             settings.SERVER_EMAIL, [settings.ADMINS[0][1]])
     except Exception as error:
         logger_syslog.error(error, extra = log_extra_data(user.username, request))
         logger_mail.exception(error)
     '''
     Return the new user object
     '''
     return user
Ejemplo n.º 2
0
 def add_student_to_db(self, request, student):
     '''
     Adds a new user in the Database, along with the collected credentials from
     dionysos.teilar.gr
     '''
     user = User(
         username = student.dionysos_username,
         first_name = unicode(student.dionysos_first_name),
         last_name = unicode(student.dionysos_last_name),
         email = unicode(student.dionysos_username) + u'@emptymail.com'
     )
     user.is_staff = False
     user.is_superuser = False
     try:
         user.save()
     except Exception as error:
         logger_syslog.error(error, extra = log_extra_data(request))
         logger_mail.exception(error)
         raise CronosError(u'Σφάλμα αποθήκευσης βασικών στοιχείων χρήστη')
     '''
     Additional information are added in the userprofile table
     '''
     try:
         user_profile = UserProfile(
             user = user,
             dionysos_username = student.dionysos_username,
             dionysos_password = encrypt_password(student.dionysos_password),
             registration_number = unicode(student.dionysos_registration_number),
             semester = unicode(student.dionysos_semester),
             school = student.dionysos_school,
             introduction_year = unicode(student.dionysos_introduction_year),
             declaration = student.dionysos_declaration,
             grades = student.dionysos_grades,
         )
         user_profile.save()
     except Exception as error:
         logger_syslog.error(error, extra = log_extra_data(request))
         logger_mail.exception(error)
         raise CronosError(u'Σφάλμα αποθήκευσης πρόσθετων στοιχείων χρήστη')
     '''
     Everything went fine
     Log the new user and notify admins about the new registration
     '''
     title = u'New user No.%s: %s' % (user.id, user.username)
     message = u'Name: %s %s\nDepartment: %s\nSemester: %s' % (
         user.first_name, user.last_name, user_profile.school, user_profile.semester
     )
     logger_syslog.info(title, extra = log_extra_data(request))
     try:
         send_mail(settings.EMAIL_SUBJECT_PREFIX + title, message,
             settings.SERVER_EMAIL, get_admins_mails())
     except Exception as error:
         logger_syslog.error(error, extra = log_extra_data(request))
         logger_mail.exception(error)
     '''
     Return the new user object
     '''
     return user
Ejemplo n.º 3
0
def settings_accounts(request):
    '''
    The user's accounts settings webpage
    '''
    notification = {}
    eclass_credentials_form = EclassCredentialsForm()
    webmail_form = WebmailForm()
    declaration_form = DeclarationForm()
    grades_form = GradesForm()
    eclass_lessons_form = EclassLessonsForm()
    if request.user.get_profile().dionysos_password:
        raw_dionysos_password = decrypt_password(request.user.get_profile().dionysos_password),
    else:
        raw_dionysos_password = None
    student = Cronos(
        request.user.get_profile().dionysos_username,
        raw_dionysos_password,
    )
    if request.user.get_profile().eclass_username:
        student.eclass_username = request.user.get_profile().eclass_username
        student.eclass_password = decrypt_password(request.user.get_profile().eclass_password)
    if request.method == 'POST':
        if request.POST.get('eclass_password'):
            '''
            Update eclass credentials
            '''
            try:
                eclass_credentials_form = EclassCredentialsForm(request.POST)
                student.eclass_password = request.POST.get('eclass_password')
                if not request.user.get_profile().eclass_username:
                    if eclass_credentials_form.is_valid():
                        student.eclass_username = request.POST.get('eclass_username')
                    else:
                        raise LoginError
                try:
                    '''
                    Check if the e-class.teilar.gr credentials already exist in the DB,
                    but belong to another student's account
                    '''
                    user = User.objects.get(userprofile__eclass_username = student.eclass_username)
                    if user.username != request.user.username:
                        raise CronosError(u'Τα στοιχεία e-class.teilar.gr ανήκουν ήδη σε κάποιον άλλο λογαριασμό')
                except User.DoesNotExist:
                    pass
                '''
                Try to login with those credentials, and update eclass lessons afterwards
                '''
                student.get_eclass_lessons(request)
                '''
                Login succeeded, save eclass credentials to the user's profile
                '''
                request.user.get_profile().eclass_username = student.eclass_username
                request.user.get_profile().eclass_password = encrypt_password(student.eclass_password)
                request.user.get_profile().save()
                notification['success'] = u'Η ανανέωση των στοιχείων openclass.teilar.gr ήταν επιτυχής'
            except (CronosError, LoginError) as error:
                notification['error'] = error.value
        elif request.POST.get('webmail_password'):
            '''
            Update webmail credentials
            '''
            try:
                webmail_form = WebmailForm(request.POST)
                webmail_password = request.POST.get('webmail_password')
                if request.user.get_profile().webmail_username:
                    webmail_username = request.user.get_profile().webmail_username
                else:
                    if not webmail_form.is_valid():
                        raise LoginError
                    webmail_username = request.POST.get('webmail_username')
                try:
                    '''
                    Check if the myweb.teilar.gr credentials already exist in the DB,
                    but belong to another student's account
                    '''
                    user = User.objects.get(userprofile__webmail_username = webmail_username)
                    if user.username != request.user.username:
                        raise CronosError(u'Τα στοιχεία webmail.teilar.gr ανήκουν ήδη σε κάποιον άλλο λογαριασμό')
                except User.DoesNotExist:
                    user = None
                if not user:
                    user = UserProfile.objects.get(pk=request.user.id)
                user.webmail_username = webmail_username
                user.webmail_password = encrypt_password(webmail_password)
                '''
                Login was successful, add in DB
                '''
                user.save()
                notification['success'] = u'Η ανανέωση των στοιχείων myweb.teilar.gr ήταν επιτυχής'
            except (CronosError, LoginError) as error:
                notification['error'] = error.value
        elif request.POST.get('declaration'):
            '''
            Update the declaration
            '''
            try:
                student.get_dionysos_declaration(request)
                request.user.get_profile().declaration = student.dionysos_declaration
                request.user.get_profile().save()
                notification['success'] = u'Η ανανέωση της δήλωσης ήταν επιτυχής'
            except (CronosError, LoginError) as error:
                notification['error'] = error.value
        elif request.POST.get('grades'):
            '''
            Update the grades
            '''
            try:
                student.get_dionysos_grades(request)
                request.user.get_profile().grades = student.dionysos_grades
                request.user.get_profile().save()
                notification['success'] = u'Η ανανέωση της βαθμολογίας ήταν επιτυχής'
            except (CronosError, LoginError) as error:
                notification['error'] = error.value
        elif request.POST.get('eclass_lessons'):
            '''
            Update the eclass lessons
            '''
            try:
                student.get_eclass_lessons(request)
                notification['success'] = u'Η ανανέωση των μαθημάτων e-class ήταν επιτυχής'
            except (CronosError, LoginError) as error:
                notification['error'] = error.value
    return render_to_response('settings_accounts.html',{
        'notification': notification,
        'eclass_credentials_form': eclass_credentials_form,
        'webmail_form': webmail_form,
        'eclass_lessons_form': eclass_lessons_form,
        'declaration_form': declaration_form,
        'grades_form': grades_form,
       }, context_instance = RequestContext(request))