Beispiel #1
0
def create_local(request):
    user = AuthService.get_current_user(request)
    create_local_form = CreateLocalInfo()
    context = {'user': user, 'create_local_form': create_local_form}
    # POST /Link/CreateLocal
    if request.method == 'POST':
        create_local_form = CreateLocalInfo(request.POST)
        data = ''
        if create_local_form.is_valid():
            data = create_local_form.clean()
        try:
            local_user = user_service.create(user.o365_user)
        except:
            errors = []
            errors.append('Name %s is already taken.' % user.o365_email)
            errors.append("Email '%s' is already taken." % user.o365_email)
            context['errors'] = errors
            return render(request, 'link/createlocal.html', context)
        link_service.link(local_user, user.o365_user)
        user_service.update_favorite_color(data['FavoriteColor'],
                                           local_user.id)
        local_user = user_service.get_user(local_user.id)  # reload local user
        auth_login(request, local_user)
        request.session[
            'Message'] = 'Your local account has been successfully linked to your Office 365 account.'
        return HttpResponseRedirect('/')
    # GET /Link/CreateLocal
    else:
        return render(request, 'link/createlocal.html', context)
Beispiel #2
0
def login_local(request):
    user = AuthService.get_current_user(request)
    login_local_form = LoginLocalInfo()
    context = {'user': user, 'login_local_form': login_local_form}
    # POST /Link/LoginLocal
    if request.method == 'POST':
        login_local_form = LoginLocalInfo(request.POST)
        if login_local_form.is_valid():
            data = login_local_form.clean()
            email = data['Email']
            password = data['Password']
            local_user = auth_authenticate(username=email, password=password)
            if local_user:
                link_service.link(local_user, user.o365_user)
                auth_login(request, local_user)
                request.session[
                    'Message'] = 'Your local account has been successfully linked to your Office 365 account.'
                return HttpResponseRedirect('/')
            else:
                context['errors'] = ['Invalid login attempt.']
            return render(request, 'link/loginlocal.html', context)
    # GET /Link/LoginLocal
    else:
        local_user = user_service.get_user_by_email(user.o365_email)
        if local_user:
            link_service.link(local_user, user.o365_user)
            local_user = user_service.get_user(
                local_user.id)  # reload local user
            auth_login(request, local_user)
            request.session[
                'Message'] = 'Your local account has been successfully linked to your Office 365 account.'
            return HttpResponseRedirect('/')
        else:
            return render(request, 'link/loginlocal.html', context)
Beispiel #3
0
def login(request):
    # get /Account/Login
    if request.method == 'GET':
        o365_username = request.COOKIES.get(constant.o365_username_cookie)
        o365_email = request.COOKIES.get(constant.o365_email_cookie)
        if o365_username and o365_email:
            context = {'username': o365_username, 'email': o365_email}
            return render(request, 'account/O365login.html', context)
        else:
            user_form = UserInfo()
            return render(request, 'account/login.html',
                          {'user_form': user_form})
    # post /Account/Login
    else:
        return login_post(request)
Beispiel #4
0
 def process_exception(self, request, exception):
     context = {
         'user': AuthService.get_current_user(request),
         'reason': str(exception)
     }
     if exception.__class__.__name__ == 'RefreshTokenException':
         return render(request, 'login0365required.html', context)
Beispiel #5
0
def admin(request):
    user = AuthService.get_current_user(request)
    context = {
        'user': user,
        'is_admin_consented': user_service.is_tenant_consented(user.tenant_id)
    }
    return render(request, 'admin/index.html', context)
Beispiel #6
0
def aboutme(request):
    user = AuthService.get_current_user(request)
    
    context = { 'user': user }
    login_as =""
    if user.local_user.is_authenticated:
        context['show_color'] = user.local_user.is_authenticated
        context['colors'] = constant.favorite_colors        
        context['favorite_color'] = user_service.get_favorite_color(user.user_id)
    if user.is_admin:
        login_as ="Admin"
    if not user.is_admin and user.o365_user is not None:
        token = token_service.get_access_token(constant.Resources.MSGraph, user.o365_user_id)        
        education_service = EducationService(user.tenant_id, token)            
        me = education_service.get_me() 
        my_school_id = me.schools[0].id
        
        if me.is_teacher:
            login_as="Teacher"
        if me.is_student:
            login_as="Student"
        
        context['me'] = me
        context['groups'] = education_service.get_my_classes(my_school_id)
    else:
        context['groups'] = []
    context['login_as'] = login_as
    context['role']=login_as
    return render(request, 'managements/aboutme.html', context)
Beispiel #7
0
def classes(request, school_id):
    user = AuthService.get_current_user(request)
    token = token_service.get_access_token(constant.Resources.MSGraph, user.o365_user_id)
    education_service = EducationService(user.tenant_id, token)
    me = education_service.get_me()
    role = get_user_role(user, me)
    education_service = EducationService(user.tenant_id, token)
    school = education_service.get_school(school_id)
    my_classes = education_service.get_my_classes(school_id)
    all_classes, classesnextlink = education_service.get_classes(school_id, 12)

    for c in all_classes:
        my_class = next((mc for mc in my_classes if c.id == mc.id), None)
        c.custom_data['is_my'] = my_class != None
        if my_class != None:
            c.members = my_class.members

    context = {
        'user': user,
        'school': school,
        'classesnextlink': classesnextlink,
        'classes': all_classes,
        'myclasses': my_classes,
        'school_id': school_id,
        'is_in_a_school': True,
        'me': me,
        'role':role
    }
    return render(request, 'schools/classes.html', context)
Beispiel #8
0
def login(request):
    # get /Account/Login
    if request.method == 'GET':
        user_form = UserInfo()
        return render(request, 'account/login.html', {'user_form': user_form})
    # post /Account/Login
    else:
        return login_post(request)
def register(request):
    user_reg_form = UserRegInfo()
    # post /Account/Register
    if request.method == 'POST':
        errors = []
        user_reg_form = UserRegInfo(request.POST)
        if user_reg_form.is_valid():
            data = user_reg_form.clean()
            user = user_service.register(data['Email'], data['Password'], data['FavoriteColor'])
            if user:
                auth_login(request, user)
                return HttpResponseRedirect('/')
            else:
                errors.append('Name %s is already taken.' % data['Email'])
                errors.append("Email '%s' is already taken." % data['Email'])
                return render(request, 'account/register.html', {'user_reg_form':user_reg_form, 'errors':errors})
    # get /Account/Register
    else:
        return render(request, 'account/register.html', {'user_reg_form':user_reg_form})
Beispiel #10
0
def link(request):
    user = AuthService.get_current_user(request)
    context = {'user': user}
    if not user.are_linked and user.is_o365:
        local_user = user_service.get_user_by_email(user.o365_email)
        if local_user:
            context['local_existed'] = True
            context[
                'local_message'] = 'There is a local account: %s matching your O365 account.' % user.o365_email
        else:
            context['local_existed'] = False
    return render(request, 'link/index.html', context)
Beispiel #11
0
def unlink_account(request, link_id):
    if request.method == 'POST':
        link_service.remove_link(link_id)
        return HttpResponseRedirect('/Admin/LinkedAccounts')
    else:
        user = AuthService.get_current_user(request)
        link = link_service.get_link(link_id)
        context = {
            'user': user,
            'email': link['email'],
            'o365Email': link['o365Email']
        }
        return render(request, 'admin/unlinkaccount.html', context)
Beispiel #12
0
def login_post(request):
    email = ''
    password = ''
    errors = []
    user_form = UserInfo(request.POST)
    if user_form.is_valid():
        data = user_form.clean()
        email = data['Email']
        password = data['Password']
        rememberme = data['RememberMe']
        settings.SESSION_EXPIRE_AT_BROWSER_CLOSE = not rememberme
        user = auth_authenticate(username=email, password=password)
        if user is not None:
            auth_login(request, user)
            o365_user = user_service.get_o365_user(user)
            if o365_user:
                AuthService.set_o365_user(request, o365_user)
            return HttpResponseRedirect('/')
    errors.append('Invalid login attempt.')
    context = {'user_form': user_form, 'errors': errors}
    return render(request, 'account/login.html', context)
Beispiel #13
0
def schools(request):   
    user = AuthService.get_current_user(request)
    token = token_service.get_access_token(constant.Resources.MSGraph, user.o365_user_id)

    education_service = EducationService(user.tenant_id, token)
    me = education_service.get_me()

    schools = education_service.get_schools()
    for school in schools:
        school.custom_data['is_my'] = me.is_in_school(school.id)

    # sort schools: my school will be put to the top
    schools.sort(key=lambda s:s.display_name if me.is_in_school(s.id) else 'Z_' + s.display_name)
    role = get_user_role(user, me)
    context = {
        'user': user,
        'me': me,
        'role':role,
        'schools': schools
    }
    return render(request, 'schools/index.html', context)
Beispiel #14
0
def schools(request):
    user = AuthService.get_current_user(request)

    context = {'user': user}
    return render(request, 'schools/index.html', context)
Beispiel #15
0
def linked_accounts(request):
    user = AuthService.get_current_user(request)
    account_links = link_service.get_links(user.tenant_id)
    context = {'user': user, 'account_links': account_links}
    return render(request, 'admin/linkedaccounts.html', context)
Beispiel #16
0
def consent_alone(request):
    context = {}

    if request.GET.get('consented') == 'true':
        context['consented'] = True
    return render(request, 'admin/consent.html', context)
Beispiel #17
0
def class_details(request, school_id, class_id):
    user = AuthService.get_current_user(request)
    token = token_service.get_access_token(constant.Resources.MSGraph, user.o365_user_id)
    education_service = EducationService(user.tenant_id, token)
    me = education_service.get_me()
    role = get_user_role(user, me)
    token = token_service.get_access_token(constant.Resources.MSGraph, user.o365_user_id)
    education_service = EducationService(user.tenant_id, token)

    school = education_service.get_school(school_id)
    current_class = education_service.get_class(class_id)    
    members = education_service.get_class_members(class_id)
    teachers = [m for m in members if m.primary_role == 'teacher']
    students = [m for m in members if m.primary_role == 'student']    
    
    # set favorite colors and seating positions
    for student in students:
        favorite_color = user_service.get_favorite_color_by_o365_user_id(student.id)
        if favorite_color:
            student.custom_data['favorite_color'] = favorite_color
        seating_position = user_service.get_seating_position(student.id, class_id)
        if not seating_position:
            seating_position = 0
        student.custom_data['position'] = seating_position
   
    assignments = education_service.get_assignments(class_id)
    for assignment in assignments: 
        if assignment.dueDateTime !=None:      
            assignment.dueDateTimeLocal = datetime_from_utc_to_local(datetime.strptime(assignment.dueDateTime, '%Y-%m-%dT%H:%M:%SZ')).strftime("%m/%d/%Y")



    all_teachers = education_service.get_teachers(school.number)
    filtered_teachers = [t for t in all_teachers if all(t.id != i.id for i in teachers)]

    # set seatrange
    seatrange = range(1, 37)

    ms_token = token_service.get_access_token(constant.Resources.MSGraph, user.o365_user_id)
    ms_graph_service = MSGraphService(ms_token)

    documents = ms_graph_service.get_documents(class_id)
    documents_root = ms_graph_service.get_documents_root(class_id)
    conversations = ms_graph_service.get_conversations(class_id)
    for conversation in conversations:
        conversation.custom_data['url'] = ms_graph_service.get_conversations_url(conversation.id, current_class.mail_nickname)
    conversations_root = ms_graph_service.get_conversations_root(current_class.mail_nickname)

    favorite_color = user_service.get_favorite_color_by_o365_user_id(user.o365_user_id)

    context = {
        'user': user,
        'me': me,
        'role':role,
        'is_student':me.is_student,
        'school': school,
        'class': current_class,
        'teachers': teachers,
        'students': students,
        'documents': documents,
        'documents_root': documents_root,
        'conversations': conversations,
        'conversations_root': conversations_root,
        'seatrange': seatrange,
        'school_id': school_id,
        'class_id': class_id,
        'is_in_a_school': True,
        'favorite_color': favorite_color,
        'filtered_teachers': filtered_teachers,
        'assignments' : assignments
    }
    return render(request, 'schools/classdetails.html', context)