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)
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)
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)
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)
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)
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)
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)
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})
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)
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)
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)
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)
def schools(request): user = AuthService.get_current_user(request) context = {'user': user} return render(request, 'schools/index.html', context)
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)
def consent_alone(request): context = {} if request.GET.get('consented') == 'true': context['consented'] = True return render(request, 'admin/consent.html', context)
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)