#!@PYTHON@ # -*-python-*- # Copyright (C) 2005 by Sebastien Estienne # # This file may be distributed and/or modified under the terms of # the GNU General Public License version 2 as published by # the Free Software Foundation. # This file is distributed without any warranty; without even the implied # warranty of merchantability or fitness for a particular purpose. # See "COPYING" in the source distribution for more information. # # $id$ # # BIG WARNING: # this file is for the moment a big ugly quick hack # I'm working on a clean plugin system to handle actions for service types # it will hopefully appear in 0.3 # this file is just an interim solution to give the same functionnaly as 0.1 try: import gettext gettext.bindtextdomain("@GETTEXT_PACKAGE@", "@LOCALEDIR@") gettext.textdomain("@GETTEXT_PACKAGE@") _ = gettext.gettext import pygtk pygtk.require('2.0') import gtk import os import pwd import subprocess import gnome except ImportError, e: error_msg(_("A required python module is missing!\n%s") % (e)) sys.exit() def pair_to_dict(l): res = dict() for el in l: if "=" not in el: res[el]='' else: tmp = el.split('=',1) if len(tmp[0]) > 0: res[tmp[0]] = tmp[1] return res def build_url(uri = "http", hostname="127.0.0.1", port = None, path = None, username = None, password = None): if path and path != None: if path[0] == "/": path = path[1:] else: path = "" if username: if password: username="%s:%s@" % (username,password) else: username="%s@" % (username) else: username="" if port and port != None: hostname="%s:%i" % (hostname,port) return "%s://%s%s/%s" % (uri,username,hostname,path) def get_txt_value(txts, txt): if txts.has_key(txt): return txts[txt] else: return None def _http_tcp(name, hostname, address, port, txts): path = get_txt_value(txts,"path") username = get_txt_value(txts,"u") password = get_txt_value(txts,"p") url = build_url("http",address,port, path, username,password) gnome.url_show(url) def _https_tcp(name, hostname, address, port, txts): path = get_txt_value(txts,"path") username = get_txt_value(txts,"u") password = get_txt_value(txts,"p") url = build_url("https",address,port, path, username,password) gnome.url_show(url) def _ftp_tcp(name, hostname, address, port, txts): path = get_txt_value(txts,"path") username = get_txt_value(txts,"u") password = get_txt_value(txts,"p") url = build_url("ftp",address,port, path, username,password) gnome.url_show(url) def _sftpssh_tcp(name, hostname, address, port, txts): path = get_txt_value(txts,"path") username = get_txt_value(txts,"u") password = get_txt_value(txts,"p") url = build_url("ftp",address,port, path, username,password) gnome.url_show(url) def enter_callback(widget, win): win.destroy() def SshLogin(hostname, username = None): global win win = gtk.Dialog(_("SSH Connection"), None, gtk.DIALOG_MODAL, (gtk.STOCK_OK, gtk.RESPONSE_OK)) vbox = gtk.VBox(False, 5) win.vbox.pack_start(vbox, True, True, 0) vbox.set_border_width(5) label = gtk.Label() label.set_markup(_("Connecting to %s.\nPlease enter your login:") % (hostname)) vbox.pack_start(label, False, False, 0) # Create our entry entry = gtk.Entry() if username!= None: entry.set_text(username) entry.connect("activate", enter_callback, win) vbox.pack_start(entry, False, False, 0) # Create the completion object completion = gtk.EntryCompletion() # Assign the completion to the entry entry.set_completion(completion) # Create a tree model and use it as the completion model completion_model = __create_completion_model() completion.set_model(completion_model) # Use model column 0 as the text column completion.set_text_column(0) win.show_all() win.run() return entry.get_text() def __create_completion_model(): ''' Creates a tree model containing the completions. ''' store = gtk.ListStore(str) iter = store.append() store.set(iter, 0, "root") current_user = pwd.getpwuid(os.getuid())[0] iter = store.append() store.set(iter, 0, current_user) return store def _ssh_tcp(name, hostname, address, port, txts): if txts.has_key("u"): username = SshLogin(name, txts["u"]) else: username = SshLogin(name) if username != "": sshline = "ssh -l %s -p %i %s" % (username, port, address) else: sshline = "ssh -p %i %s" % (port, address) cmdline = [] cmdline.append("gnome-terminal") cmdline.append("--tab") cmdline.append("-t %s" % name) cmdline.append("-e %s" % sshline) pid = subprocess.Popen(cmdline).pid def handle(name, stype, hostname, address, port, txts): if stype == "_http._tcp": _http_tcp(name, hostname, address, port, txts) return if stype == "_https._tcp": _https_tcp(name, hostname, address, port, txts) return if stype == "_ftp._tcp": _ftp_tcp(name, hostname, address, port, txts) return if stype == "_ssh._tcp": _ssh_tcp(name, hostname, address, port, txts) return if stype == "_sftp-ssh._tcp": _sftpssh_tcp(name, hostname, address, port, txts) return if __name__ == "__main__": print build_url() print build_url("ftp") print build_url("https","www.google.com") print build_url("https","www.google.com",80) print build_url("https","www.google.com",80) print build_url("https","www.google.com",80,"test") print build_url("https","www.google.com",80,"/test") print build_url("https","www.google.com",80,"/test", "user") print build_url("https","www.google.com",0, "", None, "pass") print build_url("https","www.google.com",80,"/test", "user", "pass")