2016-04-18 00:47:09 +02:00
|
|
|
import time
|
2016-08-20 10:39:15 +02:00
|
|
|
import re
|
2016-04-18 00:47:09 +02:00
|
|
|
|
Version 0.3.6, Rev879, Fix sidebar error on description missing, New trayicon, New favicon, Disable some functions on MultiUser proxies, New homepage, Replace only the last ? in SQL queries, Alwaays grant ADMIN permission to homepage site, Announce before publish if no peers, configSet, serverShutdown, ADMIN WebsocketAPI command, Stop Tor client before updating, Ignore peer ip packing error, Ignore db files from git, Fix safari ajax error when UiPassword enabled
2016-02-02 11:40:45 +01:00
|
|
|
from Plugin import PluginManager
|
2016-04-18 00:47:09 +02:00
|
|
|
from Db import DbQuery
|
|
|
|
|
Version 0.3.6, Rev879, Fix sidebar error on description missing, New trayicon, New favicon, Disable some functions on MultiUser proxies, New homepage, Replace only the last ? in SQL queries, Alwaays grant ADMIN permission to homepage site, Announce before publish if no peers, configSet, serverShutdown, ADMIN WebsocketAPI command, Stop Tor client before updating, Ignore peer ip packing error, Ignore db files from git, Fix safari ajax error when UiPassword enabled
2016-02-02 11:40:45 +01:00
|
|
|
|
|
|
|
@PluginManager.registerTo("UiWebsocket")
|
|
|
|
class UiWebsocketPlugin(object):
|
2017-02-14 19:03:17 +01:00
|
|
|
def formatSiteInfo(self, site, create_user=True):
|
|
|
|
site_info = super(UiWebsocketPlugin, self).formatSiteInfo(site, create_user=True)
|
|
|
|
feed_following = self.user.sites[site.address].get("follow", None)
|
|
|
|
if feed_following == None:
|
2017-02-14 19:04:25 +01:00
|
|
|
site_info["feed_follow_num"] = None
|
2017-02-14 19:03:17 +01:00
|
|
|
else:
|
2017-02-14 19:04:25 +01:00
|
|
|
site_info["feed_follow_num"] = len(feed_following)
|
2017-02-14 19:03:17 +01:00
|
|
|
return site_info
|
|
|
|
|
Version 0.3.6, Rev879, Fix sidebar error on description missing, New trayicon, New favicon, Disable some functions on MultiUser proxies, New homepage, Replace only the last ? in SQL queries, Alwaays grant ADMIN permission to homepage site, Announce before publish if no peers, configSet, serverShutdown, ADMIN WebsocketAPI command, Stop Tor client before updating, Ignore peer ip packing error, Ignore db files from git, Fix safari ajax error when UiPassword enabled
2016-02-02 11:40:45 +01:00
|
|
|
def actionFeedFollow(self, to, feeds):
|
|
|
|
self.user.setFeedFollow(self.site.address, feeds)
|
2016-03-11 13:26:54 +01:00
|
|
|
self.user.save()
|
Version 0.3.6, Rev879, Fix sidebar error on description missing, New trayicon, New favicon, Disable some functions on MultiUser proxies, New homepage, Replace only the last ? in SQL queries, Alwaays grant ADMIN permission to homepage site, Announce before publish if no peers, configSet, serverShutdown, ADMIN WebsocketAPI command, Stop Tor client before updating, Ignore peer ip packing error, Ignore db files from git, Fix safari ajax error when UiPassword enabled
2016-02-02 11:40:45 +01:00
|
|
|
self.response(to, "ok")
|
|
|
|
|
|
|
|
def actionFeedListFollow(self, to):
|
|
|
|
feeds = self.user.sites[self.site.address].get("follow", {})
|
|
|
|
self.response(to, feeds)
|
|
|
|
|
2017-01-29 19:02:26 +01:00
|
|
|
def actionFeedQuery(self, to, limit=10, day_limit=3):
|
Rev903, FeedQuery command only available for ADMIN sites, Show bad files in sidebar, Log unknown messages, Add and check inner_path and site address on sign/verify, Better peer cleanup limit, Log site load times, Testcase for address and inner_path verification, Re-sign testsite with new fields, Fix unnecessary loading screen display when browsing sub-folder with index.html, Fix safari notification width
2016-02-18 11:22:21 +01:00
|
|
|
if "ADMIN" not in self.site.settings["permissions"]:
|
|
|
|
return self.response(to, "FeedQuery not allowed")
|
|
|
|
|
Version 0.3.6, Rev879, Fix sidebar error on description missing, New trayicon, New favicon, Disable some functions on MultiUser proxies, New homepage, Replace only the last ? in SQL queries, Alwaays grant ADMIN permission to homepage site, Announce before publish if no peers, configSet, serverShutdown, ADMIN WebsocketAPI command, Stop Tor client before updating, Ignore peer ip packing error, Ignore db files from git, Fix safari ajax error when UiPassword enabled
2016-02-02 11:40:45 +01:00
|
|
|
from Site import SiteManager
|
|
|
|
rows = []
|
|
|
|
for address, site_data in self.user.sites.iteritems():
|
|
|
|
feeds = site_data.get("follow")
|
|
|
|
if not feeds:
|
|
|
|
continue
|
2017-02-22 11:28:48 +01:00
|
|
|
if type(feeds) is not dict:
|
|
|
|
self.log.debug("Invalid feed for site %s" % address)
|
|
|
|
continue
|
Version 0.3.6, Rev879, Fix sidebar error on description missing, New trayicon, New favicon, Disable some functions on MultiUser proxies, New homepage, Replace only the last ? in SQL queries, Alwaays grant ADMIN permission to homepage site, Announce before publish if no peers, configSet, serverShutdown, ADMIN WebsocketAPI command, Stop Tor client before updating, Ignore peer ip packing error, Ignore db files from git, Fix safari ajax error when UiPassword enabled
2016-02-02 11:40:45 +01:00
|
|
|
for name, query_set in feeds.iteritems():
|
|
|
|
site = SiteManager.site_manager.get(address)
|
|
|
|
try:
|
|
|
|
query, params = query_set
|
2016-08-16 19:57:41 +02:00
|
|
|
query_parts = query.split("UNION")
|
|
|
|
for i, query_part in enumerate(query_parts):
|
|
|
|
db_query = DbQuery(query_part)
|
2017-01-29 19:02:26 +01:00
|
|
|
if day_limit:
|
|
|
|
where = " WHERE %s > strftime('%%s', 'now', '-%s day')" % (db_query.fields.get("date_added", "date_added"), day_limit)
|
|
|
|
if "WHERE" in query_part:
|
|
|
|
query_part = re.sub("WHERE (.*?)(?=$| GROUP BY)", where+" AND (\\1)", query_part)
|
|
|
|
else:
|
|
|
|
query_part += where
|
2016-08-16 19:57:41 +02:00
|
|
|
query_parts[i] = query_part
|
|
|
|
query = " UNION ".join(query_parts)
|
|
|
|
|
Version 0.3.6, Rev879, Fix sidebar error on description missing, New trayicon, New favicon, Disable some functions on MultiUser proxies, New homepage, Replace only the last ? in SQL queries, Alwaays grant ADMIN permission to homepage site, Announce before publish if no peers, configSet, serverShutdown, ADMIN WebsocketAPI command, Stop Tor client before updating, Ignore peer ip packing error, Ignore db files from git, Fix safari ajax error when UiPassword enabled
2016-02-02 11:40:45 +01:00
|
|
|
if ":params" in query:
|
2016-04-18 00:43:47 +02:00
|
|
|
query = query.replace(":params", ",".join(["?"] * len(params)))
|
2017-01-29 19:02:26 +01:00
|
|
|
res = site.storage.query(query + " ORDER BY date_added DESC LIMIT %s" % limit, params)
|
Version 0.3.6, Rev879, Fix sidebar error on description missing, New trayicon, New favicon, Disable some functions on MultiUser proxies, New homepage, Replace only the last ? in SQL queries, Alwaays grant ADMIN permission to homepage site, Announce before publish if no peers, configSet, serverShutdown, ADMIN WebsocketAPI command, Stop Tor client before updating, Ignore peer ip packing error, Ignore db files from git, Fix safari ajax error when UiPassword enabled
2016-02-02 11:40:45 +01:00
|
|
|
else:
|
2017-01-29 19:02:26 +01:00
|
|
|
res = site.storage.query(query + " ORDER BY date_added DESC LIMIT %s" % limit)
|
2017-02-22 11:29:07 +01:00
|
|
|
|
2017-07-16 22:43:57 +02:00
|
|
|
except Exception as err: # Log error
|
Version 0.3.6, Rev879, Fix sidebar error on description missing, New trayicon, New favicon, Disable some functions on MultiUser proxies, New homepage, Replace only the last ? in SQL queries, Alwaays grant ADMIN permission to homepage site, Announce before publish if no peers, configSet, serverShutdown, ADMIN WebsocketAPI command, Stop Tor client before updating, Ignore peer ip packing error, Ignore db files from git, Fix safari ajax error when UiPassword enabled
2016-02-02 11:40:45 +01:00
|
|
|
self.log.error("%s feed query %s error: %s" % (address, name, err))
|
|
|
|
continue
|
2017-02-22 11:29:07 +01:00
|
|
|
|
Version 0.3.6, Rev879, Fix sidebar error on description missing, New trayicon, New favicon, Disable some functions on MultiUser proxies, New homepage, Replace only the last ? in SQL queries, Alwaays grant ADMIN permission to homepage site, Announce before publish if no peers, configSet, serverShutdown, ADMIN WebsocketAPI command, Stop Tor client before updating, Ignore peer ip packing error, Ignore db files from git, Fix safari ajax error when UiPassword enabled
2016-02-02 11:40:45 +01:00
|
|
|
for row in res:
|
|
|
|
row = dict(row)
|
2017-02-22 11:29:07 +01:00
|
|
|
if row["date_added"] > 1000000000000: # Formatted as millseconds
|
|
|
|
row["date_added"] = row["date_added"] / 1000
|
2016-05-16 22:24:30 +02:00
|
|
|
if "date_added" not in row or row["date_added"] > time.time() + 120:
|
2017-02-22 11:29:07 +01:00
|
|
|
self.log.debug("Newsfeed from the future from from site %s" % address)
|
2016-03-03 21:12:16 +01:00
|
|
|
continue # Feed item is in the future, skip it
|
Version 0.3.6, Rev879, Fix sidebar error on description missing, New trayicon, New favicon, Disable some functions on MultiUser proxies, New homepage, Replace only the last ? in SQL queries, Alwaays grant ADMIN permission to homepage site, Announce before publish if no peers, configSet, serverShutdown, ADMIN WebsocketAPI command, Stop Tor client before updating, Ignore peer ip packing error, Ignore db files from git, Fix safari ajax error when UiPassword enabled
2016-02-02 11:40:45 +01:00
|
|
|
row["site"] = address
|
|
|
|
row["feed_name"] = name
|
|
|
|
rows.append(row)
|
|
|
|
return self.response(to, rows)
|
|
|
|
|
2016-04-18 00:47:09 +02:00
|
|
|
def actionFeedSearch(self, to, search):
|
|
|
|
if "ADMIN" not in self.site.settings["permissions"]:
|
|
|
|
return self.response(to, "FeedSearch not allowed")
|
|
|
|
|
|
|
|
from Site import SiteManager
|
|
|
|
rows = []
|
|
|
|
num_sites = 0
|
|
|
|
s = time.time()
|
|
|
|
for address, site in SiteManager.site_manager.list().iteritems():
|
|
|
|
if not site.storage.has_db:
|
|
|
|
continue
|
|
|
|
|
2016-04-19 12:00:58 +02:00
|
|
|
if site.storage.db: # Database loaded
|
|
|
|
feeds = site.storage.db.schema.get("feeds")
|
|
|
|
else:
|
|
|
|
try:
|
|
|
|
feeds = site.storage.loadJson("dbschema.json").get("feeds")
|
|
|
|
except:
|
|
|
|
continue
|
2016-04-18 00:47:09 +02:00
|
|
|
|
|
|
|
if not feeds:
|
|
|
|
continue
|
|
|
|
|
|
|
|
num_sites += 1
|
|
|
|
|
|
|
|
for name, query in feeds.iteritems():
|
|
|
|
try:
|
|
|
|
db_query = DbQuery(query)
|
|
|
|
db_query.wheres.append("%s LIKE ? OR %s LIKE ?" % (db_query.fields["body"], db_query.fields["title"]))
|
|
|
|
db_query.parts["ORDER BY"] = "date_added DESC"
|
|
|
|
db_query.parts["LIMIT"] = "30"
|
|
|
|
|
|
|
|
search_like = "%" + search.replace(" ", "%") + "%"
|
|
|
|
res = site.storage.query(str(db_query), [search_like, search_like])
|
|
|
|
except Exception, err:
|
|
|
|
self.log.error("%s feed query %s error: %s" % (address, name, err))
|
|
|
|
continue
|
|
|
|
for row in res:
|
|
|
|
row = dict(row)
|
|
|
|
if row["date_added"] > time.time() + 120:
|
|
|
|
continue # Feed item is in the future, skip it
|
|
|
|
row["site"] = address
|
|
|
|
row["feed_name"] = name
|
|
|
|
rows.append(row)
|
|
|
|
return self.response(to, {"rows": rows, "num": len(rows), "sites": num_sites, "taken": time.time() - s})
|
|
|
|
|
Version 0.3.6, Rev879, Fix sidebar error on description missing, New trayicon, New favicon, Disable some functions on MultiUser proxies, New homepage, Replace only the last ? in SQL queries, Alwaays grant ADMIN permission to homepage site, Announce before publish if no peers, configSet, serverShutdown, ADMIN WebsocketAPI command, Stop Tor client before updating, Ignore peer ip packing error, Ignore db files from git, Fix safari ajax error when UiPassword enabled
2016-02-02 11:40:45 +01:00
|
|
|
|
|
|
|
@PluginManager.registerTo("User")
|
|
|
|
class UserPlugin(object):
|
|
|
|
# Set queries that user follows
|
|
|
|
def setFeedFollow(self, address, feeds):
|
|
|
|
site_data = self.getSiteData(address)
|
|
|
|
site_data["follow"] = feeds
|
|
|
|
self.save()
|
|
|
|
return site_data
|