def delete_interface_connection(request): return_dict = {} try: req_ret, err = django_utils.get_request_parameter_values( request, ['name']) if err: raise Exception(err) if 'name' not in req_ret: raise Exception('Invalid request, please use the menus') name = req_ret['name'] return_dict["name"] = name if request.method == "GET": # Return the conf page return django.shortcuts.render_to_response("delete_interface_connection_conf.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: result, err = networking.delete_interfaces_connection(name) if not result: if err: raise Exception(err) else: raise Exception("Error resetting address configuration") audit_str = "Reset the address configuration of interface %s" % ( name) audit.audit("delete_interfaces_connection", audit_str, request) return django.http.HttpResponseRedirect('/networking/view_interfaces?ack=reset') except Exception, e: return_dict['base_template'] = "networking_base.html" return_dict["page_title"] = 'Reset address configuration' return_dict['tab'] = 'view_interfaces_tab' return_dict["error"] = 'Error resetting interface address configuration' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def delete_nfs_share(request): return_dict = {} try: if request.method == "GET": # Return the conf page path = request.GET["path"] return_dict["path"] = path return django.shortcuts.render_to_response("delete_nfs_share_conf.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: path = request.POST["path"] #logger.debug("Delete share request for name %s"%name) result, err = nfs.delete_share(path) if err: raise Exception(err) audit_str = "Deleted NFS share %s" % path audit.audit("delete_nfs_share", audit_str, request) return django.http.HttpResponseRedirect('/view_nfs_shares?ack=deleted') except Exception, e: return_dict['base_template'] = "shares_base.html" return_dict["page_title"] = 'Remove NFS share ' return_dict['tab'] = 'view_nfs_shares_tab' return_dict["error"] = 'Error removing NFS share' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def upload_ssl_certificate(request): return_dict = {} try: if request.method == "GET": # Return the conf page form = keys_certs_forms.UploadCertForm() return_dict['form'] = form return django.shortcuts.render_to_response("upload_ssl_certificate.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: form = keys_certs_forms.UploadCertForm(request.POST) return_dict['form'] = form if not form.is_valid(): return django.shortcuts.render_to_response("upload_ssl_certificate.html", return_dict, context_instance=django.template.context.RequestContext(request)) cd = form.cleaned_data ret, err = pki.upload_ssl_certificate(cd) if err: raise Exception(err) audit_str = "Uploaded a SSL certificate named %s" % cd['name'] audit.audit("upload_certificate", audit_str, request.META) return django.http.HttpResponseRedirect('/keys_certs/view_ssl_certificates?ack=uploaded_cert') except Exception, e: return_dict['base_template'] = "keys_certs_base.html" return_dict["page_title"] = 'Upload a SSL certificate' return_dict['tab'] = 'certificates_tab' return_dict["error"] = 'Error uploading a SSL certificate' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def delete_ssl_certificate(request): return_dict = {} try: ret, err = django_utils.get_request_parameter_values(request, ['name']) if err: raise Exception(err) if 'name' not in ret: raise Exception("Invalid request, please use the menus.") name = ret['name'] return_dict["name"] = name if request.method == "GET": # Return the conf page return django.shortcuts.render_to_response("delete_ssl_certificate_conf.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: ret, err = pki.delete_ssl_certificate(name) if err: raise Exception(err) audit_str = "Deleted SSL certificate name '%s'" % name audit.audit("delete_certificate", audit_str, request) return django.http.HttpResponseRedirect('/keys_certs/view_ssl_certificates?ack=deleted') except Exception, e: return_dict['base_template'] = "keys_certs_base.html" return_dict["page_title"] = 'Delete a SSL certificate' return_dict['tab'] = 'certificates_tab' return_dict["error"] = 'Error deleting SSL certificate' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def stop_background_task(request): return_dict = {} try: req_ret, err = django_utils.get_request_parameter_values( request, ['task_id']) if err: raise Exception(err) if 'task_id' not in req_ret: raise Exception('Invalid request. Please use the menus.') task, err = tasks_utils.get_task(req_ret['task_id']) if err: raise Exception(err) ret, err = tasks_utils.stop_task(req_ret['task_id']) if err: raise Exception(err) audit.audit("stop_background_task", task['description'], request) return django.http.HttpResponseRedirect( '/tasks/view_background_tasks?ack=stopped') except Exception, e: return_dict['base_template'] = "tasks_base.html" return_dict["page_title"] = 'Background tasks' return_dict['tab'] = 'view_background_tasks_tab' return_dict["error"] = 'Error stopping background task' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response( "logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def delete_nfs_share(request): return_dict = {} try: if request.method == "GET": # Return the conf page path = request.GET["path"] return_dict["path"] = path return django.shortcuts.render_to_response("delete_nfs_share_conf.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: path = request.POST["path"] #logger.debug("Delete share request for name %s"%name) result, err = nfs.delete_share(path) if err: raise Exception(err) audit_str = "Deleted NFS share %s" % path audit.audit("delete_nfs_share", audit_str, request) return django.http.HttpResponseRedirect('/storage_access/view_nfs_shares?ack=deleted') except Exception, e: return_dict['base_template'] = "storage_access_base.html" return_dict["page_title"] = 'Remove NFS share ' return_dict['tab'] = 'view_nfs_shares_tab' return_dict["error"] = 'Error removing NFS share' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def stop_background_task(request): return_dict = {} try: req_ret, err = django_utils.get_request_parameter_values(request, [ 'task_id']) if err: raise Exception(err) if 'task_id' not in req_ret: raise Exception('Invalid request. Please use the menus.') task, err = tasks_utils.get_task(req_ret['task_id']) if err: raise Exception(err) ret, err = tasks_utils.stop_task(req_ret['task_id']) if err: raise Exception(err) audit.audit("stop_background_task", task['description'], request) return django.http.HttpResponseRedirect('/tasks/view_background_tasks?ack=stopped') except Exception, e: return_dict['base_template'] = "tasks_base.html" return_dict["page_title"] = 'Background tasks' return_dict['tab'] = 'view_background_tasks_tab' return_dict["error"] = 'Error stopping background task' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def delete_scan(request): return_dict = {} try: req_params, err = django_utils.get_request_parameter_values(request, ['scan_id']) if err: raise Exception(err) if 'scan_id' not in req_params: raise Exception('Malformed request. Please use the menus.') scan_id = int(req_params['scan_id']) scans, err = scan_utils.get_scans(scan_id=scan_id) if err: raise Exception(err) if not scans: raise Exception('Unknown scan specified. Please use the menus.') return_dict["scan"] = scans[0] if request.method == "GET": # Return the conf page return django.shortcuts.render_to_response("delete_scan_conf.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: ret, err = scan_utils.delete_scan(scan_id) if err: raise Exception(err) audit_str = "Removed application Storage Insights scan details for folder '%s' run on %s" % (scans[0]['scan_dir'].lower(), scans[0]['initiate_time_str']) audit.audit("application_action", audit_str, request) return django.http.HttpResponseRedirect('/applications/storage_insights/view_scans?ack=deleted_scan') except Exception, e: return_dict['base_template'] = "storage_insights_base.html" return_dict["page_title"] = 'View scans' return_dict['tab'] = 'view_scans_tab' return_dict["error"] = 'Error loading Storage Insight scans' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def delete_cifs_share(request): return_dict = {} try: if request.method == "GET": # Return the conf page share_id = request.GET["share_id"] name = request.GET["name"] return_dict["share_id"] = share_id return_dict["name"] = name return django.shortcuts.render_to_response("delete_cifs_share_conf.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: share_id = request.POST["share_id"] name = request.POST["name"] #logger.debug("Delete share request for name %s"%name) ret, err = cifs.delete_share(share_id) if err: raise Exception(err) ret, err = cifs.generate_smb_conf() if err: raise Exception(err) audit_str = "Deleted CIFS share %s" % name audit.audit("delete_cifs_share", audit_str, request) return django.http.HttpResponseRedirect('/storage_access/view_cifs_shares?ack=deleted') except Exception, e: return_dict['base_template'] = "storage_access_base.html" return_dict["page_title"] = 'Delete a CIFS share' return_dict['tab'] = 'view_cifs_shares_tab' return_dict["error"] = 'Error deleting a CIFS share' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def delete_local_user(request): return_dict = {} try: req_ret, err = django_utils.get_request_parameter_values(request, [ 'username']) if err: raise Exception(err) if 'username' not in req_ret: raise Exception('Invalid request, please use the menus.') if request.method == "GET": # Return the form return_dict["username"] = request.GET["username"] return django.shortcuts.render_to_response("delete_local_user_conf.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: # Form submission so create return_dict = {} ret, err = local_users.delete_local_user(request.POST["username"]) if not ret: if err: raise Exception(err) else: raise Exception('Error deleting local user') audit_str = "Deleted a local user %s" % request.POST["username"] audit.audit("delete_local_user", audit_str, request) url = '/users_groups/view_local_users?ack=deleted' return django.http.HttpResponseRedirect(url) except Exception, e: return_dict['base_template'] = 'users_groups_base.html' return_dict["page_title"] = 'Delete a local user' return_dict['tab'] = 'view_local_users_tab' return_dict["error"] = 'Error deleting a local user' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def create_ftp_user_dirs(request): return_dict = {} try: config, err = vsftp.get_ftp_config() if err: raise Exception(err) if 'dataset' not in config: raise Exception( 'No home dataset has been configured for the FTP service. Please do that before creating FTP home directories') users, err = local_users.get_local_users() if err: raise Exception(err) res, err = vsftp.create_ftp_user_dirs(config['dataset'], users) if err: raise Exception(err) audit.audit("create_ftp_dir", 'Created FTP user directories', request) return django.http.HttpResponseRedirect('/storage_access/view_ftp_configuration?ack=dirs_created') except Exception, e: return_dict['base_template'] = "storage_access_base.html" return_dict["page_title"] = 'Create FTP user directories' return_dict['tab'] = 'ftp_service_settings' return_dict["error"] = 'Error creating FTP user directories ' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def reboot_or_shutdown(request): return_dict = {} audit_str = "" try: minutes_to_wait = 1 return_dict['minutes_to_wait'] = minutes_to_wait ret, err = django_utils.get_request_parameter_values(request, ['do']) if err: raise Exception(err) if 'do' not in ret: raise Exception("Invalid request, please use the menus.") do = ret['do'] return_dict['do'] = do if request.method == "GET": return django.shortcuts.render_to_response("reboot_or_shutdown.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: if 'conf' not in request.POST: raise Exception('Unknown action. Please use the menus') audit.audit('reboot_shutdown', 'System %s initiated' % do, request) if do == 'reboot': command.execute_with_rc('shutdown -r +%d' % minutes_to_wait) elif do == 'shutdown': command.execute_with_rc('shutdown -h +%d' % minutes_to_wait) return django.shortcuts.render_to_response("reboot_or_shutdown_conf.html", return_dict, context_instance=django.template.context.RequestContext(request)) except Exception, e: return_dict['base_template'] = "system_base.html" return_dict["page_title"] = 'Reboot or Shutdown Failure' return_dict['tab'] = 'reboot_tab' return_dict["error"] = 'Error Rebooting' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response('logged_in_error.html', return_dict, context_instance=django.template.context.RequestContext(request))
def update_org_info(request): return_dict = {} try: if request.method == "GET": org_info, err = system_info.get_org_info() if err: raise Exception(err) form = system_forms.OrgInfoForm(initial=org_info) return_dict["form"] = form return django.shortcuts.render_to_response("update_org_info.html", return_dict, context_instance=django.template.context.RequestContext(request)) elif request.method == "POST": form = system_forms.OrgInfoForm(request.POST) return_dict["form"] = form if not form.is_valid(): return django.shortcuts.render_to_response("update_org_info.html", return_dict, context_instance=django.template.context.RequestContext(request)) cd = form.cleaned_data ret, err = system_info.update_org_info(cd) if err: raise Exception(err) audit_str = 'Updated organization information: %s' % str(cd) audit.audit('update_org_info', audit_str, request) return django.http.HttpResponseRedirect("/system/view_system_info?ack=update_org_info_ok") except Exception, e: return_dict['base_template'] = "system_base.html" return_dict["page_title"] = "Update organization's information" return_dict['tab'] = 'system_info_tab' return_dict["error"] = 'Error updating organization information' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def delete_local_user(request): return_dict = {} try: req_ret, err = django_utils.get_request_parameter_values(request, [ 'username']) if err: raise Exception(err) if 'username' not in req_ret: raise Exception('Invalid request, please use the menus.') if request.method == "GET": # Return the form return_dict["username"] = request.GET["username"] return django.shortcuts.render_to_response("delete_local_user_conf.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: # Form submission so create return_dict = {} ret, err = local_users.delete_local_user(request.POST["username"]) if not ret: if err: raise Exception(err) else: raise Exception('Error deleting local user') audit_str = "Deleted a local user %s" % request.POST["username"] audit.audit("delete_local_user", audit_str, request) url = '/view_local_users?ack=deleted' return django.http.HttpResponseRedirect(url) except Exception, e: return_dict['base_template'] = 'users_groups_base.html' return_dict["page_title"] = 'Delete a local user' return_dict['tab'] = 'view_local_users_tab' return_dict["error"] = 'Error deleting a local user' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def run_rsync_remote_replication(remote_replication_id): fail_audit_str = '' try: rr, err = remote_replication.get_remote_replications( remote_replication_id) if err: raise Exception('Could not fetch replication details: %s' % err) replication = rr[0] mode = replication['mode'] fail_audit_str = 'Replication description: %s\n' % replication[ 'description'] fail_audit_str += 'Schedule description: %s\n' % replication[ 'schedule_description'] if mode != 'rsync': raise Exception('Invalid replication mode') ret, err = remote_replication.run_rsync_remote_replication( remote_replication_id) if err: raise Exception(err) except Exception, e: audit.audit("task_fail", "Did not initiate replication:\n%s - %s" % (fail_audit_str, e), None, system_initiated=True) return False, 'Error adding rsync remote replication task: %s' % e
def reboot_or_shutdown(request): return_dict = {} audit_str = "" try: minutes_to_wait = 1 return_dict['minutes_to_wait'] = minutes_to_wait ret, err = django_utils.get_request_parameter_values(request, ['do']) if err: raise Exception(err) if 'do' not in ret: raise Exception("Invalid request, please use the menus.") do = ret['do'] return_dict['do'] = do if request.method == "GET": return django.shortcuts.render_to_response("reboot_or_shutdown.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: if 'conf' not in request.POST: raise Exception('Unknown action. Please use the menus') audit.audit('reboot_shutdown', 'System %s initiated' % do, request) if do == 'reboot': command.execute_with_rc('shutdown -r +%d' % minutes_to_wait) elif do == 'shutdown': command.execute_with_rc('shutdown -h +%d' % minutes_to_wait) return django.shortcuts.render_to_response("reboot_or_shutdown_conf.html", return_dict, context_instance=django.template.context.RequestContext(request)) except Exception, e: return_dict['base_template'] = "system_base.html" return_dict["page_title"] = 'Reboot or Shutdown Failure' return_dict['tab'] = 'reboot_tab' return_dict["error"] = 'Error Rebooting' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response('logged_in_error.html', return_dict, context_instance=django.template.context.RequestContext(request))
def create_ftp_user_dirs(request): return_dict = {} try: config, err = vsftp.get_ftp_config() if err: raise Exception(err) if 'dataset' not in config: raise Exception( 'No home dataset has been configured for the FTP service. Please do that before creating FTP home directories') users, err = local_users.get_local_users() if err: raise Exception(err) res, err = vsftp.create_ftp_user_dirs(config['dataset'], users) if err: raise Exception(err) audit.audit("create_ftp_dir", 'Created FTP user directories', request) return django.http.HttpResponseRedirect('/view_ftp_configuration?ack=dirs_created') except Exception, e: return_dict['base_template'] = "services_base.html" return_dict["page_title"] = 'Create FTP user directories' return_dict['tab'] = 'ftp_service_settings' return_dict["error"] = 'Error creating FTP user directories ' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def delete_iscsi_target(request): return_dict = {} try: req_ret, err = django_utils.get_request_parameter_values(request, [ 'target_name']) if err: raise Exception(err) if 'target_name' not in req_ret: raise Exception( "Invalid request, please use the menus.") target_name = req_ret['target_name'] if request.method == "GET": return_dict["target_name"] = target_name return django.shortcuts.render_to_response("delete_iscsi_target_conf.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: ret, err = iscsi_stgt.delete_target(target_name) if not ret: if err: raise Exception(err) else: raise Exception("Unknown error") audit_str = "Deleted ISCSI target %s" % target_name url = '/storage_access/view_iscsi_targets?ack=target_deleted' audit.audit("delete_iscsi_target", audit_str, request) return django.http.HttpResponseRedirect(url) except Exception, e: return_dict['base_template'] = "storage_access_base.html" return_dict["page_title"] = 'Remove an ISCSI targets' return_dict['tab'] = 'view_iscsi_targets_tab' return_dict["error"] = 'Error removing an ISCSI target' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def sync_ntp(request): return_dict = {} try: output, err = ntp.sync_ntp() if err: raise Exception(err) else: if 'ntp_sync' in output and output[ 'ntp_sync'] == True and 'server_used' in output: audit_str = "Performed a one time NTP sync to server %s" % output[ 'server_used'] audit.audit("ntp_sync", audit_str, request) return django.http.HttpResponseRedirect( "/system/view_ntp_settings?ack=ntp_synced&server_used=%s" % output['server_used']) else: raise Exception("NTP sync failed") except Exception, e: return_dict['base_template'] = "system_base.html" return_dict["page_title"] = 'View NTP settings' return_dict['tab'] = 'ntp_settings_tab' return_dict["error"] = 'Error retrieving syncing with ntp servers' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response( "logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def create_iscsi_target(request): return_dict = {} try: if request.method == "GET": # Return the form form = iscsi_stgt_forms.IscsiTargetForm() return_dict["form"] = form return django.shortcuts.render_to_response("create_iscsi_target.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: # Form submission so create return_dict = {} form = iscsi_stgt_forms.IscsiTargetForm(request.POST) if form.is_valid(): cd = form.cleaned_data ret, err = iscsi_stgt.create_target(cd["name"]) if not ret: if err: raise Exception(err) else: raise Exception("Unknown error.") audit_str = "Created an ISCSI target %s" % cd["name"] audit.audit("create_iscsi_target", audit_str, request) url = '/view_iscsi_targets?ack=created' return django.http.HttpResponseRedirect(url) else: return_dict["form"] = form return django.shortcuts.render_to_response("create_iscsi_target.html", return_dict, context_instance=django.template.context.RequestContext(request)) except Exception, e: return_dict['base_template'] = "shares_base.html" return_dict["page_title"] = 'Create an ISCSI target' return_dict['tab'] = 'view_iscsi_targets_tab' return_dict["error"] = 'Error creating an ISCSI target' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def delete_cifs_share(request): return_dict = {} try: if request.method == "GET": # Return the conf page share_id = request.GET["share_id"] name = request.GET["name"] return_dict["share_id"] = share_id return_dict["name"] = name return django.shortcuts.render_to_response("delete_cifs_share_conf.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: share_id = request.POST["share_id"] name = request.POST["name"] #logger.debug("Delete share request for name %s"%name) ret, err = cifs.delete_share(share_id) if err: raise Exception(err) ret, err = cifs.generate_smb_conf() if err: raise Exception(err) audit_str = "Deleted CIFS share %s" % name audit.audit("delete_cifs_share", audit_str, request) return django.http.HttpResponseRedirect('/storage_access/view_cifs_shares?ack=deleted') except Exception, e: return_dict['base_template'] = "storage_access_base.html" return_dict["page_title"] = 'Delete a CIFS share' return_dict['tab'] = 'view_cifs_shares_tab' return_dict["error"] = 'Error deleting a CIFS share' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def delete_remote_monitoring_server(request): return_dict = {} try: req_ret, err = django_utils.get_request_parameter_values(request, [ 'view', 'ip']) if err: raise Exception(err) if 'ip' not in req_ret: raise Exception('Invalid request, please use the menus.') ip = req_ret['ip'] servers, err = remote_monitoring.get_servers() if err: raise Exception(err) if ip not in servers.keys(): raise Exception( 'Specified server is currently not being remote monitored.') name = servers[ip]['name'] ret, err = remote_monitoring.delete_server(ip) if err: raise Exception(err) audit_str = 'Removed the remote monitoring server with IP : %s name : %s' % ( ip, name) audit.audit("delete_remote_monitoring_server", audit_str, request) return django.http.HttpResponseRedirect('/monitoring/view_remote_monitoring_servers?ack=deleted') except Exception, e: return_dict["page_title"] = 'Remove remote server monitoring server' return_dict['tab'] = 'remote_monitoring_tab' return_dict["error"] = 'Error removing remote monitoring server' return_dict['base_template'] = "monitoring_base.html" return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def delete_iscsi_target(request): return_dict = {} try: req_ret, err = django_utils.get_request_parameter_values(request, [ 'target_name']) if err: raise Exception(err) if 'target_name' not in req_ret: raise Exception( "Invalid request, please use the menus.") target_name = req_ret['target_name'] if request.method == "GET": return_dict["target_name"] = target_name return django.shortcuts.render_to_response("delete_iscsi_target_conf.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: ret, err = iscsi_stgt.delete_target(target_name) if not ret: if err: raise Exception(err) else: raise Exception("Unknown error") audit_str = "Deleted ISCSI target %s" % target_name url = '/view_iscsi_targets?ack=target_deleted' audit.audit("delete_iscsi_target", audit_str, request) return django.http.HttpResponseRedirect(url) except Exception, e: return_dict['base_template'] = "shares_base.html" return_dict["page_title"] = 'Remove an ISCSI targets' return_dict['tab'] = 'view_iscsi_targets_tab' return_dict["error"] = 'Error removing an ISCSI target' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def create_iscsi_target(request): return_dict = {} try: if request.method == "GET": # Return the form form = iscsi_stgt_forms.IscsiTargetForm() return_dict["form"] = form return django.shortcuts.render_to_response("create_iscsi_target.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: # Form submission so create return_dict = {} form = iscsi_stgt_forms.IscsiTargetForm(request.POST) if form.is_valid(): cd = form.cleaned_data ret, err = iscsi_stgt.create_target(cd["name"]) if not ret: if err: raise Exception(err) else: raise Exception("Unknown error.") audit_str = "Created an ISCSI target %s" % cd["name"] audit.audit("create_iscsi_target", audit_str, request) url = '/storage_access/view_iscsi_targets?ack=created' return django.http.HttpResponseRedirect(url) else: return_dict["form"] = form return django.shortcuts.render_to_response("create_iscsi_target.html", return_dict, context_instance=django.template.context.RequestContext(request)) except Exception, e: return_dict['base_template'] = "storage_access_base.html" return_dict["page_title"] = 'Create an ISCSI target' return_dict['tab'] = 'view_iscsi_targets_tab' return_dict["error"] = 'Error creating an ISCSI target' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def run_rsync_remote_replication(remote_replication_id): fail_audit_str = '' try: rr, err = remote_replication.get_remote_replications( remote_replication_id) if err: raise Exception('Could not fetch replication details: %s' % err) replication = rr[0] mode = replication['mode'] fail_audit_str = 'Replication description: %s\n' % replication['description'] fail_audit_str += 'Schedule description: %s\n' % replication['schedule_description'] if mode != 'rsync': raise Exception('Invalid replication mode') ret, err = remote_replication.run_rsync_remote_replication( remote_replication_id) if err: raise Exception(err) except Exception, e: audit.audit("task_fail", "Did not initiate replication:\n%s - %s" % (fail_audit_str, e), None, system_initiated=True) return False, 'Error adding rsync remote replication task: %s' % e
def delete_rsync_share(request): return_dict = {} try: if request.method == "GET": name = request.GET.get("name") return_dict["name"] = name return django.shortcuts.render_to_response( "delete_rsync_share.html", return_dict, context_instance=django.template.context.RequestContext( request)) else: name = request.POST.get("name") delshare, err = rsync.delete_rsync_share(name) if err: raise Exception(err) audit_str = "Deleted RSYNC share %s" % name audit.audit("delete_rsync_share", audit_str, request) return django.http.HttpResponseRedirect( "/storage_access/view_rsync_shares/?ack=deleted") except Exception, e: return_dict['base_template'] = "storage_access_base.html" return_dict["page_title"] = 'RSync shares' return_dict['tab'] = 'view_rsync_shares_tab' return_dict["error"] = 'Error deleting RSync share' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response( "logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def delete_scan_configuration(request): return_dict = {} try: type = 'mark_deleted' req_params, err = django_utils.get_request_parameter_values( request, ['scan_configuration_id', 'type']) if err: raise Exception(err) if 'scan_configuration_id' not in req_params: raise Exception('Malformed request. Please use the menus.') scan_configuration_id = int(req_params['scan_configuration_id']) if 'type' in req_params and req_params['type'] == 'expunge': type = 'expunge' configurations, err = scan_utils.get_scan_configurations( scan_configuration_id=scan_configuration_id, include_deleted=True) else: configurations, err = scan_utils.get_scan_configurations( scan_configuration_id=scan_configuration_id) if err: raise Exception(err) if not configurations: raise Exception( 'Invalid configuration specified. Please us the menus.') return_dict["configuration"] = configurations[0] return_dict["type"] = type if request.method == "GET": # Return the conf page return django.shortcuts.render_to_response( "delete_scan_configuration_conf.html", return_dict, context_instance=django.template.context.RequestContext( request)) else: ret, err = scan_utils.delete_scan_configuration(configurations[0], type=type) if err: raise Exception(err) audit_str = "Removed application Storage Insights configuration for folder '%s'" % ( configurations[0]['scan_dir'].lower()) audit.audit("application_action", audit_str, request) return django.http.HttpResponseRedirect( '/applications/storage_insights/view_scan_configurations?ack=deleted_scan_configuration' ) except Exception, e: return_dict['base_template'] = "storage_insights_base.html" return_dict["page_title"] = 'Remove folder scan configuration' return_dict['tab'] = 'scan_configurations_tab' return_dict[ "error"] = 'Error removing Storage Insight folder scan configuration' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response( "logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def update_remote_replication_user_comment(request): """Modifies only the user comment, not any other field """ return_dict = {} try: ret, err = django_utils.get_request_parameter_values( request, ['remote_replication_id']) if err: raise Exception(err) if 'remote_replication_id' not in ret: raise Exception( "Requested remote replication not found, please use the menus.") remote_replication_id = ret['remote_replication_id'] replications, err = remote_replication.get_remote_replications( remote_replication_id) if err: raise Exception(err) if not replications: raise Exception('Specified replication definition not found') if request.method == "GET": return_dict['replication'] = replications[0] if return_dict['replication']['mode'] == 'rsync': rsync_switches = {} rsync_switches['long'] = return_dict['replication']['rsync'][0]['long_switches'] rsync_switches['short'] = return_dict['replication']['rsync'][0]['short_switches'] return_dict['rsync_switches_description'], err = rsync.form_switches_description(rsync_switches) if err: raise Exception('Could not parse rsync switches description: %s' % err) return django.shortcuts.render_to_response('update_remote_replication_user_comment.html', return_dict, context_instance=django.template.context.RequestContext(request)) elif request.method == "POST": if ('user_comment') not in request.POST: raise Exception("Incomplete request.") user_comment = request.POST.get('user_comment') description = '' description += 'User comment: %s' % user_comment description += '\nDescription: %s' % replications[0]['description'] # update comment is_update, err = remote_replication.update_remote_replication_user_comment( remote_replication_id, user_comment) if err: raise Exception(err) audit.audit("update_remote_replication_user_comment", description, request) return django.http.HttpResponseRedirect('/replication/view_remote_replications?ack=user_comment_updated') except Exception as e: return_dict['base_template'] = "replication_base.html" return_dict["page_title"] = 'Update remote replication user comment' return_dict['tab'] = 'view_remote_replications_tab' return_dict["error"] = 'Error updating replication comment' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def create_iscsi_user_authentication(request): return_dict = {} try: req_ret, err = django_utils.get_request_parameter_values( request, ['target_name', 'authentication_type']) if err: raise Exception(err) if ('target_name' and 'authentication_type') not in req_ret: raise Exception( "Invalid request, please use the menus.") authentication_type = req_ret['authentication_type'] target_name = req_ret['target_name'] if authentication_type not in ['incoming', 'outgoing']: raise Exception("Invalid user type. Please use the menus.") if request.method == "GET": # Return the form initial = {} initial['authentication_type'] = authentication_type initial['target_name'] = target_name form = iscsi_stgt_forms.IscsiAuthenticationForm(initial=initial) return_dict["form"] = form return django.shortcuts.render_to_response("create_iscsi_target_user.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: # Form submission so create return_dict = {} form = iscsi_stgt_forms.IscsiAuthenticationForm(request.POST) if form.is_valid(): cd = form.cleaned_data ret, err = iscsi_stgt.add_user_authentication( cd['target_name'], cd['authentication_type'], cd["username"], cd["password"]) if not ret: if err: raise Exception(err) else: raise Exception("Error adding the ISCSI target user.") if cd['authentication_type'] == 'incoming': audit_str = "Added ISCSI initiator authentication user %s for target %s" % ( cd["username"], cd['target_name']) url = '/storage_access/view_iscsi_target?name=%s&ack=added_initiator_authentication' % target_name else: audit_str = "Added ISCSI target authentication user %s for target %s" % ( cd["username"], cd['target_name']) url = '/storage_access/view_iscsi_target?name=%s&ack=added_target_authentication' % target_name audit.audit("add_iscsi_target_authentication", audit_str, request) return django.http.HttpResponseRedirect(url) else: return_dict["form"] = form return django.shortcuts.render_to_response("create_iscsi_target_user.html", return_dict, context_instance=django.template.context.RequestContext(request)) except Exception, e: return_dict['base_template'] = "storage_access_base.html" return_dict["page_title"] = 'Add ISCSI authentication user' return_dict['tab'] = 'view_iscsi_targets_tab' return_dict["error"] = 'Error adding ISCSI authentication user' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def create_iscsi_user_authentication(request): return_dict = {} try: req_ret, err = django_utils.get_request_parameter_values( request, ['target_name', 'authentication_type']) if err: raise Exception(err) if ('target_name' and 'authentication_type') not in req_ret: raise Exception( "Invalid request, please use the menus.") authentication_type = req_ret['authentication_type'] target_name = req_ret['target_name'] if authentication_type not in ['incoming', 'outgoing']: raise Exception("Invalid user type. Please use the menus.") if request.method == "GET": # Return the form initial = {} initial['authentication_type'] = authentication_type initial['target_name'] = target_name form = iscsi_stgt_forms.IscsiAuthenticationForm(initial=initial) return_dict["form"] = form return django.shortcuts.render_to_response("create_iscsi_target_user.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: # Form submission so create return_dict = {} form = iscsi_stgt_forms.IscsiAuthenticationForm(request.POST) if form.is_valid(): cd = form.cleaned_data ret, err = iscsi_stgt.add_user_authentication( cd['target_name'], cd['authentication_type'], cd["username"], cd["password"]) if not ret: if err: raise Exception(err) else: raise Exception("Error adding the ISCSI target user.") if cd['authentication_type'] == 'incoming': audit_str = "Added ISCSI initiator authentication user %s for target %s" % ( cd["username"], cd['target_name']) url = '/view_iscsi_target?name=%s&ack=added_initiator_authentication' % target_name else: audit_str = "Added ISCSI target authentication user %s for target %s" % ( cd["username"], cd['target_name']) url = '/view_iscsi_target?name=%s&ack=added_target_authentication' % target_name audit.audit("add_iscsi_target_authentication", audit_str, request) return django.http.HttpResponseRedirect(url) else: return_dict["form"] = form return django.shortcuts.render_to_response("create_iscsi_target_user.html", return_dict, context_instance=django.template.context.RequestContext(request)) except Exception, e: return_dict['base_template'] = "shares_base.html" return_dict["page_title"] = 'Add ISCSI authentication user' return_dict['tab'] = 'view_iscsi_targets_tab' return_dict["error"] = 'Error adding ISCSI authentication user' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def create_rsync_share(request): return_dict = {} try: pools, err = zfs.get_pools() if err: raise Exception(err) ds_list = [] for pool in pools: for ds in pool["datasets"]: if ds['properties']['type']['value'] == 'filesystem': ds_list.append( {'name': ds["name"], 'mountpoint': ds["mountpoint"]}) if not ds_list: raise Exception( 'No ZFS datasets available. Please create a dataset before creating shares.') if request.method == "GET": form = rsync_forms.CreateShareForm(dataset_list=ds_list) return_dict['form'] = form return django.shortcuts.render_to_response("create_rsync_share.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: form = rsync_forms.CreateShareForm( request.POST, dataset_list=ds_list) path = request.POST.get("path") if not os.path.exists(path): os.mkdir(path) owner_dict, err = config.get_default_file_dir_owner() if err: raise Exception(err) owner_uid, err = config.get_system_uid_gid( owner_dict['user'], 'user') if err: raise Exception(err) owner_gid, err = config.get_system_uid_gid( owner_dict['group'], 'group') if err: raise Exception(err) os.chown(path, owner_uid, owner_gid) return_dict['form'] = form if not form.is_valid(): return django.shortcuts.render_to_response("create_rsync_share.html", return_dict, context_instance=django.template.context.RequestContext(request)) cd = form.cleaned_data result, err = rsync.create_rsync_share( cd["name"], cd["path"], cd["comment"], cd["browsable"], cd["readonly"], "integralstor", "integralstor") if err: raise Exception(err) audit_str = "Created RSYNC share with name '%s'. The share is set to be %s and %s" % ( cd["name"], "Browsable" if cd["browsable"] else "Not Browsable", "Readonly" if cd["readonly"] else "Read/Write") audit.audit("create_rsync_share", audit_str, request) return django.http.HttpResponseRedirect('/storage_access/view_rsync_shares/?ack=created') except Exception, e: return_dict['base_template'] = "storage_access_base.html" return_dict["page_title"] = 'RSync shares' return_dict['tab'] = 'view_rsync_shares_tab' return_dict["error"] = 'Error creating RSync shares' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def update_admin_password(request): """ Used to change a user's password for the management utility""" try: return_dict = {} if request.user and request.user.is_authenticated(): if request.method == 'POST': iv_logging.debug("Admin password change posted") # user has submitted the password info form = admin_forms.ChangeAdminPasswordForm(request.POST) if form.is_valid(): cd = form.cleaned_data oldPasswd = cd['oldPasswd'] newPasswd1 = cd['newPasswd1'] newPasswd2 = cd['newPasswd2'] # Checking for old password is done in the form itself if request.user.check_password(oldPasswd): if newPasswd1 == newPasswd2: # all systems go so now change password request.user.set_password(newPasswd1) request.user.save() return_dict[ 'ack_message'] = 'Password changed sucessful.' iv_logging.info( "Admin password change request successful.") audit_str = "Changed admin password" audit.audit("modify_admin_password", audit_str, request) else: return_dict['error'] = 'New passwords do not match' # else invalid form or error so existing form data to return_dict and # fall through to redisplay the form if 'success' not in return_dict: return_dict['form'] = form iv_logging.info("Admin password change request failed.") else: form = admin_forms.ChangeAdminPasswordForm() return_dict['form'] = form return django.shortcuts.render_to_response( 'update_admin_password_form.html', return_dict, context_instance=django.template.context.RequestContext( request)) else: # User not authenticated so return a login screen return django.http.HttpResponseRedirect('/login/') except Exception, e: return_dict['base_template'] = "system_base.html" return_dict["page_title"] = 'Change admininistrator password' return_dict['tab'] = 'system_info_tab' return_dict["error"] = 'Error changing administrator password' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response( 'logged_in_error.html', return_dict, context_instance=django.template.context.RequestContext(request))
def upload_ssh_user_key(request): return_dict = {} try: user = request.GET.get('user', 'replicator') return_dict["selected_user"] = user if request.method == 'POST': # This works for user deleting the key files. This should be moved # to a new function in itself authorized_key = request.POST.get('authorized_key', None) if authorized_key: description = "" user = request.POST.get("selected_user") key = request.POST.get("authorized_key") description = "%s" % (user) audit.audit("remove_ssh_user_key", description, request) files = open((pki._get_authorized_file(user)), 'r').readlines() authorized_keys = open(pki._get_authorized_file(user), 'w') for file in files: if key.strip() != file.strip(): authorized_keys.write(file) ack_message = "key_deleted" # This works for user uploading new keys else: desscription = "" authorized_key = request.FILES.get('pub_key') user = request.POST.get('user') description = "%s %s" % (user, authorized_key) audit.audit("upload_ssh_user_key", description, request) with open('/%s/authorized_keys' % (pki._get_ssh_dir(user)), 'ab') as destination: for chunk in authorized_key.chunks(): destination.write(chunk) perm, err = pki.update_ssh_dir_permissions(user) if err: raise Exception(err) ack_message = "key_added" return django.http.HttpResponseRedirect( "/keys_certs/view_user_ssh_keys/?ack=%s&user=%s" % (ack_message, user)) elif request.method == 'GET': return django.shortcuts.render_to_response( "upload_ssh_user_key.html", return_dict, context_instance=django.template.context.RequestContext( request)) except Exception, e: return_dict['base_template'] = "keys_certs_base.html" return_dict["page_title"] = 'Upload a Public Key' return_dict['tab'] = 'upload_public_key_tab' return_dict[ "error"] = 'Error adding Public key. Please check the value' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response( "logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def delete_iscsi_user_authentication(request): return_dict = {} try: req_ret, err = django_utils.get_request_parameter_values( request, ['target_name', 'authentication_type', 'username']) if err: raise Exception(err) if ('target_name' and 'authentication_type' and 'username') not in req_ret: raise Exception("Invalid request, please use the menus.") authentication_type = req_ret['authentication_type'] target_name = req_ret['target_name'] username = req_ret['username'] if authentication_type not in ['incoming', 'outgoing']: raise Exception("Invalid user type. Please use the menus.") if request.method == "GET": return_dict["target_name"] = target_name return_dict["username"] = username return_dict["authentication_type"] = authentication_type return django.shortcuts.render_to_response( "delete_iscsi_user_auth_conf.html", return_dict, context_instance=django.template.context.RequestContext( request)) else: ret, err = iscsi_stgt.remove_user_authentication( target_name, username, authentication_type) if not ret: if err: raise Exception(err) else: raise Exception("Unknown error.") if authentication_type == 'incoming': audit_str = "Removed ISCSI initiator authentication user %s for target %s" % ( username, target_name) url = '/storage_access/view_iscsi_target?name=%s&ack=removed_initiator_authentication' % target_name else: audit_str = "Removed ISCSI target authentication user %s for target %s" % ( username, target_name) url = '/storage_access/view_iscsi_target?name=%s&ack=removed_target_authentication' % target_name audit.audit("remove_iscsi_target_authentication", audit_str, request) return django.http.HttpResponseRedirect(url) except Exception, e: return_dict['base_template'] = "storage_access_base.html" return_dict["page_title"] = 'Remove ISCSI authentication user' return_dict['tab'] = 'view_iscsi_targets_tab' return_dict["error"] = 'Error removing ISCSI authentication user' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response( "logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def update_scheduled_task_schedule(request): return_dict = {} try: req_ret, err = django_utils.get_request_parameter_values( request, ['cron_task_id']) if err: raise Exception(err) if 'cron_task_id' not in req_ret: raise Exception("Invalid request, please use the menus.") cron_task_id = req_ret['cron_task_id'] return_dict['cron_task_id'] = cron_task_id cron_task_list, err = scheduler_utils.get_cron_tasks( cron_task_id=cron_task_id) if err: raise Exception(err) if request.method == "GET": # Return the conf page return_dict['schedule_description'] = cron_task_list[0][ 'schedule_description'].lower() return django.shortcuts.render_to_response( "update_scheduled_task_schedule.html", return_dict, context_instance=django.template.context.RequestContext( request)) else: scheduler = request.POST.get('scheduler') schedule = scheduler.split() ret, err = scheduler_utils.update_cron_schedule( cron_task_id, 'root', schedule[0], schedule[1], schedule[2], schedule[3], schedule[4]) if err: raise Exception(err) #Get the new entry now.. cron_task_list, err = scheduler_utils.get_cron_tasks( cron_task_id=cron_task_id) if err: raise Exception(err) audit_str = 'Modified the schedule for "%s" to "%s"' % ( cron_task_list[0]['description'].lower(), cron_task_list[0]['schedule_description'].lower()) audit.audit("update_schedule_task_schedule", audit_str, request) return django.http.HttpResponseRedirect( '/tasks/view_scheduled_tasks?ack=modified') except Exception, e: return_dict['base_template'] = "tasks_base.html" return_dict["page_title"] = 'Scheduled tasks' return_dict['tab'] = 'view_scheduled_tasks_tab' return_dict["error"] = 'Error modifying task schedule' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response( "logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def update_service_status(request): return_dict = {} try: if request.method == "GET": raise Exception("Invalid request. Please use the menus") if 'service' not in request.POST: raise Exception("Invalid request. Please use the menus") if 'action' not in request.POST or request.POST['action'] not in [ 'start', 'stop', 'restart', 'enable', 'disable' ]: raise Exception("Invalid request. Please use the menus") service = request.POST['service'] action = request.POST['action'] if 'action' == 'start' and service == 'vsftpd': # Need to make sure that all local users have their directories # created so do it.. config, err = vsftp.get_ftp_config() if err: raise Exception(err) users, err = local_users.get_local_users() if err: raise Exception(err) ret, err = create_ftp_user_dirs(config['dataset'], users) if err: raise Exception(err) audit_str = "Service status change of %s initiated to %s state." % ( service, action) audit.audit("change_service_status", audit_str, request) out, err = services_management.update_service_status(service, action) if err: raise Exception(err) if out: return django.http.HttpResponseRedirect( '/system/view_services?&service_change_status=%s' % ','.join(out)) else: return django.http.HttpResponseRedirect( '/system/view_services?service_change_status=none') except Exception, e: return_dict['base_template'] = "system_base.html" return_dict["page_title"] = 'Modify system service state' return_dict['tab'] = 'view_services_tab' return_dict["error"] = 'Error modifying system services state' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response( "logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def update_nfs_share(request): return_dict = {} try: if request.method == "GET": # Return the conf page path = request.GET["path"] d, err = nfs.get_share(path) if err: raise Exception(err) if not d: raise Exception( 'Could not find the specified share. Please use the menus.') initial = {} initial['path'] = d['path'] if 'clients' in d: client_list = [] for client in d['clients']: client_list.append(client['name']) initial['clients'] = ','.join(client_list) initial['readonly'] = False initial['root_squash'] = False initial['all_squash'] = False if 'options' in d: for option in d['options']: if option == 'ro': initial['readonly'] = True elif option == 'root_squash': initial['root_squash'] = True elif option == 'all_squash': initial['all_squash'] = True form = nfs_shares_forms.ShareForm(initial=initial) return_dict['form'] = form return django.shortcuts.render_to_response("update_nfs_share.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: form = nfs_shares_forms.ShareForm(request.POST) path = request.POST["path"] return_dict['form'] = form if not form.is_valid(): return django.shortcuts.render_to_response("update_nfs_share.html", return_dict, context_instance=django.template.context.RequestContext(request)) cd = form.cleaned_data result, err = nfs.save_share(cd) if err: raise Exception(err) audit_str = "Edited NFS share %s" % path audit.audit("edit_nfs_share", audit_str, request) return django.http.HttpResponseRedirect('/storage_access/view_nfs_shares?ack=saved') except Exception, e: return_dict['base_template'] = "storage_access_base.html" return_dict["page_title"] = 'Modify a NFS share ' return_dict['tab'] = 'view_nfs_shares_tab' return_dict["error"] = 'Error modifying a NFS share' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def delete_bond(request): return_dict = {} try: req_ret, err = django_utils.get_request_parameter_values(request, [ 'name']) if err: raise Exception(err) if 'name' not in req_ret: raise Exception('Invalid request, please use the menus') name = req_ret['name'] return_dict["name"] = name if request.method == "GET": # Return the conf page return django.shortcuts.render_to_response("delete_bond_conf.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: result, err = networking.delete_bond(name) if not result: if not err: raise Exception("Error removing bond") else: raise Exception(err) python_scripts_path, err = config.get_python_scripts_path() if err: raise Exception(err) python_scripts_path, err = config.get_python_scripts_path() if err: raise Exception(err) status_path, err = config.get_system_status_path() if err: raise Exception(err) ret, err = command.get_command_output( "python %s/generate_manifest.py %s" % (python_scripts_path, status_path)) if err: raise Exception(err) ret, err = command.get_command_output( "python %s/generate_status.py %s" % (python_scripts_path, status_path)) if err: raise Exception(err) audit_str = "Removed network bond %s" % (name) audit.audit("remove_bond", audit_str, request) return django.http.HttpResponseRedirect('/networking/view_interfaces?ack=removed_bond') except Exception, e: return_dict['base_template'] = "networking_base.html" return_dict["page_title"] = 'Remove a network interface bond' return_dict['tab'] = 'view_interfaces_tab' return_dict["error"] = 'Error removing a network interface bond' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def update_nfs_share(request): return_dict = {} try: if request.method == "GET": # Return the conf page path = request.GET["path"] d, err = nfs.get_share(path) if err: raise Exception(err) if not d: raise Exception( 'Could not find the specified share. Please use the menus.') initial = {} initial['path'] = d['path'] if 'clients' in d: client_list = [] for client in d['clients']: client_list.append(client['name']) initial['clients'] = ','.join(client_list) initial['readonly'] = False initial['root_squash'] = False initial['all_squash'] = False if 'options' in d: for option in d['options']: if option == 'ro': initial['readonly'] = True elif option == 'root_squash': initial['root_squash'] = True elif option == 'all_squash': initial['all_squash'] = True form = nfs_shares_forms.ShareForm(initial=initial) return_dict['form'] = form return django.shortcuts.render_to_response("update_nfs_share.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: form = nfs_shares_forms.ShareForm(request.POST) path = request.POST["path"] return_dict['form'] = form if not form.is_valid(): return django.shortcuts.render_to_response("update_nfs_share.html", return_dict, context_instance=django.template.context.RequestContext(request)) cd = form.cleaned_data result, err = nfs.save_share(cd) if err: raise Exception(err) audit_str = "Edited NFS share %s" % path audit.audit("edit_nfs_share", audit_str, request) return django.http.HttpResponseRedirect('/view_nfs_shares?ack=saved') except Exception, e: return_dict['base_template'] = "shares_base.html" return_dict["page_title"] = 'Modify a NFS share ' return_dict['tab'] = 'view_nfs_shares_tab' return_dict["error"] = 'Error modifying a NFS share' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def update_scan_schedule(request): return_dict = {} try: req_ret, err = django_utils.get_request_parameter_values(request, ['scan_configuration_id', 'scheduler']) if err: raise Exception(err) if 'scan_configuration_id' not in req_ret: raise Exception('Malformed request. Please use the menus.') scan_configuration_id = int(req_ret['scan_configuration_id']) if request.method == "GET": # Return the conf page configurations, err = scan_utils.get_scan_configurations(scan_configuration_id=scan_configuration_id) if err: raise Exception(err) if not configurations: raise Exception('Invalid configuration specified. Please us the menus.') return_dict['configuration'] = configurations[0] return_dict['scan_configuration_id'] = req_ret['scan_configuration_id'] return django.shortcuts.render_to_response("schedule_scan.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: if 'scheduler' not in req_ret: raise Exception("Invalid request, please use the menus.") scheduler = req_ret['scheduler'] schedule = scheduler.split() app_root, err = config.get_application_root(app_tag='storage_insights') if err: raise Exception(err) cmd = 'python %s/scripts/python/storage_insights_scanner.py -d -s %d'%(app_root, scan_configuration_id) cron_description = 'Storage Insights scanner' cron_task_id, err = scheduler_utils.create_cron_task( cmd, cron_description, schedule[0], schedule[1], schedule[2], schedule[3], schedule[4], task_type_id=6) if err: raise Exception(err) ret, err = scan_utils.update_cron_schedule(scan_configuration_id, cron_task_id) if err: raise Exception(err) cron_task_list, err = scheduler_utils.get_cron_tasks(cron_task_id, task_type_id=6) if err: raise Exception(err) audit_str = "Application Storage Insights scan process scheduled for %s." % cron_task_list[0]['schedule_description'].lower() audit.audit("application_action", audit_str, request) return django.http.HttpResponseRedirect('/applications/storage_insights/view_scan_configurations?ack=updated_scan_schedule') except Exception, e: return_dict['base_template'] = "storage_insights_base.html" return_dict["page_title"] = 'Schedule folder scan' return_dict['tab'] = 'scan_configurations_tab' return_dict["error"] = 'Error scheduling Storage Insight folder scan' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def delete_local_group(request): return_dict = {} try: req_ret, err = django_utils.get_request_parameter_values( request, ['grpname']) if err: raise Exception(err) if 'grpname' not in req_ret: raise Exception('Invalid request, please use the menus.') gd, err = local_users.get_local_group(req_ret['grpname']) if err or (not gd): if err: raise Exception(err) else: raise Exception("Could not retrieve group information") if gd['members']: raise Exception( "Cannot delete this group as it has the following members : %s" % (','.join(gd['members']))) if request.method == "GET": # Return the form return_dict["grpname"] = request.GET["grpname"] return django.shortcuts.render_to_response( "delete_local_group_conf.html", return_dict, context_instance=django.template.context.RequestContext( request)) else: # Form submission so create return_dict = {} ret, err = local_users.delete_local_group(request.POST["grpname"]) if not ret: if err: raise Exception('Error deleting group : %s' % err) else: raise Exception('Error deleting group') audit_str = "Deleted a local group %s" % request.POST["grpname"] audit.audit("delete_local_group", audit_str, request) url = '/users_groups/view_local_groups?ack=deleted' return django.http.HttpResponseRedirect(url) except Exception, e: return_dict['base_template'] = 'users_groups_base.html' return_dict["page_title"] = 'Delete a local user group' return_dict['tab'] = 'view_local_groups_tab' return_dict["error"] = 'Error deleting a local user group' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response( "logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def create_local_user(request): return_dict = {} try: group_list, err = local_users.get_local_groups() if err: raise Exception(err) if request.method == "GET": # Return the form #form = local_user_forms.LocalUserForm(group_list = group_list) form = local_user_forms.LocalUserForm() return_dict["form"] = form return django.shortcuts.render_to_response("create_local_user.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: # Form submission so create return_dict = {} #form = local_user_forms.LocalUserForm(request.POST, group_list = group_list) form = local_user_forms.LocalUserForm(request.POST) if form.is_valid(): cd = form.cleaned_data #ret, err = local_users.create_local_user(cd["username"], cd["name"], cd["password"], cd['gid']) group_name, err = config.get_users_default_group() if err: raise Exception(err) default_gid, err = config.get_system_uid_gid( group_name, 'group') if err: raise Exception(err) ret, err = local_users.create_local_user( cd["username"], cd["name"], cd["password"], default_gid) if not ret: if err: raise Exception(err) else: raise Exception("Error creating the local user.") audit_str = "Created a local user %s" % cd["username"] audit.audit("create_local_user", audit_str, request) if group_list: url = '/update_local_user_group_membership/?username=%s&ack=created' % cd['username'] else: url = '/view_local_users?ack=created' return django.http.HttpResponseRedirect(url) else: return_dict["form"] = form return django.shortcuts.render_to_response("create_local_user.html", return_dict, context_instance=django.template.context.RequestContext(request)) except Exception, e: return_dict['base_template'] = 'users_groups_base.html' return_dict["page_title"] = 'Create a local users' return_dict['tab'] = 'view_local_users_tab' return_dict["error"] = 'Error creating a local user' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def create_iscsi_acl(request): return_dict = {} try: req_ret, err = django_utils.get_request_parameter_values(request, [ 'target_name']) if err: raise Exception(err) if 'target_name' not in req_ret: raise Exception( "Invalid request, please use the menus.") target_name = req_ret['target_name'] target, err = iscsi_stgt.get_target(target_name) if err: raise Exception(err) if not target: raise Exception('Specified target not found') if request.method == "GET": # Return the form initial = {} initial['target_name'] = target_name form = iscsi_stgt_forms.IscsiAclForm(initial=initial) return_dict["form"] = form return django.shortcuts.render_to_response("create_iscsi_acl.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: # Form submission so create return_dict = {} form = iscsi_stgt_forms.IscsiAclForm(request.POST) if form.is_valid(): cd = form.cleaned_data ret, err = iscsi_stgt.add_acl(cd['target_name'], cd['acl']) if not ret: if err: raise Exception(err) else: raise Exception("Unknown error.") audit_str = "Added ISCSI ACL %s for target %s" % ( cd["acl"], cd['target_name']) url = '/view_iscsi_target?name=%s&ack=added_acl' % target_name audit.audit("add_iscsi_acl", audit_str, request) return django.http.HttpResponseRedirect(url) else: return_dict["form"] = form return django.shortcuts.render_to_response("create_iscsi_acl.html", return_dict, context_instance=django.template.context.RequestContext(request)) except Exception, e: return_dict['base_template'] = "shares_base.html" return_dict["page_title"] = 'Add ISCSI ACL' return_dict['tab'] = 'view_iscsi_targets_tab' return_dict["error"] = 'Error adding ISCSI ACL' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def download_sys_info(request): return_dict = {} try: config_dir, err = config.get_config_dir() if err: raise Exception(err) zf_name = "system_info.zip" try: out = io.BytesIO() zf = zipfile.ZipFile(out, 'w') abs_src = os.path.abspath(config_dir) lu, err = local_users.get_local_users() if err: raise Exception(err) lg, err = local_users.get_local_groups() if err: raise Exception(err) with open('/tmp/local_users_tmp', 'w') as fd: json.dump(lu, fd, indent=2) with open('/tmp/local_groups_tmp', 'w') as fd: json.dump(lg, fd, indent=2) zf.write('/tmp/local_users_tmp', 'local_users') zf.write('/tmp/local_groups_tmp', 'local_groups') for conf_subdir in upload_download_conf_dirs: for dirname, subdirs, files in os.walk( '%s/%s' % (config_dir, conf_subdir)): for filename in files: absname = os.path.abspath( os.path.join(dirname, filename)) arcname = absname[len(abs_src) + 1:] zf.write(absname, arcname) for key, value in upload_download_logs.iteritems(): if os.path.isfile(value): zf.write(value, key) zf.close() audit_str = 'Downloaded system configuration.' audit.audit('download_configuration', audit_str, request) except Exception as e: raise Exception("Error compressing remote log file : %s" % str(e)) response = django.http.HttpResponse( out.getvalue(), content_type='application/x-compressed') response['Content-disposition'] = 'attachment; filename=%s' % (zf_name) return response except Exception as e: return_dict["base_template"] = 'system_base.html' return_dict['tab'] = 'system_info_tab' return_dict["page_title"] = 'Download system configuration' return_dict["error"] = 'Error downloading system configuration' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response( "logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def create_iscsi_acl(request): return_dict = {} try: req_ret, err = django_utils.get_request_parameter_values(request, [ 'target_name']) if err: raise Exception(err) if 'target_name' not in req_ret: raise Exception( "Invalid request, please use the menus.") target_name = req_ret['target_name'] target, err = iscsi_stgt.get_target(target_name) if err: raise Exception(err) if not target: raise Exception('Specified target not found') if request.method == "GET": # Return the form initial = {} initial['target_name'] = target_name form = iscsi_stgt_forms.IscsiAclForm(initial=initial) return_dict["form"] = form return django.shortcuts.render_to_response("create_iscsi_acl.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: # Form submission so create return_dict = {} form = iscsi_stgt_forms.IscsiAclForm(request.POST) if form.is_valid(): cd = form.cleaned_data ret, err = iscsi_stgt.add_acl(cd['target_name'], cd['acl']) if not ret: if err: raise Exception(err) else: raise Exception("Unknown error.") audit_str = "Added ISCSI ACL %s for target %s" % ( cd["acl"], cd['target_name']) url = '/storage_access/view_iscsi_target?name=%s&ack=added_acl' % target_name audit.audit("add_iscsi_acl", audit_str, request) return django.http.HttpResponseRedirect(url) else: return_dict["form"] = form return django.shortcuts.render_to_response("create_iscsi_acl.html", return_dict, context_instance=django.template.context.RequestContext(request)) except Exception, e: return_dict['base_template'] = "storage_access_base.html" return_dict["page_title"] = 'Add ISCSI ACL' return_dict['tab'] = 'view_iscsi_targets_tab' return_dict["error"] = 'Error adding ISCSI ACL' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def upload_ssh_host_key(request): return_dict = {} try: user = request.GET.get('user', 'replicator') return_dict["selected_user"] = user if request.method == 'POST': authorized_key = request.POST.get('authorized_key', None) # This is a delete operation. authorized_key in post is delete and # as a file is file upload if authorized_key: user = request.POST.get("selected_user") key = request.POST.get("authorized_key") description = "%s" % (user) audit.audit("remove_ssh_host_key", description, request) files = open((pki._get_known_hosts(user)), 'r').readlines() authorized_keys = open(pki._get_known_hosts(user), 'w') for file in files: if key.strip() != file.strip(): authorized_keys.write(file) ack_message = "host_deleted" else: authorized_key = request.FILES.get('pub_key') ip = request.POST.get('ip') user = request.POST.get('user', 'replicator') description = "%s %s %s" % (user, ip, authorized_key) audit.audit("upload_ssh_host_key", description, request) hosts_file = pki._get_known_hosts(user) # print hosts_file with open("/tmp/hosts_file", 'wb+') as destination: for chunk in authorized_key.chunks(): destination.write(chunk) with open("/tmp/hosts_file", 'r') as key: data = key.read() # print data with open(hosts_file, 'ab') as key: key.write(ip + " " + data) perm, err = pki.update_ssh_dir_permissions(user) if err: raise Exception(err) ack_message = "host_added" return django.http.HttpResponseRedirect("/keys_certs/view_known_hosts_ssh_keys/?ack=%s&user=%s" % (ack_message, user)) elif request.method == 'GET': return django.shortcuts.render_to_response("upload_ssh_host_key.html", return_dict, context_instance=django.template.context.RequestContext(request)) except Exception, e: return_dict['base_template'] = "keys_certs_base.html" return_dict["page_title"] = 'Upload a Host Key' return_dict['tab'] = 'host_ssh_keys_tab' return_dict["error"] = 'Error adding host key. Please check the value' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def create_local_user(request): return_dict = {} try: group_list, err = local_users.get_local_groups() if err: raise Exception(err) if request.method == "GET": # Return the form #form = local_user_forms.LocalUserForm(group_list = group_list) form = local_user_forms.LocalUserForm() return_dict["form"] = form return django.shortcuts.render_to_response("create_local_user.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: # Form submission so create return_dict = {} #form = local_user_forms.LocalUserForm(request.POST, group_list = group_list) form = local_user_forms.LocalUserForm(request.POST) if form.is_valid(): cd = form.cleaned_data #ret, err = local_users.create_local_user(cd["username"], cd["name"], cd["password"], cd['gid']) group_name, err = config.get_users_default_group() if err: raise Exception(err) default_gid, err = config.get_system_uid_gid( group_name, 'group') if err: raise Exception(err) ret, err = local_users.create_local_user( cd["username"], cd["name"], cd["password"], default_gid) if not ret: if err: raise Exception(err) else: raise Exception("Error creating the local user.") audit_str = "Created a local user %s" % cd["username"] audit.audit("create_local_user", audit_str, request) if group_list: url = '/users_groups/update_local_user_group_membership/?username=%s&ack=created' % cd['username'] else: url = '/users_groups/view_local_users?ack=created' return django.http.HttpResponseRedirect(url) else: return_dict["form"] = form return django.shortcuts.render_to_response("create_local_user.html", return_dict, context_instance=django.template.context.RequestContext(request)) except Exception, e: return_dict['base_template'] = 'users_groups_base.html' return_dict["page_title"] = 'Create a local users' return_dict['tab'] = 'view_local_users_tab' return_dict["error"] = 'Error creating a local user' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def create_iscsi_lun(request): return_dict = {} try: req_ret, err = django_utils.get_request_parameter_values(request, [ 'target_name']) if err: raise Exception(err) if 'target_name' not in req_ret: raise Exception( "Invalid request, please use the menus.") target_name = req_ret['target_name'] zvols, err = zfs.get_all_zvols() if err: raise Exception(err) if not zvols: raise Exception( "There are no block device volumes created. Please create one first before adding a LUN.") if request.method == "GET": # Return the form initial = {} initial['target_name'] = target_name form = iscsi_stgt_forms.IscsiLunForm(initial=initial, zvols=zvols) return_dict["form"] = form return django.shortcuts.render_to_response("create_iscsi_lun.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: # Form submission so create return_dict = {} form = iscsi_stgt_forms.IscsiLunForm(request.POST, zvols=zvols) if form.is_valid(): cd = form.cleaned_data ret, err = iscsi_stgt.create_lun(cd["target_name"], cd['path']) if not ret: if err: raise Exception(err) else: raise Exception("Unknown error.") audit_str = "Created an ISCSI LUN in target %s with path %s" % ( cd["target_name"], cd['path']) audit.audit("create_iscsi_lun", audit_str, request) url = '/storage_access/view_iscsi_target?name=%s&ack=lun_created' % target_name return django.http.HttpResponseRedirect(url) else: return_dict["form"] = form return django.shortcuts.render_to_response("create_iscsi_lun.html", return_dict, context_instance=django.template.context.RequestContext(request)) except Exception, e: return_dict['base_template'] = "storage_access_base.html" return_dict["page_title"] = 'Create an ISCSI LUN' return_dict['tab'] = 'view_iscsi_targets_tab' return_dict["error"] = 'Error creating an ISCSI LUN' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def create_iscsi_lun(request): return_dict = {} try: req_ret, err = django_utils.get_request_parameter_values(request, [ 'target_name']) if err: raise Exception(err) if 'target_name' not in req_ret: raise Exception( "Invalid request, please use the menus.") target_name = req_ret['target_name'] zvols, err = zfs.get_all_zvols() if err: raise Exception(err) if not zvols: raise Exception( "There are no block device volumes created. Please create one first before adding a LUN.") if request.method == "GET": # Return the form initial = {} initial['target_name'] = target_name form = iscsi_stgt_forms.IscsiLunForm(initial=initial, zvols=zvols) return_dict["form"] = form return django.shortcuts.render_to_response("create_iscsi_lun.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: # Form submission so create return_dict = {} form = iscsi_stgt_forms.IscsiLunForm(request.POST, zvols=zvols) if form.is_valid(): cd = form.cleaned_data ret, err = iscsi_stgt.create_lun(cd["target_name"], cd['path']) if not ret: if err: raise Exception(err) else: raise Exception("Unknown error.") audit_str = "Created an ISCSI LUN in target %s with path %s" % ( cd["target_name"], cd['path']) audit.audit("create_iscsi_lun", audit_str, request) url = '/view_iscsi_target?name=%s&ack=lun_created' % target_name return django.http.HttpResponseRedirect(url) else: return_dict["form"] = form return django.shortcuts.render_to_response("create_iscsi_lun.html", return_dict, context_instance=django.template.context.RequestContext(request)) except Exception, e: return_dict['base_template'] = "shares_base.html" return_dict["page_title"] = 'Create an ISCSI LUN' return_dict['tab'] = 'view_iscsi_targets_tab' return_dict["error"] = 'Error creating an ISCSI LUN' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def update_manifest(request): return_dict = {} try: if request.method == "GET": from integralstor import manifest_status as iu mi, err = iu.generate_manifest_info(rescan_for_disks=True) # print mi, err if err: raise Exception(err) if not mi: raise Exception('Could not load new configuration') return_dict["mi"] = mi # Need the hostname here. return django.shortcuts.render_to_response( "update_manifest.html", return_dict, context_instance=django.template.context.RequestContext( request)) elif request.method == "POST": python_scripts_path, err = config.get_python_scripts_path() if err: raise Exception(err) ss_path, err = config.get_system_status_path() if err: raise Exception(err) #(ret,rc), err = command.execute_with_rc("python %s/generate_manifest.py %s"%(python_scripts_path, ss_path)) ret, err = command.get_command_output( "python %s/generate_manifest.py %s" % (python_scripts_path, ss_path)) # print 'mani', ret, err if err: raise Exception(err) #(ret,rc), err = command.execute_with_rc("python %s/generate_status.py %s"%(config.get_python_scripts_path(),config.get_system_status_path())) ret, err = command.get_command_output( "python %s/generate_status.py %s" % (python_scripts_path, ss_path)) # print 'stat', ret, err if err: raise Exception(err) audit_str = 'Reloaded system configuration after hardware scan' audit.audit('update_manifest', audit_str, request) return django.http.HttpResponseRedirect( "/system/view_system_info/") except Exception, e: return_dict['base_template'] = "system_base.html" return_dict["page_title"] = 'Reload system configuration' return_dict['tab'] = 'system_info_tab' return_dict["error"] = 'Error reloading system configuration' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response( "logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def update_remote_monitoring_server(request): return_dict = {} try: if request.method == "GET": servers, err = remote_monitoring.get_servers() if err: raise Exception(err) req_ret, err = django_utils.get_request_parameter_values(request, [ 'view', 'ip']) if err: raise Exception(err) initial = {} if 'ip' in req_ret: ip = req_ret['ip'] if ip in servers.keys(): initial['ip'] = ip initial['name'] = servers[ip]['name'] return_dict['action'] = 'update' else: return_dict['action'] = 'create' form = monitoring_forms.RemoteMonitoringServerForm(initial=initial) return_dict['form'] = form return django.shortcuts.render_to_response("update_remote_monitoring_server.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: form = monitoring_forms.RemoteMonitoringServerForm(request.POST) return_dict["form"] = form if form.is_valid(): cd = form.cleaned_data res, err = remote_monitoring.update_server( cd['ip'], cd['name']) if not res: if err: raise Exception(err) else: raise Exception( 'Error updating remote monitoring server list') audit_str = 'Updated the remote monitoring server with IP : %s and name : %s' % ( cd['ip'], cd['name']) audit.audit("update_remote_monitoring_server", audit_str, request) return django.http.HttpResponseRedirect('/monitoring/view_remote_monitoring_servers?ack=updated') else: # invalid form return django.shortcuts.render_to_response("update_remote_monitoring_server.html", return_dict, context_instance=django.template.context.RequestContext(request)) except Exception, e: return_dict["page_title"] = 'Update remote server monitoring server' return_dict['tab'] = 'remote_monitoring_tab' return_dict["error"] = 'Error updating remote monitoring server' return_dict['base_template'] = "monitoring_base.html" return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def update_ntp_settings(request): return_dict = {} try: if request.method == "GET": ntp_servers, err = ntp.get_ntp_servers() if err: raise Exception(err) if not ntp_servers: form = system_forms.ConfigureNTPForm() else: form = system_forms.ConfigureNTPForm( initial={'server_list': ','.join(ntp_servers)}) url = "update_ntp_settings.html" else: form = system_forms.ConfigureNTPForm(request.POST) if form.is_valid(): iv_logging.debug("Got valid request to change NTP settings") cd = form.cleaned_data server_list = cd["server_list"] if ',' in server_list: slist = server_list.split(',') else: slist = server_list.split(' ') ret, err = ntp.update_integralstor_ntp_servers(slist) # print ret, err if err: raise Exception(err) audit_str = "Modified NTP servers to %s" % server_list audit.audit("update_ntp_servers", audit_str, request) return django.http.HttpResponseRedirect( "/system/view_ntp_settings?ack=saved") else: # invalid form iv_logging.debug("Got invalid request to change NTP settings") url = "update_ntp_settings.html" return_dict["form"] = form return django.shortcuts.render_to_response( url, return_dict, context_instance=django.template.context.RequestContext(request)) except Exception, e: return_dict['base_template'] = "system_base.html" return_dict["page_title"] = 'Modify NTP notifications settings' return_dict['tab'] = 'ntp_settings_tab' return_dict["error"] = 'Error modifying NTP notifications settings' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response( "logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def download_sys_info(request): return_dict = {} try: config_dir, err = config.get_config_dir() if err: raise Exception(err) zf_name = "system_info.zip" try: out = io.BytesIO() zf = zipfile.ZipFile(out, 'w') abs_src = os.path.abspath(config_dir) lu, err = local_users.get_local_users() if err: raise Exception(err) lg, err = local_users.get_local_groups() if err: raise Exception(err) with open('/tmp/local_users_tmp', 'w') as fd: json.dump(lu, fd, indent=2) with open('/tmp/local_groups_tmp', 'w') as fd: json.dump(lg, fd, indent=2) zf.write('/tmp/local_users_tmp', 'local_users') zf.write('/tmp/local_groups_tmp', 'local_groups') for conf_subdir in upload_download_conf_dirs: for dirname, subdirs, files in os.walk('%s/%s' % (config_dir, conf_subdir)): for filename in files: absname = os.path.abspath( os.path.join(dirname, filename)) arcname = absname[len(abs_src) + 1:] zf.write(absname, arcname) for key, value in upload_download_logs.iteritems(): if os.path.isfile(value): zf.write(value, key) zf.close() audit_str = 'Downloaded system configuration.' audit.audit('download_configuration', audit_str, request) except Exception as e: raise Exception("Error compressing remote log file : %s" % str(e)) response = django.http.HttpResponse( out.getvalue(), content_type='application/x-compressed') response['Content-disposition'] = 'attachment; filename=%s' % ( zf_name) return response except Exception as e: return_dict["base_template"] = 'system_base.html' return_dict['tab'] = 'system_info_tab' return_dict["page_title"] = 'Download system configuration' return_dict["error"] = 'Error downloading system configuration' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def update_admin_password(request): """ Used to change a user's password for the management utility""" try: return_dict = {} if request.user and request.user.is_authenticated(): if request.method == 'POST': iv_logging.debug("Admin password change posted") # user has submitted the password info form = admin_forms.ChangeAdminPasswordForm(request.POST) if form.is_valid(): cd = form.cleaned_data oldPasswd = cd['oldPasswd'] newPasswd1 = cd['newPasswd1'] newPasswd2 = cd['newPasswd2'] # Checking for old password is done in the form itself if request.user.check_password(oldPasswd): if newPasswd1 == newPasswd2: # all systems go so now change password request.user.set_password(newPasswd1) request.user.save() return_dict['ack_message'] = 'Password changed sucessful.' iv_logging.info( "Admin password change request successful.") audit_str = "Changed admin password" audit.audit("modify_admin_password", audit_str, request) else: return_dict['error'] = 'New passwords do not match' # else invalid form or error so existing form data to return_dict and # fall through to redisplay the form if 'success' not in return_dict: return_dict['form'] = form iv_logging.info("Admin password change request failed.") else: form = admin_forms.ChangeAdminPasswordForm() return_dict['form'] = form return django.shortcuts.render_to_response('update_admin_password_form.html', return_dict, context_instance=django.template.context.RequestContext(request)) else: # User not authenticated so return a login screen return django.http.HttpResponseRedirect('/login/') except Exception, e: return_dict['base_template'] = "system_base.html" return_dict["page_title"] = 'Change admininistrator password' return_dict['tab'] = 'system_info_tab' return_dict["error"] = 'Error changing administrator password' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response('logged_in_error.html', return_dict, context_instance=django.template.context.RequestContext(request))
def update_rsync_share(request): return_dict = {} try: if request.method == "GET": name = request.GET.get("name") share, err = rsync.get_rsync_share_details(name) if err: raise Exception("Unable to load Rsync Shares") initial = {} initial["name"] = share["name"] initial["comment"] = share["comment"] initial["path"] = share["path"] if share["readonly"]: initial["readonly"] = True else: initial["readonly"] = False if share["list"]: initial["browsable"] = True else: initial["browsable"] = False form = rsync_forms.ShareForm(initial=initial) return_dict["form"] = form return django.shortcuts.render_to_response("update_rsync_share.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: form = rsync_forms.ShareForm(request.POST) if form.is_valid(): cd = form.cleaned_data delshare, err = rsync.delete_rsync_share(cd["name"]) if err: raise Exception(err) result, err = rsync.create_rsync_share( cd["name"], cd["path"], cd["comment"], cd["browsable"], cd["readonly"], "integralstor", "integralstor") if err: raise Exception(err) audit_str = "Edited RSYNC share with name '%s'. The share was modified to be %s and %s" % ( cd["name"], "Browsable" if cd["browsable"] else "Not Browsable", "Readonly" if cd["readonly"] else "Read/Write") #audit_str = "Edited RSYNC share %s"%cd["name"] audit.audit("edit_rsync_share", audit_str, request) return django.http.HttpResponseRedirect('/storage_access/view_rsync_shares/?ack=saved') else: return_dict["form"] = form return django.shortcuts.render_to_response("update_rsync_share.html", return_dict, context_instance=django.template.context.RequestContext(request)) except Exception, e: return_dict['base_template'] = "storage_access_base.html" return_dict["page_title"] = 'RSync Share' return_dict['tab'] = 'view_rsync_shares_tab' return_dict["error"] = 'Error editing RSync shares' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def delete_iscsi_user_authentication(request): return_dict = {} try: req_ret, err = django_utils.get_request_parameter_values( request, ['target_name', 'authentication_type', 'username']) if err: raise Exception(err) if ('target_name' and 'authentication_type' and 'username') not in req_ret: raise Exception( "Invalid request, please use the menus.") authentication_type = req_ret['authentication_type'] target_name = req_ret['target_name'] username = req_ret['username'] if authentication_type not in ['incoming', 'outgoing']: raise Exception("Invalid user type. Please use the menus.") if request.method == "GET": return_dict["target_name"] = target_name return_dict["username"] = username return_dict["authentication_type"] = authentication_type return django.shortcuts.render_to_response("delete_iscsi_user_auth_conf.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: ret, err = iscsi_stgt.remove_user_authentication( target_name, username, authentication_type) if not ret: if err: raise Exception(err) else: raise Exception("Unknown error.") if authentication_type == 'incoming': audit_str = "Removed ISCSI initiator authentication user %s for target %s" % ( username, target_name) url = '/storage_access/view_iscsi_target?name=%s&ack=removed_initiator_authentication' % target_name else: audit_str = "Removed ISCSI target authentication user %s for target %s" % ( username, target_name) url = '/storage_access/view_iscsi_target?name=%s&ack=removed_target_authentication' % target_name audit.audit("remove_iscsi_target_authentication", audit_str, request) return django.http.HttpResponseRedirect(url) except Exception, e: return_dict['base_template'] = "storage_access_base.html" return_dict["page_title"] = 'Remove ISCSI authentication user' return_dict['tab'] = 'view_iscsi_targets_tab' return_dict["error"] = 'Error removing ISCSI authentication user' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def update_service_status(request): return_dict = {} try: if request.method == "GET": raise Exception("Invalid request. Please use the menus") if 'service' not in request.POST: raise Exception("Invalid request. Please use the menus") if 'action' not in request.POST or request.POST['action'] not in ['start', 'stop', 'restart', 'enable', 'disable']: raise Exception("Invalid request. Please use the menus") service = request.POST['service'] action = request.POST['action'] if 'action' == 'start' and service == 'vsftpd': # Need to make sure that all local users have their directories # created so do it.. config, err = vsftp.get_ftp_config() if err: raise Exception(err) users, err = local_users.get_local_users() if err: raise Exception(err) ret, err = create_ftp_user_dirs(config['dataset'], users) if err: raise Exception(err) audit_str = "Service status change of %s initiated to %s state." % ( service, action) audit.audit("change_service_status", audit_str, request) out, err = services_management.update_service_status(service, action) if err: raise Exception(err) if out: return django.http.HttpResponseRedirect('/system/view_services?&service_change_status=%s' % ','.join(out)) else: return django.http.HttpResponseRedirect('/system/view_services?service_change_status=none') except Exception, e: return_dict['base_template'] = "system_base.html" return_dict["page_title"] = 'Modify system service state' return_dict['tab'] = 'view_services_tab' return_dict["error"] = 'Error modifying system services state' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))
def delete_scan_schedule(request): return_dict = {} try: req_ret, err = django_utils.get_request_parameter_values(request, ['scan_configuration_id']) if err: raise Exception(err) if 'scan_configuration_id' not in req_ret: raise Exception('Malformed request. Please use the menus.') scan_configuration_id = int(req_ret['scan_configuration_id']) configurations, err = scan_utils.get_scan_configurations(scan_configuration_id=scan_configuration_id) if err: raise Exception(err) if not configurations: raise Exception('Invalid configuration specified. Please us the menus.') if not configurations[0]['cron_task_id']: raise Exception('The specified configuration is not currently scheduled. Please us the menus.') cron_task_id = configurations[0]['cron_task_id'] cron_task_list, err = scheduler_utils.get_cron_tasks(configurations[0]['cron_task_id'], task_type_id=6) if err: raise Exception(err) return_dict["cron_task"] = cron_task_list[0] return_dict["configuration"] = configurations[0] return_dict["scan_configuration_id"] = scan_configuration_id if request.method == "GET": # Return the conf page return django.shortcuts.render_to_response("delete_scan_schedule_conf.html", return_dict, context_instance=django.template.context.RequestContext(request)) else: cron_description = cron_task_list[0]['description'].lower() ret, err = scheduler_utils.delete_cron(cron_task_id) if err: raise Exception(err) audit_str = "Removed application Storage Insights folder scan scheduled for %s" % (cron_task_list[0]['schedule_description'].lower()) audit.audit("application_action", audit_str, request) return django.http.HttpResponseRedirect('/applications/storage_insights/view_scan_configurations?ack=deleted_scan_schedule') except Exception, e: return_dict['base_template'] = "storage_insights_base.html" return_dict["page_title"] = 'Remove folder scan schedule' return_dict['tab'] = 'scan_schedule_tab' return_dict["error"] = 'Error removing Storage Insight folder scan schedule' return_dict["error_details"] = str(e) return django.shortcuts.render_to_response("logged_in_error.html", return_dict, context_instance=django.template.context.RequestContext(request))