def test_process_query_form(self): '''this tests the form objects and the process query form method''' my_post_string = 'csrftoken=blablabla&query_group_name=aaup' my_query_dict = QueryDict(my_post_string) my_query_form = LdapQueryForm(my_query_dict) my_query_valid = my_query_form.is_valid() my_query_data = my_query_form.cleaned_data assert (my_query_valid) assert (my_query_data == {'query_group_name': u'aaup'})
def test_process_query_form(self): """this tests the form objects and the process query form method""" my_post_string = "csrftoken=blablabla&query_group_name=aaup" my_query_dict = QueryDict(my_post_string) my_query_form = LdapQueryForm(my_query_dict) my_query_valid = my_query_form.is_valid() my_query_data = my_query_form.cleaned_data assert my_query_valid assert my_query_data == {"query_group_name": u"aaup"}
def index(request): '''this is the index method, it serves and handles all functionality @params: request - the django request object.''' #check for correct permission if not request.user.has_perm('mysite.psu_ldap'): logger.info( "user=\"{0}\" action=\"attempted app access by user." \ + " Improper permissions.\"" \ .format(request.user)) return render_to_response('invalid.html') else: #check if form submitted if not request.method == 'POST': #if asking for recent, then go to this block if request.path == '/recent/': #logger.debug("user=\"{0} action=\"accessed app.\"") template = loader.get_template( 'recent.html' ) context = Context() return render_to_response( 'recent.html', { }, context_instance=RequestContext(request) ) elif request.path == '/query_form/': #if form not submitted, ie: no POST, then render the blank form #logger.info("rendering blank query form.") query_form = LdapQueryForm(initial = {'query_group_name':''}) template = loader.get_template( 'query.html' ) context = Context() return render_to_response( 'query.html', { 'query_form':query_form }, context_instance=RequestContext(request) ) else: return render_to_response( 'index.html', {}, context_instance=RequestContext(request) ) #if it's the modify form that they submitted it will have this field: elif (request.path == '/modify/'): #logger.info("user: {0}".format(request.user)) #get the form form = LdapModifyForm( request.POST ) #check if form valid if not form.is_valid(): logger.info( "user=\"{0}\" action=\"invalid modify form " \ + "submission\" form=\"{1}\"" \ .format(request.user, form)) template = loader.get_template( 'modify_results.html' ) context = Context() return render_to_response( 'modify_results.html', { result:"form not valid..." }, context_instance=RequestContext(request) ) #handle form submission else: #logger.debug("form: {0}".format(form)) #debug group_dn, group_name, group_preferredcn, group_room, \ group_phone, group_email, group_labeledUri = \ modify_process_form(form) #is there a labeled URI for this entry? has_labeled_uri = False if (group_labeledUri is not 'NOT PERMITTED') and \ (group_labeledUri is not ''): has_labeled_uri = True lookup_cn = '' dn_split = group_dn.split(',') for section in dn_split: if section.strip().startswith('cn'): lookup_cn = section.strip() initial_record = (101, []) if lookup_cn is not '': initial_record = search( lookup_cn.replace("(","*").replace(")","*"), {'basedn':'ou=groups,dc=pdx,dc=edu'}, my_creds) #logic to figure out what needs to change dn_same = False cn_same = False preferred_cn_same = False room_same = False phone_same = False email_same = False uri_same = False #logger.debug('initial_record: {0}\n' \ #+ 'initial_record == (101, []): {1}'.format( #initial_record, (initial_record == (101,[])))) #debug before_dict = {} after_dict = {} if initial_record != (101, []): if group_dn == initial_record[1][0][0]: dn_same = True if ',' in group_name: group_cn_s = group_name.split(",") for group_cn in group_cn_s: if group_cn in initial_record[1][0][1]['cn']: cn_same = True if group_name in initial_record[1][0][1]['cn']: cn_same = True if not cn_same: #logger.debug( #"group_name: {0}\ninitial_record[1][0][1]['cn']: {1}" #.format(group_name, initial_record[1][0][1]['cn'])) rdn_results = modify_rdn( group_dn, 'cn={0}'.format(group_name), my_creds) #logger.info( #"cn changed from {0} to {1}" #.format(initial_record[1][0][1]['cn'], group_name)) group_dn = search( 'cn={0}'.format( group_name.replace("(","*").replace(")","*")), {'basedn':'ou=groups,dc=pdx,dc=edu'}, my_creds)[1][0][0] if 'preferredcn' in initial_record[1][0][1].keys(): if group_preferredcn in \ initial_record[1][0][1]['preferredcn']: preferred_cn_same = True else: before_dict['preferredcn'] = \ initial_record[1][0][1]['preferredcn'] after_dict['preferredcn'] = \ process_input(group_preferredcn) elif group_preferredcn is not '': after_dict['preferredcn'] = \ process_input(group_preferredcn) else: preferred_cn_same = True if 'roomNumber' in \ initial_record[1][0][1].keys(): if group_room in \ initial_record[1][0][1]['roomNumber']: room_same = True else: before_dict['roomNumber'] = \ initial_record[1][0][1]['roomNumber'] after_dict['roomNumber'] = process_input(group_room) elif group_room is not '': after_dict['roomNumber'] = process_input(group_room) else: room_same = True if 'telephoneNumber' in initial_record[1][0][1].keys(): if group_phone in \ initial_record[1][0][1]['telephoneNumber']: phone_same = True else: before_dict['telephoneNumber'] = \ initial_record[1][0][1]['telephoneNumber'] after_dict['telephoneNumber'] = \ process_input(group_phone) elif group_phone is not '': after_dict['telephoneNumber'] = \ process_input(group_phone) else: phone_same = True if 'mail' in initial_record[1][0][1].keys(): if group_email in initial_record[1][0][1]['mail']: email_same = True else: before_dict['mail'] = initial_record[1][0][1]['mail'] after_dict['mail'] = process_input(group_email) elif group_email is not '': after_dict['mail'] = process_input(group_email) else: email_same = True try: if group_labeledUri in \ initial_record[1][0][1]['labeledUri']: uri_same = True else: if (group_labeledUri != 'NOT PERMITTED') and \ (group_labeledUri != ''): before_dict['labeledUri'] = \ initial_record[1][0][1]['labeledUri'] after_dict['labeledUri'] = \ process_input(group_labeledUri) except Exception, error: uri_same = True if after_dict.keys() != []: try: #logger.info( #"modifying group with dn= '{0}'\nbefore={1}\n" + \ #"after={2}".format(group_dn, before_dict, after_dict)) results = modify(group_dn, #change from: before_dict, #change to: after_dict, my_creds) except Exception, error: logger.info("user=\"{0}\" " + \ "action=\"Error modifying: {1} to: {2}\" error=\"{3}\"" .format(request.user, before_dict, after_dict, error)) template = loader.get_template( 'modify_results.html' ) context = Context() return render_to_response( 'modify_results.html', {"result":"there was an error during modify" +\ " for {0}: {1} {2}".format( Exception, error, after_dict.keys())}, context_instance=RequestContext(request) ) elif not cn_same: logger.info("user=\"{0}\" action=\"changed cn for " +\ "group: {1} to: {2}\"" .format(request.user, group_dn, group_name)) template = loader.get_template( 'modify_results.html' ) context = Context() return render_to_response( 'modify_results.html', { "result":"Modified group\'s cn." }, context_instance=RequestContext(request) ) else: logger.info("user=\"{0}\" action=\"attempted to modify" +\ " with no changes\"".format(request.user)) template = loader.get_template( 'modify_results.html' ) context = Context() return render_to_response( 'modify_results.html', { "result":"No changes specified." }, context_instance=RequestContext(request) ) try: if ',' in group_name: group_name = group_name.split(',')[0] #logger.info( # "search_term: {0}".format( # "cn={0}".format( # group_name.replace("(","*").replace(")","*")))) #debug end_results = search( 'cn={0}'.format( group_name.replace("(","*").replace(")","*")), {'basedn':'ou=groups,dc=pdx,dc=edu'}, my_creds) group_dn = end_results[1][0][0] result_dict = end_results[1][0][1] except Exception, error: logger.info( "user=\"{0}\" action=\"error fetching record " +\ "for cn: {1}\" error=\"{2}\"".format( request.user, group_name, error)) template = loader.get_template( 'modify_results.html' ) context = Context() return render_to_response( 'modify_results.html', { 'result':'Error fetching record for " +\ "cn={0}<br/>{1}: {2}'.format( group_name, str(Exception), error) }, context_instance=RequestContext(request) ) try: if 'labeledUri' in result_dict.keys(): logger.info( "user=\"{0}\" action=\"modified: {1} to: {2}\"" \ .format(request.user, group_name, result_dict)) template = loader.get_template('modify_results.html') context = Context() return render_to_response( 'modify_results.html', { 'result':json.dumps({'dn':group_dn, 'cn':result_dict['cn'], 'preferredcn':result_dict['preferredcn'], 'room':result_dict['roomNumber'], 'phone':result_dict['telephoneNumber'], 'email':result_dict['mail'], 'labeledUri':result_dict['labeledUri'], 'success':True}) }, context_instance=RequestContext(request) ) else: logger.info( "user=\"{0}\" action=\"modified: {1} to: {2}\"" \ .format(request.user, group_name, result_dict)) template = loader.get_template( 'modify_results.html' ) context = Context() return render_to_response( 'modify_results.html', { 'result':json.dumps( {'dn':group_dn, 'cn':result_dict['cn'], 'preferredcn':result_dict['preferredcn'], 'room':result_dict['roomNumber'], 'phone':result_dict['telephoneNumber'], 'email':result_dict['mail'], 'success':True}) }, context_instance=RequestContext(request) ) except Exception, error: logger.info( "user=\"{0}\" action=\"modified: {1} to: {2}\" " +\ "error=\"{3}\"".format( request.user, group_name, result_dict, error)) template = loader.get_template( 'modify_results.html' ) context = Context() return render_to_response( 'modify_results.html', { 'result':json.dumps( {'dn':group_dn, 'cn':result_dict['cn'], 'preferredcn':result_dict['preferredcn'], 'room':result_dict['roomNumber'], 'phone':result_dict['telephoneNumber'], 'email':result_dict['mail'], 'success':True}) }, context_instance=RequestContext(request) )
logger.info( "user=\"{0}\" action=\"No existing record for: {1}\"" \ .format(request.user, group_dn)) template = loader.get_template( 'modify_results.html' ) context = Context() return render_to_response( 'modify_results.html', { 'result':json.dumps( {'success':False, 'message':'dn="{0}" is not an existing record' \ .format(group_dn)}) }, context_instance=RequestContext(request) ) elif (request.path == '/query/'): #logger.info("user: {0}".format(request.user)) form = LdapQueryForm( request.POST ) #check if form valid if not form.is_valid(): logger.info( "user=\"{0}\" action=\"submitted invalid query " +\ "form: {1}\"".format(request.user, form)) template = loader.get_template( 'modify_results.html' ) context = Context() return render_to_response( 'modify_results.html', { "result":"form not valid..." }, context_instance=RequestContext(request) ) #handle form submission else: #get form info & log it