#!@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")