def post_response(request_dict, keep_connection, client_ip): if request_dict['Content-Type'][0] != 'multipart/form-data': return header_maker('400', keep_connection=False) boundary = None for content_info in request_dict['Content-Type']: if content_info.startswith('boundary='): boundary = content_info[9:] if boundary is None: return header_maker('400', keep_connection=False) info_list = request_dict['body'].split('--' + boundary) info_list = info_list[1:-1] for index, item in enumerate(info_list): info_list[index] = item[2:-2] contents_dicts = [{} for thank_you_frenkel in range(len(info_list))] for info_num, info in enumerate(info_list): contents_dicts[info_num]['header'] = info.split('\r\n\r\n')[0] contents_dicts[info_num]['data'] = info.split('\r\n\r\n')[1] for item_num, item in enumerate(contents_dicts): header = item['header'].split('\r\n') for line in header: if line.startswith('Content-Disposition: form-data; '): variables = line[32:].split('; ') variables_dict = {} for variable in variables: variables_dict[variable.split('=')[0]] = variable.split('=')[1][1:-1] contents_dicts[item_num].update(variables_dict) file_ending = None file_name = None file_password = None file_data = None for content in contents_dicts: if content['name'] == 'name': file_name = content['data'] elif content['name'] == 'password': file_password = content['data'] elif content['name'] == 'file': if len(content['filename'].split('.')) == 1: file_ending = '' else: file_ending = content['filename'].split('.')[-1] file_data = content['data'] if file_name is None or Utility.all_chars(file_name.replace('%20', ' '), ' ') or file_data is None: return header_maker('400', keep_connection=False) if file_ending != '': file_name = '%s.%s' % (file_name, file_ending) if file_password is None: file_password = '' file_saved = MemoryHandler.hash_save_file(file_name, file_password, file_data) if file_saved: message = '<i>file saved, you can get it at:</i><br><u>http://%s/getfile?name=%s' % (MemoryHandler.get_server_settings()['domain'], file_name.replace(' ', '%20')) if file_password != '': message += '&password='******' ', '%20') message += '</u>' else: message = 'file not saved' got_file, replay_file = MemoryHandler.get_server_file('uploadfile.html') if not got_file: return header_maker('500', keep_connection=False) new_replay_text = Utility.add_to_mark(replay_file, message) return header_maker('200', content_len=str(len(new_replay_text)), download_file=False, keep_connection=keep_connection, file_name='uploadfile.html') + new_replay_text