add_rule(r"mute(.*)", "mute.search") add_rule(r"取消静音", "mute.cancel") add_rule(r"(.*)", "note.search") rules_loaded = True class RulesHandler: @xauth.login_required() def GET(self): user_name = xauth.current_name() rules = list_search_rules(user_name) return xtemplate.render("search/search_rules.html", rules = rules) def list_search_rules(user_name): list, count = MSG_DAO.list_by_tag(user_name, 'key', 0, 1000) for item in list: item.url = "/search?key=" + xutils.encode_uri_component(item.content) return list xutils.register_func("search.list_rules", list_search_rules) xutils.register_func("search.list_recent", list_search_history) xurls = ( r"/search/search", handler, r"/search", handler, r"/search/rules", RulesHandler, r"/s/(.+)", handler )
stat.removed_count = count_removed(user_name) stat.dict_count = count_dict(user_name) dbutil.put("user_stat:%s:note" % user_name, stat) return stat def get_note_stat(user_name): stat = dbutil.get("user_stat:%s:note" % user_name) if stat is None: stat = refresh_note_stat(user_name) return stat # write functions xutils.register_func("note.create", create_note) xutils.register_func("note.update", update_note) xutils.register_func("note.update0", update0) xutils.register_func("note.update_index", update_index) xutils.register_func("note.move", move_note) xutils.register_func("note.visit", visit_note) xutils.register_func("note.delete", delete_note) xutils.register_func("note.touch", touch_note) xutils.register_func("note.update_tags", update_tags) xutils.register_func("note.create_token", create_token) # query functions xutils.register_func("note.get_root", get_root) xutils.register_func("note.get_by_id", get_by_id) xutils.register_func("note.get_by_token", get_by_token) xutils.register_func("note.get_by_id_creator", get_by_id_creator)
def check_login(user_name=None): if has_login(user_name): return elif has_login(): raise web.seeother("/unauthorized") # 跳转到登陆URL redirect_to_login() def redirect_to_login(): path = web.ctx.fullpath raise web.seeother("/login?target=" + xutils.encode_uri_component(path)) def login_required(user_name=None): """管理员验证装饰器""" def deco(func): def handle(*args, **kw): check_login(user_name) ret = func(*args, **kw) return ret return handle return deco xutils.register_func("user.get_config_dict", get_user_config_dict) xutils.register_func("user.get_config", get_user_config)
basename, ext = os.path.splitext(fpath) encoded_fpath = xutils.encode_uri_component(fpath) if xutils.is_text_file(fpath): raise web.found("/code/edit?path=%s" % encoded_fpath) raise web.found("/fs_hex?path=%s" % encoded_fpath) class TextHandler: @xauth.login_required("admin") def GET(self): return xtemplate.render("fs/page/txtreader.html") xutils.register_func("fs.process_file_list", process_file_list) xurls = ( r"/fs_list/?", UserHomeHandler, r"/fs_edit", EditHandler, r"/fs_view", ViewHandler, r"/fs_text", TextHandler, r"/fs_api/remove", RemoveAjaxHandler, r"/fs_api/rename", RenameAjaxHandler, r"/fs_api/cut",
result.append(item) return result def list_group(): current_name = str(xauth.get_current_name()) cache_key = "group.list#" + current_name value = cacheutil.get(cache_key) if value is None: sql = "SELECT * FROM file WHERE type = 'group' AND is_deleted = 0 AND creator = $creator ORDER BY name LIMIT 1000" value = list(xtables.get_file_table().query( sql, vars=dict(creator=current_name))) cacheutil.set(cache_key, value, expire=-1) return value def list_recent_created(parent_id=None, limit=10): where = "is_deleted = 0 AND (creator = $creator OR is_public = 1)" if parent_id != None: where += " AND parent_id = %s" % parent_id db = xtables.get_file_table() return list( db.select(where=where, vars=dict(creator=xauth.get_current_name()), order="ctime DESC", limit=limit)) xutils.register_func("note.list_group", list_group) xutils.register_func("note.list_recent_created", list_recent_created)
self.show_next = True self.is_deleted = 0 if tag == "log": self.name = T("memo") self.icon = "fa-file-text-o" def get_message_tag(user, tag): msg_stat = get_message_stat(user) if tag == "log": return MessageTag(tag, msg_stat.log_count) xutils.register_func("message.create", create_message) xutils.register_func("message.update", update_message) xutils.register_func("message.search", search_message) xutils.register_func("message.delete", delete_message_by_id) xutils.register_func("message.count", count_message) xutils.register_func("message.find_by_id", get_message_by_id) xutils.register_func("message.get_by_id", get_message_by_id) xutils.register_func("message.get_by_content", get_by_content) xutils.register_func("message.get_message_tag", get_message_tag) xutils.register_func("message.list", list_message_page) xutils.register_func("message.list_file", list_file_page) xutils.register_func("message.list_link", list_link_page) xutils.register_func("message.list_by_tag", list_by_tag) xutils.register_func("message.list_by_date", list_by_date)
@xutils.timeit(name = "kv.message.list", logfile = True, logargs = True) def kv_list_message_page(user, status, offset, limit): def filter_func(key, value): if status is None: return value.user == user return value.user == user and value.status == status chatlist = dbutil.prefix_list("message:%s" % user, filter_func, offset, limit, reverse = True) amount = dbutil.prefix_count("message:%s" % user, filter_func) return chatlist, amount def list_message_page(*args): return db_call("list_message_page", *args) def list_file_page(user, offset, limit): def filter_func(key, value): if value.content is None: return False return value.content.find("file://") >= 0 chatlist = dbutil.prefix_list("message:%s" % user, filter_func, offset, limit, reverse = True) amount = dbutil.prefix_count("message:%s" % user, filter_func) return chatlist, amount xutils.register_func("message.create", create_message) xutils.register_func("message.search", search_message) xutils.register_func("message.delete", delete_message_by_id) xutils.register_func("message.count", count_message) xutils.register_func("message.find_by_id", get_message_by_id) xutils.register_func("message.list", list_message_page) xutils.register_func("message.list_file", list_file_page)
class PluginLogHandler: @xauth.login_required() def GET(self): user_name = xauth.current_name() logs = list_visit_logs(user_name) return logs @xmanager.listen("sys.reload") def reload_plugins(ctx): load_plugins() xutils.register_func("plugin.find_plugins", find_plugins) xutils.register_func("plugin.add_visit_log", add_visit_log) xurls = ( r"/plugins_list_new", PluginsGridHandler, r"/plugins_list", PluginsListHandler, r"/plugins_log", PluginLogHandler, r"/plugins/(.+)", LoadPluginHandler, r"/tools/(.+)", LoadInnerToolHandler, )
sort_notes(notes) return notes def list_by_type(creator, type, offset, limit): def list_func(key, value): return value.type == type and value.creator == creator and value.is_deleted == 0 notes = dbutil.prefix_list("note_tiny:%s" % creator, list_func, offset, limit) sort_notes(notes) return notes def count_by_type(creator, type): def count_func(key, value): return value.type == type and value.creator == creator and value.is_deleted == 0 return dbutil.prefix_count("note_tiny:%s" % creator, count_func) xutils.register_func("note.create", create_note) xutils.register_func("note.update", update_note) xutils.register_func("note.visit", visit_note) xutils.register_func("note.count", count_note) xutils.register_func("note.delete", delete_note) xutils.register_func("note.get_by_id", get_by_id) xutils.register_func("note.get_by_name", get_by_name) xutils.register_func("note.get_by_id_creator", get_by_id_creator) xutils.register_func("note.search_name", search_name) xutils.register_func("note.search_content", search_content) # list functions xutils.register_func("note.list_path", list_path) xutils.register_func("note.list_group", list_group) xutils.register_func("note.list_note", list_by_parent) xutils.register_func("note.list_by_parent", list_by_parent)
else: return xtemplate.render("error.html", error="plugin `%s` not found!" % name) except: error = xutils.print_exc() return xtemplate.render("error.html", error=error) def POST(self, name=""): return self.GET(name) class PluginLogHandler: @xauth.login_required() def GET(self): user_name = xauth.current_name() logs = list_visit_logs(user_name) return logs @xmanager.listen("sys.reload") def reload_plugins(ctx): load_plugins() xutils.register_func("plugin.find_plugins", find_plugins) xurls = (r"/plugins_list_new", PluginsListHandler, r"/plugins_list", PluginsListOldHandler, r"/plugins_new", NewPluginHandler, r"/plugins_new/command", NewCommandPlugin, r"/plugins_log", PluginLogHandler, r"/plugins/(.+)", LoadPluginHandler)
def find_next_note(note): where = "parent_id = $parent_id AND name > $name ORDER BY name ASC LIMIT 1" table = xtables.get_file_table() return table.select_first(where=where, vars=dict(name=note.name, parent_id=note.parent_id)) def update_priority(creator, id, value): table = xtables.get_file_table() rows = table.update(priority=value, where=dict(creator=creator, id=id)) cache_key = "[%s]note.recent" % creator cacheutil.prefix_del(cache_key) return rows > 0 xutils.register_func("note.list_group", list_group) xutils.register_func("note.list_tag", list_tag) xutils.register_func("note.list_recent_created", list_recent_created) xutils.register_func("note.list_recent_edit", list_recent_edit) xutils.register_func("note.list_recent_viewed", list_recent_viewed) xutils.register_func("note.list_by_date", list_by_date) xutils.register_func("note.count_recent_edit", count_user_note) xutils.register_func("note.count_user_note", count_user_note) xutils.register_func("note.count_ungrouped", count_ungrouped) xutils.register_func("note.get_by_id_creator", get_by_id_creator) xutils.register_func("note.find_prev_note", find_prev_note) xutils.register_func("note.find_next_note", find_next_note) xutils.register_func("note.update_priority", update_priority)