コード例 #1
0
ファイル: util_oblive_address.py プロジェクト: fidoman/PyFTN
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)
コード例 #2
0
ファイル: ftnpoll.py プロジェクト: fidoman/PyFTN
    def do(self):
        to_poll = set()
        for d in self.dests:
            to_poll.update(
                map(lambda x: x[0], ftnexport.get_subscribers(self.db, d)))
        self.dests = set()
        myzone = ftn.addr.str2addr(ftnconfig.ADDRESS)[0]
        #print (myzone)
        for a in to_poll:
            #print("poll", a)
            a = ftnconfig.get_addr(self.db, a)[1]
            #print (a)
            link_id = ftnconfig.find_link(self.db, a)
            if ftnconfig.get_link_polling(self.db, link_id):
                print("poll", a)
            else:
                #print ("not needed")
                continue
            addr = ftn.addr.str2addr(a)
            if addr[0] == myzone:
                zonepath = ftnconfig.BINKLEYSTYLE
            else:
                zonepath = ftnconfig.BINKLEYSTYLE + ".%d" % addr[0]
            if addr[3] == 0:
                pollfilename = "%04x%04x.dlo" % (addr[1], addr[2])
                basepath = zonepath
            else:
                pollfilename = "0000%04x.dlo" % addr[3]
                basepath = os.path.join(zonepath,
                                        "%04x%04x.pnt" % (addr[1], addr[2]))

            try:
                os.makedirs(basepath, exist_ok=True)
            except FileExistsError:
                pass
            except:
                print("could not create outbound directory")
                return
            try:
                touch = open(os.path.join(basepath, pollfilename), "a")
                touch.close()
            except:
                print("could not poll", a)
                traceback.print_exc()
コード例 #3
0
ファイル: ftnpoll.py プロジェクト: fidoman/PyFTN
  def do(self):
    to_poll = set()
    for d in self.dests:
      to_poll.update(map(lambda x: x[0], ftnexport.get_subscribers(self.db,d)))
    self.dests=set()
    myzone=ftn.addr.str2addr(ftnconfig.ADDRESS)[0]
    #print (myzone)
    for a in to_poll:
      #print("poll", a)
      a=ftnconfig.get_addr(self.db, a)[1]
      #print (a)
      link_id=ftnconfig.find_link(self.db, a)
      if ftnconfig.get_link_polling(self.db, link_id):
         print ("poll",a)
      else:
        #print ("not needed")
        continue
      addr=ftn.addr.str2addr(a)
      if addr[0]==myzone:
        zonepath=ftnconfig.BINKLEYSTYLE
      else:
        zonepath=ftnconfig.BINKLEYSTYLE+".%d"%addr[0]
      if addr[3]==0:
        pollfilename="%04x%04x.dlo"%(addr[1], addr[2])
        basepath=zonepath
      else:
        pollfilename="0000%04x.dlo"%addr[3]
        basepath=os.path.join(zonepath, "%04x%04x.pnt"%(addr[1], addr[2]))

      try:
        os.makedirs(basepath, exist_ok=True)
      except FileExistsError:
        pass
      except:
        print ("could not create outbound directory")
        return
      try:
        touch=open(os.path.join(basepath,pollfilename),"a")
        touch.close()
      except:
        print ("could not poll", a)
        traceback.print_exc()
コード例 #4
0
ファイル: util_oblive_address.py プロジェクト: evs38/PyFTN
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)
コード例 #5
0
ファイル: util_purge.py プロジェクト: fidoman/PyFTN
                for x in ftnexport.get_subscribers(db, aid)
        ]:
            print(node)
            sess.send_message(
                ftnconfig.SYSOP, ("node", node), "Sysop", None,
                "Area Expunging notification", """Dear Sysop,

%s %s is about to be deleted from node %s.
Please find new uplink for the area or 
expunge it too.
""" % (domain, area, ftnconfig.ADDRESS))

            sess.remove_subscription(domain, area, node)

            if node != ftnconfig.ADDRESS:
                for link_id in ftnconfig.find_link(node):
                    my, pw = ftnaccess.link_password(db, link_id, True)
                    # FIX choose sender address (=my)
                    sess.send_message(ftnconfig.SYSOP, ("node", node), robot,
                                      None, pw, "-" + area)

            sess.forget_address(domain, area)

    exit()

exit()

# ???
outp = []

pw = ftnconfig.get_link_password(db, link, True)
コード例 #6
0
ファイル: ftnroute.py プロジェクト: fidoman/PyFTN
#for k, v in hubs.items():
#  print ("%-17s: "%k, ", ".join(v))
#print ()
#exit()

downlinks = ftnexport.get_subnodes(db, ADDRESS)
#print (downlinks)
#exit()

selfsubscribers = set()
selfsubscribers.add(ADDRESS)
selfsubscribers.add(ADDRESS+".999")

# filter links that are not password-protected
for x in list(links) + downlinks:
  if not find_link(db, x, netmail=True):
    print ("skip", x)
  else:
    selfsubscribers.add(x)

#print ("direct links =", ", ".join(selfsubscribers))

# add subscription for self
for l in selfsubscribers:
  hubs.setdefault(l, set()).add(l)

#print ("subscriptions")
#for k, v in hubs.items():
#  print ("subscribe %s to"%k, ", ".join(v))
#print ()
#exit()
コード例 #7
0
ファイル: util_subscription.py プロジェクト: fidoman/PyFTN
try:
  cmd = sys.argv[1]
  domain = sys.argv[2]
  area = sys.argv[3]
  subscriber = sys.argv[4]
except:
  print("usage: ./util_subscription.py add|addvital|remove echo|fileecho AREANAME 2:5020/9999")
  exit()

try:
  robot = ftnconfig.robotnames[domain]
except:
  raise Exception("cannot manage subscriptions in domain", domain)

link_id = ftnconfig.find_link(db, subscriber)
my_id, pw = ftnaccess.link_password(db, link_id, forrobots=True)
my_addr = ftnconfig.get_taddr(db, my_id)

with ftnimport.session(db) as sess:
  if cmd == "add":
    try:
      sess.add_subscription(None, domain, area, subscriber)
    except FTNAlreadySubscribed:
      print ("local subscription exists")
    if subscriber != ftnconfig.ADDRESS:
      sess.send_message(my_addr, ftnconfig.SYSOP, ("node", subscriber), robot, None, pw, "+"+area, sendmode="direct")
    else:
      print ("local subscription")

  elif cmd == "remove":
コード例 #8
0
    cmd = sys.argv[1]
    domain = sys.argv[2]
    area = sys.argv[3]
    subscriber = sys.argv[4]
except:
    print(
        "usage: ./util_subscription.py add|addvital|remove echo|fileecho AREANAME 2:5020/9999"
    )
    exit()

try:
    robot = ftnconfig.robotnames[domain]
except:
    raise Exception("cannot manage subscriptions in domain", domain)

link_id = ftnconfig.find_link(db, subscriber)
my_id, pw = ftnaccess.link_password(db, link_id, forrobots=True)
my_addr = ftnconfig.get_taddr(db, my_id)

with ftnimport.session(db) as sess:
    if cmd == "add":
        try:
            sess.add_subscription(None, domain, area, subscriber)
        except FTNAlreadySubscribed:
            print("local subscription exists")
        if subscriber != ftnconfig.ADDRESS:
            sess.send_message(my_addr,
                              ftnconfig.SYSOP, ("node", subscriber),
                              robot,
                              None,
                              pw,
コード例 #9
0
ファイル: util_link.py プロジェクト: fidoman/PyFTN

def get_link(lid):
    pass


def set_link(lid, data):
    pass


cmd = sys.argv[1]

if cmd == "list":
    for lid, addr in db.prepare("select l.id, a.text from links l, addresses a where a.id=l.address"):
        print(lid, addr)

elif cmd == "add":
    addr = sys.argv[2]
    lid = ftnconfig.find_link(db, addr)
    if lid is not None:
        print("already exists")
        exit()
    pasw = sys.argv[3]
    input("confirm add " + addr + " pw " + pasw)
    with ftnimport.session(db) as sess:
        sess.import_link_auth(myaddr, addr, pasw, pasw)

# authentication = <FTNAUTH><ConnectPassword>pwd</ConnectPassword><RobotsPassword>pwd</RobotsPassword></FTNAUTH>
# my = 160 (myaddr_id)
# lastsent = time.time()
コード例 #10
0
ファイル: util_link.py プロジェクト: fidoman/PyFTN
import ftnimport
db=ftnconfig.connectdb()

def get_link(lid):
  pass
  
def set_link(lid, data):
  pass

cmd=sys.argv[1]
myaddr=ftnconfig.ADDRESS

if cmd=="list":
  for lid, addr in db.prepare("select l.id, a.text from links l, addresses a where a.id=l.address"):
    print (lid, addr)

elif cmd=="add":
  addr = sys.argv[2]
  lid = ftnconfig.find_link(db, addr)
  if lid is not None:
    print("already exists")
    exit()
  pasw = sys.argv[3]
  input("confirm add "+addr+" pw "+pasw)
  with ftnimport.session(db) as sess:
    sess.import_link_auth(myaddr, addr, pasw, pasw)

#authentication = <FTNAUTH><ConnectPassword>pwd</ConnectPassword><RobotsPassword>pwd</RobotsPassword></FTNAUTH>
# my = 160 (myaddr_id)
# lastsent = time.time()
コード例 #11
0
ファイル: util_purge.py プロジェクト: fidoman/PyFTN
    input("enter to purge, Ctrl-C to abort")
    for node in [ftnconfig.get_addr(db, x[0])[1] for x in ftnexport.get_subscribers(db, aid)]:
      print (node)
      sess.send_message(ftnconfig.SYSOP, ("node", node),
                            "Sysop", None, "Area Expunging notification", """Dear Sysop,

%s %s is about to be deleted from node %s.
Please find new uplink for the area or 
expunge it too.
"""%(domain, area, ftnconfig.ADDRESS))

      sess.remove_subscription(domain, area, node)

      if node != ftnconfig.ADDRESS:
        for link_id in ftnconfig.find_link(node):
          my, pw = ftnaccess.link_password(db, link_id, True)
          # FIX choose sender address (=my)
          sess.send_message(ftnconfig.SYSOP, ("node", node), robot, None, 
            pw, "-"+area)

      sess.forget_address(domain, area)



  exit()



exit()