def oblive(db, address): robot = ftnconfig.robotnames[address[0]] addr_id = ftnconfig.get_taddr_id(db, address) if addr_id is None: raise Exception("not found") msg_from = db.prepare("select count (*) from messages where source=$1").first(addr_id) msg_to = db.prepare("select count (*) from messages where destination=$1").first(addr_id) print (address, addr_id, "from:", msg_from, "to:", msg_to) if msg_from!=0 or msg_to!=0: print("messages exist") return # assert( input("enter 'yes' to confirm: ")=="yes" ) with ftnimport.session(db) as sess: for (link_addr,subs_id) in db.prepare("select a.text, s.id from addresses a, subscriptions s where a.id=s.subscriber and s.target=$1")(addr_id): print ("unsubscribing",link_addr) link_id = ftnconfig.find_link(db, link_addr) my_id, pw=ftnaccess.link_password(db, link_id, forrobots=True) sess.send_message(ftnconfig.get_taddr(db, my_id), ftnconfig.SYSOP, ("node", link_addr), robot, None, pw, "-"+address[1], sendmode="direct") db.prepare("delete from subscriptions where id=$1")(subs_id) sess.send_message(("node", ftnconfig.ADDRESS), ftnconfig.SYSOP, ("echo", "FLUID.LOCAL"), "All", None, "removal", address[0]+" "+address[1]+" removed from node") db.prepare("delete from deletedvitalsubscriptionwatermarks where target=$1")(addr_id) db.prepare("delete from addresses where id=$1")(addr_id)
def oblive(db, address): robot = ftnconfig.robotnames[address[0]] addr_id = ftnconfig.get_taddr_id(db, address) if addr_id is None: raise Exception("not found") msg_from = db.prepare( "select count (*) from messages where source=$1").first(addr_id) msg_to = db.prepare( "select count (*) from messages where destination=$1").first(addr_id) print(address, addr_id, "from:", msg_from, "to:", msg_to) if msg_from != 0 or msg_to != 0: print("messages exist") return # assert( input("enter 'yes' to confirm: ")=="yes" ) with ftnimport.session(db) as sess: for (link_addr, subs_id) in db.prepare( "select a.text, s.id from addresses a, subscriptions s where a.id=s.subscriber and s.target=$1" )(addr_id): print("unsubscribing", link_addr) link_id = ftnconfig.find_link(db, link_addr) my_id, pw = ftnaccess.link_password(db, link_id, forrobots=True) sess.send_message(ftnconfig.get_taddr(db, my_id), ftnconfig.SYSOP, ("node", link_addr), robot, None, pw, "-" + address[1], sendmode="direct") db.prepare("delete from subscriptions where id=$1")(subs_id) sess.send_message(("node", ftnconfig.ADDRESS), ftnconfig.SYSOP, ("echo", "FLUID.LOCAL"), "All", None, "removal", address[0] + " " + address[1] + " removed from node") db.prepare( "delete from deletedvitalsubscriptionwatermarks where target=$1")( addr_id) db.prepare("delete from addresses where id=$1")(addr_id)
def link_password(db, link_id, forrobots): "returns matching myaddr_id and password" if link_id is None: return ftnconfig.get_taddr_id(db, ("node", ftnconfig.ADDRESS)), None x = db.prepare("select l.my, l.authentication from links l where l.id=$1")(link_id) if len(x)>1: raise Exception("DB error: link_id %d not unique"%link_id) if len(x)==0: return None, None my_id, authinfo = x[0] pw = "" if forrobots: if authinfo.find("RobotsPassword") is not None: pw = authinfo.find("RobotsPassword").text else: if authinfo.find("ConnectPassword") is not None: pw = authinfo.find("ConnectPassword").text return my_id, pw
def link_password(db, link_id, forrobots): "returns matching myaddr_id and password" if link_id is None: return ftnconfig.get_taddr_id(db, ("node", ftnconfig.ADDRESS)), None x = db.prepare("select l.my, l.authentication from links l where l.id=$1")( link_id) if len(x) > 1: raise Exception("DB error: link_id %d not unique" % link_id) if len(x) == 0: return None, None my_id, authinfo = x[0] pw = "" if forrobots: if authinfo.find("RobotsPassword") is not None: pw = authinfo.find("RobotsPassword").text else: if authinfo.find("ConnectPassword") is not None: pw = authinfo.find("ConnectPassword").text return my_id, pw