def update_node(store, request, language=GLSetting.memory_copy.default_language): """ Update the node, setting the last update time on it. Password: If old_password and password are present, password update is performed URLs: If one url is present, is properly validated Returns: the last update time of the node as a :class:`datetime.datetime` instance """ node = store.find(Node).one() for attr in getattr(node, "localized_strings"): new_value = unicode(request[attr]) request[attr] = getattr(node, attr) request[attr][language] = new_value password = request.get('password', None) old_password = request.get('old_password', None) if password and old_password and len(password) and len(old_password): admin = store.find(User, (User.username == unicode('admin'))).one() admin.password = security.change_password(admin.password, old_password, password, admin.salt) if len(request['public_site']) > 1: if not utility.acquire_url_address(request['public_site'], hidden_service=True, http=True): log.err("Invalid public page regexp in [%s]" % request['public_site']) raise errors.InvalidInputFormat("Invalid public site") if len(request['hidden_service']) > 1: if not utility.acquire_url_address(request['hidden_service'], hidden_service=True, http=False): log.err("Invalid hidden service regexp in [%s]" % request['hidden_service']) raise errors.InvalidInputFormat("Invalid hidden service") # verify that the languages enabled are valid 'code' in the languages supported node.languages_enabled = [] for lang_code in request['languages_enabled']: if lang_code in LANGUAGES_SUPPORTED_CODES: node.languages_enabled.append(lang_code) else: raise errors.InvalidInputFormat("Invalid lang code enabled: %s" % lang_code) if not request['default_language'] in LANGUAGES_SUPPORTED_CODES: raise errors.InvalidInputFormat("Invalid lang code as default") # name, description tor2web boolean value are acquired here node.update(request) node.last_update = utility.datetime_now() return admin_serialize_node(node, language)
def apply_cli_options(store): accepted = {} if GLSetting.cmdline_options.public_website: if not acquire_url_address(GLSetting.cmdline_options.public_website, hidden_service=False, http=True): print "[!!] Invalid public site: %s: Ignored" % GLSetting.cmdline_options.public_website else: print "[+] Hardwriting tor2web in DB:", GLSetting.cmdline_options.public_website accepted.update({"public_site": unicode(GLSetting.cmdline_options.public_website)}) if GLSetting.cmdline_options.hidden_service: if not acquire_url_address(GLSetting.cmdline_options.hidden_service, hidden_service=True, http=True): print "[!!] Invalid hidden service: %s: Ignored" % GLSetting.cmdline_options.hidden_service else: print "[+] Hardwriting hidden service in DB:", GLSetting.cmdline_options.hidden_service accepted.update({"hidden_service": unicode(GLSetting.cmdline_options.hidden_service)}) if accepted: node = store.find(Node).one() for k, v in accepted.iteritems(): setattr(node, k, v)