def update(self, gid, sid): """Update the server settings""" server = Server.query.filter_by( user_id=current_user.id, id=sid).first() if server is None: return make_json_response( success=0, errormsg=gettext("Could not find the required server.") ) # Not all parameters can be modified, while the server is connected config_param_map = { 'name': 'name', 'host': 'host', 'port': 'port', 'db': 'maintenance_db', 'username': '******', 'sslmode': 'ssl_mode', 'gid': 'servergroup_id', 'comment': 'comment', 'role': 'role' } disp_lbl = { 'name': gettext('name'), 'host': gettext('Host name/address'), 'port': gettext('Port'), 'db': gettext('Maintenance database'), 'username': gettext('Username'), 'sslmode': gettext('SSL Mode'), 'comment': gettext('Comments'), 'role': gettext('Role') } idx = 0 data = request.form if request.form else json.loads(request.data.decode()) from pgadmin.utils.driver import get_driver manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(sid) conn = manager.connection() connected = conn.connected() if connected: for arg in ( 'host', 'port', 'db', 'username', 'sslmode', 'role' ): if arg in data: return forbidden( errormsg=gettext( "'{0}' is not allowed to modify, when server is connected." ).format(disp_lbl[arg]) ) for arg in config_param_map: if arg in data: setattr(server, config_param_map[arg], data[arg]) idx += 1 if idx == 0: return make_json_response( success=0, errormsg=gettext('No parameters were changed!') ) try: db.session.commit() except Exception as e: current_app.logger.exception(e) return make_json_response( success=0, errormsg=e.message ) # When server is connected, we don't require to update the connection # manager. Because - we don't allow to change any of the parameters, # which will affect the connections. if not conn.connected(): manager.update(server) return make_json_response( success=1, data=self.blueprint.generate_browser_node( "%d" % (server.id), server.servergroup_id, server.name, "icon-server-not-connected" if not connected else "icon-{0}".format(manager.server_type), True, self.node_type, connected=False, server_type='pg' # default server type ) )
def wrapped(self, **kwargs): self.manager = get_driver( PG_DEFAULT_DRIVER ).connection_manager( kwargs['sid'] ) self.conn = self.manager.connection() driver = get_driver(PG_DEFAULT_DRIVER) self.qtIdent = driver.qtIdent if not self.conn.connected(): return precondition_required( _("Connection to the server has been lost!") ) ver = self.manager.version self.sql_path = 'role/sql/{0}/'.format( 'post9_4' if ver >= 90500 else \ 'post9_1' if ver >= 90200 else \ 'post9_0' if ver >= 90100 else \ 'post8_4' ) self.alterKeys = [ u'rolcanlogin', u'rolsuper', u'rolcreatedb', u'rolcreaterole', u'rolinherit', u'rolreplication', u'rolconnlimit', u'rolvaliduntil', u'rolpassword' ] if ver >= 90200 else [ u'rolcanlogin', u'rolsuper', u'rolcreatedb', u'rolcreaterole', u'rolinherit', u'rolconnlimit', u'rolvaliduntil', u'rolpassword' ] check_permission = False fetch_name = False forbidden_msg = None if action in ['drop', 'update']: check_permission = True fetch_name = True if action == 'drop': forbidden_msg = _( "The current user does not have permission to drop the role." ) else: forbidden_msg = _( "The current user does not have permission to update the role." ) elif action == 'create': check_permission = True forbidden_msg = _( "The current user does not have permission to create the role." ) elif (action == 'msql' and 'rid' in kwargs and kwargs['rid'] != -1): fetch_name = True if check_permission: user = self.manager.user_info if not user['is_superuser'] and \ not user['can_create_role']: if (action != 'update' or 'rid' in kwargs and kwargs['rid'] != -1 and user['id'] != kwargs['rid']): return forbidden(forbidden_msg) if fetch_name: status, res = self.conn.execute_dict( render_template( self.sql_path + 'permission.sql', rid=kwargs['rid'], conn=self.conn ) ) if not status: return internal_server_error( _( "Error retrieving the role information.\n{0}" ).format(res) ) if len(res['rows']) == 0: return gone( _("Couldn't find the role on the database server.") ) row = res['rows'][0] self.role = row['rolname'] self.rolCanLogin = row['rolcanlogin'] self.rolCatUpdate = row['rolcatupdate'] self.rolSuper = row['rolsuper'] return f(self, **kwargs)
def save(self, changed_data): return forbidden(errmsg=gettext("Data cannot be saved for the current object."))
def save(self, changed_data): return forbidden(errmsg=gettext( "Not allowed to save the data for the selected object!"))
def save(self, changed_data): return forbidden( errmsg=gettext("Data cannot be saved for the current object."))
def update(self, gid, sid): """Update the server settings""" server = Server.query.filter_by(user_id=current_user.id, id=sid).first() if server is None: return make_json_response( success=0, errormsg=gettext("Couldn't find the given server.")) # Not all parameters can be modified, while the server is connected config_param_map = { 'name': 'name', 'host': 'host', 'port': 'port', 'db': 'maintenance_db', 'username': '******', 'sslmode': 'sslmode', 'gid': 'servergroup_id', 'comment': 'comment', 'role': 'role' } disp_lbl = { 'name': gettext('name'), 'host': gettext('Host name/address'), 'port': gettext('Port'), 'db': gettext('Maintenance database'), 'username': gettext('Username'), 'sslmode': gettext('SSL Mode'), 'comment': gettext('Comments'), 'role': gettext('Role') } idx = 0 data = request.form if request.form else json.loads( request.data.decode()) from pgadmin.utils.driver import get_driver manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(sid) conn = manager.connection() if conn.connected(): for arg in ('host', 'port', 'db', 'username', 'sslmode', 'role'): if arg in data: return forbidden(errormsg=gettext( "'{0}' is not allowed to modify, when server is connected." ).format(disp_lbl[arg])) for arg in config_param_map: if arg in data: setattr(server, config_param_map[arg], data[arg]) idx += 1 if idx == 0: return make_json_response( success=0, errormsg=gettext('No parameters were changed!')) try: db.session.commit() except Exception as e: current_app.logger.exception(e) return make_json_response(success=0, errormsg=e.message) # When server is connected, we don't require to update the connection # manager. Because - we don't allow to change any of the parameters, # which will affect the connections. if not conn.connected(): manager.update(server) return make_json_response(success=1, data={ 'id': server.id, 'gid': server.servergroup_id, 'icon': 'icon-server-not-connected' })
def wrapped(self, **kwargs): self.manager = get_driver( PG_DEFAULT_DRIVER).connection_manager(kwargs['sid']) self.conn = self.manager.connection() driver = get_driver(PG_DEFAULT_DRIVER) self.qtIdent = driver.qtIdent if not self.conn.connected(): return precondition_required( _("Connection to the server has been lost.")) self.sql_path = 'roles/sql/#{0}#'.format(self.manager.version) self.alterKeys = [ u'rolcanlogin', u'rolsuper', u'rolcreatedb', u'rolcreaterole', u'rolinherit', u'rolreplication', u'rolconnlimit', u'rolvaliduntil', u'rolpassword' ] if self.manager.version >= 90200 else [ u'rolcanlogin', u'rolsuper', u'rolcreatedb', u'rolcreaterole', u'rolinherit', u'rolconnlimit', u'rolvaliduntil', u'rolpassword' ] check_permission = False fetch_name = False forbidden_msg = None if action in ['drop', 'update']: if 'rid' in kwargs: fetch_name = True check_permission = True if action == 'drop': forbidden_msg = _( "The current user does not have permission to drop" " the role.") else: forbidden_msg = _( "The current user does not have permission to " "update the role.") elif action == 'create': check_permission = True forbidden_msg = _( "The current user does not have permission to create " "the role.") elif action == 'msql' and 'rid' in kwargs: fetch_name = True if check_permission: user = self.manager.user_info if not user['is_superuser'] and \ not user['can_create_role']: if action != 'update' or 'rid' in kwargs: if kwargs['rid'] != -1: if user['id'] != kwargs['rid']: return forbidden(forbidden_msg) if fetch_name: status, res = self.conn.execute_dict( render_template(self.sql_path + 'permission.sql', rid=kwargs['rid'], conn=self.conn)) if not status: return internal_server_error( _("Error retrieving the role information.\n{0}"). format(res)) if len(res['rows']) == 0: return gone( _("Could not find the role on the database " "server.")) row = res['rows'][0] self.role = row['rolname'] self.rolCanLogin = row['rolcanlogin'] self.rolCatUpdate = row['rolcatupdate'] self.rolSuper = row['rolsuper'] return f(self, **kwargs)
def update(self, gid, sid): """Update the server settings""" server = Server.query.filter_by( user_id=current_user.id, id=sid).first() if server is None: return make_json_response( status=410, success=0, errormsg=gettext("Could not find the required server.") ) # Not all parameters can be modified, while the server is connected config_param_map = { 'name': 'name', 'host': 'host', 'hostaddr': 'hostaddr', 'port': 'port', 'db': 'maintenance_db', 'username': '******', 'sslmode': 'ssl_mode', 'gid': 'servergroup_id', 'comment': 'comment', 'role': 'role', 'db_res': 'db_res', 'passfile': 'passfile', 'sslcert': 'sslcert', 'sslkey': 'sslkey', 'sslrootcert': 'sslrootcert', 'sslcrl': 'sslcrl', 'sslcompression': 'sslcompression', 'bgcolor': 'bgcolor', 'fgcolor': 'fgcolor', 'service': 'service' } disp_lbl = { 'name': gettext('name'), 'host': gettext('Host name/address'), 'port': gettext('Port'), 'db': gettext('Maintenance database'), 'username': gettext('Username'), 'sslmode': gettext('SSL Mode'), 'comment': gettext('Comments'), 'role': gettext('Role') } idx = 0 data = request.form if request.form else json.loads( request.data, encoding='utf-8' ) if 'db_res' in data: data['db_res'] = ','.join(data['db_res']) if 'hostaddr' in data and data['hostaddr'] and data['hostaddr'] != '': if not self.pat4.match(data['hostaddr']): if not self.pat6.match(data['hostaddr']): return make_json_response( success=0, status=400, errormsg=gettext('Host address not valid') ) manager = get_driver(PG_DEFAULT_DRIVER).connection_manager(sid) conn = manager.connection() connected = conn.connected() if connected: for arg in ( 'host', 'hostaddr', 'port', 'db', 'username', 'sslmode', 'role', 'service' ): if arg in data: return forbidden( errormsg=gettext( "'{0}' is not allowed to modify, " "when server is connected." ).format(disp_lbl[arg]) ) for arg in config_param_map: if arg in data: value = data[arg] # sqlite3 do not have boolean type so we need to convert # it manually to integer if arg == 'sslcompression': value = 1 if value else 0 setattr(server, config_param_map[arg], value) idx += 1 if idx == 0: return make_json_response( success=0, errormsg=gettext('No parameters were changed.') ) try: db.session.commit() except Exception as e: current_app.logger.exception(e) return make_json_response( success=0, errormsg=e.message ) # When server is connected, we don't require to update the connection # manager. Because - we don't allow to change any of the parameters, # which will affect the connections. if not conn.connected(): manager.update(server) return jsonify( node=self.blueprint.generate_browser_node( "%d" % (server.id), server.servergroup_id, server.name, server_icon_and_background(connected, manager, server), True, self.node_type, connected=False, server_type='pg' # default server type ) )