Esempio n. 1
0
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)
Esempio n. 2
0
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)
Esempio n. 3
0
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
Esempio n. 4
0
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