def setRepeat(self, device, value): #REP_PERIOD if self.getDeviceAttribute(device, 'enabled'): print "[iInputDevices] setRepeat for device %s to %d ms" % (device,value) event = struct.pack('iihhi', 0, 0, 0x14, 0x01, int(value)) fd = os_open("/dev/input/" + device, O_RDWR) os_write(fd, event) os_close(fd)
def setDelay(self, device, value): if self.getDeviceAttribute(device, 'enabled'): print '[iInputDevices] setDelay for device %s to %d ms' % (device, value) event = struct.pack('iihhi', 0, 0, 20, 0, int(value)) fd = os_open('/dev/input/' + device, O_RDWR) os_write(fd, event) os_close(fd)
def match_or_trust(self, host, der_encoded_certificate): base64_encoded_certificate = b64encode(der_encoded_certificate) if isfile(self.path): with open(self.path) as f_in: for line in f_in: known_host, _, known_cert = line.strip().partition(":") known_cert = known_cert.encode("utf-8") if host == known_host: return base64_encoded_certificate == known_cert # First use (no hosts match) try: makedirs(dirname(self.path)) except OSError: pass f_out = os_open(self.path, O_CREAT | O_APPEND | O_WRONLY, 0o600) # TODO: Windows if isinstance(host, bytes): os_write(f_out, host) else: os_write(f_out, host.encode("utf-8")) os_write(f_out, b":") os_write(f_out, base64_encoded_certificate) os_write(f_out, b"\n") os_close(f_out) return True
def setRepeat(self, device, value): #REP_PERIOD if self.getDeviceAttribute(device, 'enabled') == True: print "[iInputDevices] setRepeat for device %s to %d ms" % (device,value) event = struct.pack('iihhi', 0, 0, 0x14, 0x01, int(value)) fd = os_open("/dev/input/" + device, O_RDWR) os_write(fd, event) os_close(fd)
def setDelay(self, device, value): #REP_DELAY if self.getDeviceAttribute(device, 'enabled'): print "[iInputDevices] setDelay for device %s to %d ms" % (device,value) event = struct.pack('iihhi', 0, 0, 0x14, 0x00, int(value)) fd = os_open("/dev/input/" + device, O_RDWR) os_write(fd, event) os_close(fd)
def write(self, bts): """Write an IP packet to this TUN device.""" try: os_write(self._fileno_iface_fd, bts) except TypeError: # write after closing pass
def setDelay(self, device, value): #REP_DELAY if self.getDeviceAttribute(device, 'enabled') == True: print "[iInputDevices] setDelay for device %s to %d ms" % (device,value) event = struct.pack('iihhi', 0, 0, 0x14, 0x00, int(value)) fd = os_open("/dev/input/" + device, O_RDWR) os_write(fd, event) os_close(fd)
def setDelay(self, device, value): if self.getDeviceAttribute(device, 'enabled'): print '[iInputDevices] setDelay for device %s to %d ms' % (device, value) event = struct.pack('LLHHi', 0, 0, 20, 0, int(value)) fd = os_open('/dev/input/' + device, O_RDWR) os_write(fd, event) os_close(fd)
def setDefaults(self, device): print '[iInputDevices] setDefaults for device %s' % device self.setDeviceAttribute(device, 'configuredName', None) event_repeat = struct.pack('LLHHi', 0, 0, 20, 1, 100) event_delay = struct.pack('LLHHi', 0, 0, 20, 0, 700) fd = os_open('/dev/input/' + device, O_RDWR) os_write(fd, event_repeat) os_write(fd, event_delay) os_close(fd)
def setDefaults(self, device): print "[iInputDevices] setDefaults for device %s" % (device) self.setDeviceAttribute(device, 'configuredName', None) event_repeat = struct.pack('iihhi', 0, 0, 0x14, 0x01, 100) event_delay = struct.pack('iihhi', 0, 0, 0x14, 0x00, 700) fd = os_open("/dev/input/" + device, O_RDWR) os_write(fd, event_repeat) os_write(fd, event_delay) os_close(fd)
def setDefaults(self, device): print "[iInputDevices] setDefaults for device %s" % device self.setDeviceAttribute(device, 'configuredName', None) event_repeat = struct.pack('iihhi', 0, 0, 0x14, 0x01, 100) event_delay = struct.pack('iihhi', 0, 0, 0x14, 0x00, 700) fd = os_open("/dev/input/" + device, O_RDWR) os_write(fd, event_repeat) os_write(fd, event_delay) os_close(fd)
def setDefaults(self, device): print '[InputDevice] setDefaults for device %s' % device self.setDeviceAttribute(device, 'configuredName', None) event_repeat = struct.pack('iihhi', 0, 0, 20, 1, 100) event_delay = struct.pack('iihhi', 0, 0, 20, 0, 700) fd = os_open('/dev/input/' + device, O_RDWR) os_write(fd, event_repeat) os_write(fd, event_delay) os_close(fd) return
def render_POST(self, req): data = req.args['file'][0] print "[filename req.args]", req.args['filename'][0] filename = mbasename(req.args['filename'][0]) print "[filename]", filename if not filename.endswith(".ipk"): return self.res % (_("wrong filetype!") ,_("Close"), _("Add")) if not data: req.setResponseCode(http.OK) return self.res % ( _("filesize was 0, not uploaded") , _("Close"), _("Add") ) fd,fn = mkstemp(dir = "/tmp/") cnt = os_write(fd, data) os_close(fd) os_chmod(fn, 0755) if cnt <= 0: # well, actually we should check against len(data) but lets assume we fail big time or not at all try: os_unlink(fn) except OSError, oe: pass req.setResponseCode(http.OK) return self.res % (_("error writing to disk, not uploaded"),_("Close"), _("Add"))
def render_POST(self, req): uploaddir = self.default_uploaddir if req.args['path'][0]: if os_path.isdir(req.args['path'][0]): uploaddir = req.args['path'][0] if uploaddir[-1] != "/": uploaddir += "/" else: req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "path '%s' to upload not existing!" % req.args['path'][0] data = req.args['file'][0] if not data: req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "filesize was 0, not uploaded" fd, fn = mkstemp(dir=uploaddir) cnt = os_write(fd, data) os_close(fd) os_chmod(fn, 0755) if cnt <= 0: # well, actually we should check against len(data) but lets assume we fail big time or not at all try: os_unlink(fn) except OSError, oe: pass req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "error writing to disk, not uploaded"
def render_POST(self, req): req.setResponseCode(http.OK) req.setHeader('Content-type', 'application/xhtml+xml;' ) req.setHeader('charset', 'UTF-8') data = req.args['file'][0] if not data: result = """<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n <e2simplexmlresult>\n <e2state>False</e2state> <e2statetext>Filesize was 0, not uploaded</e2statetext> </e2simplexmlresult>\n""" return result fd = os_open( self.FILENAME, os_O_WRONLY|os_O_CREAT ) if fd: cnt = os_write(fd, data) os_close(fd) if cnt <= 0: try: os_remove(FILENAME) except OSError as oe: pass result = """<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n <e2simplexmlresult>\n <e2state>False</e2state> <e2statetext>Error writing to disk, not uploaded</e2statetext> </e2simplexmlresult>\n""" else: result = """<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n <e2simplexmlresult>\n <e2state>True</e2state> <e2statetext>%s</e2statetext> </e2simplexmlresult>\n""" % self.FILENAME return result
def render_POST(self, req): uploaddir = self.default_uploaddir if req.args['path'][0]: if os_path.isdir(req.args['path'][0]): uploaddir = req.args['path'][0] if uploaddir[-1] != "/": uploaddir += "/" else: req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "path '%s' to upload not existing!" % req.args['path'][0] data = req.args['file'][0] if not data: req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "filesize was 0, not uploaded" fd, fn = mkstemp(dir = uploaddir) cnt = os_write(fd, data) os_close(fd) os_chmod(fn, 0755) if cnt <= 0: # well, actually we should check against len(data) but lets assume we fail big time or not at all try: os_unlink(fn) except OSError, oe: pass req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "error writing to disk, not uploaded"
def choose(): self.dir_name = filedialog.askdirectory(initialdir="") dda = DEFAULT_DIR_ADDRESS dn = self.dir_name if dn: try: dd = os_open(dda, O_CREAT | O_RDWR) except PermissionError: showerror(title="错误", message="请确保C盘用户文件夹有读写权限哦") else: if path.exists(dda): os_close(dd) os_remove(dda) dd = os_open(dda, O_CREAT | O_RDWR) os_write(dd, str.encode(dn)) os_close(dd) self.lb.config(text="已选择存储地址:%s" % dn, fg="#00FA9A", font=("simsun", "9")) else: self.lb.config(text="未选择存储地址", justify=LEFT, fg="#FA8072", font=("simsun", "9"))
def os_write_all(ofd, data): while True: try: n = os_write(ofd, data) except OSError as e: # This may happen if we fill-up the output pipe's buffer. if e.errno != errno.EAGAIN: raise n = 0 if n == len(data): return data = data[n:]
def start(self): oldPlayTimeHr = -1 oldPlayTimeMin = -1 oldPlayTimeSec = -1 oldTime = -1 logger.info("Service started...") while True: clock = True clientConnected = self.__checkAndConnectToMpd() if clientConnected: try: clientStatus = self._mpdclient.status() except Exception as e: logger.error("Failed to obtain MPD status!", exc_info=True) clientStatus = None if clientStatus is not None and "state" in clientStatus and clientStatus[ "state"] == "play" and "elapsed" in clientStatus: # Show play time currentPlayTime = float(clientStatus["elapsed"]) currentPlayTimeHr = min(int(currentPlayTime / 3600), 99) if currentPlayTimeHr == 99: currentPlayTimeMin = min( int((currentPlayTime - 356400) / 60), 99) currentPlayTimeSec = 0 else: currentPlayTimeMin = int((currentPlayTime % 3600) / 60) currentPlayTimeSec = int(currentPlayTime % 60) clock = False if currentPlayTimeHr == 0 and ( oldPlayTimeMin != currentPlayTimeMin or oldPlayTimeSec != currentPlayTimeSec): oldPlayTimeHr = -1 oldPlayTimeMin = currentPlayTimeMin oldPlayTimeSec = currentPlayTimeSec bytePlayTime = struct.pack(b"bbbb", currentPlayTimeMin, currentPlayTimeSec, 0, 1) os_write(self._vfd_dev, bytePlayTime) elif currentPlayTimeHr > 0 and ( oldPlayTimeHr != currentPlayTimeHr or oldPlayTimeMin != currentPlayTimeMin): oldPlayTimeHr = currentPlayTimeHr oldPlayTimeMin = currentPlayTimeMin oldPlayTimeSec = -1 bytePlayTime = struct.pack(b"bbbb", currentPlayTimeHr, currentPlayTimeMin, 0, 1) os_write(self._vfd_dev, bytePlayTime) if clock: currentTime = datetime.now().time().hour + datetime.now().time( ).minute if (oldTime != currentTime): oldTime = currentTime byteTime = struct.pack(b"bbbb", datetime.now().time().hour, datetime.now().time().minute, datetime.now().time().second, 1) os_write(self._vfd_dev, byteTime) time.sleep(0.2)
def render_POST(self, req): isXml = 'xml' in req.args and req.args['xml'][0] == 'True' uploaddir = self.default_uploaddir if req.args['path'][0]: if os_path.isdir(req.args['path'][0]): uploaddir = req.args['path'][0] if uploaddir[-1] != "/": uploaddir += "/" else: return self.out_POST( req, False, "path '%s' to upload not existing!" % req.args['path'][0], isXml) data = req.args['file'][0] if not data: return self.out_POST(req, False, "filesize was 0, not uploaded", isXml) # allw to overwrite files (if the user requests it), but not in critical directories overwrite = 'overwrite' in req.args and req.args['overwrite'][ 0] == 'True' if overwrite and uploaddir in self.restricted_paths: overwrite = False try: matches = search('.*?filename="(.*?)"\r\n.*?', req.content.getvalue()) fn = os_path.join(uploaddir, matches.group(1)) except Exception as e: fn = None # NOTE: we only accept the given filename if no such file exists yet or the user requested it AND we think its safe if fn and (overwrite or not os_path.exists(fn)): fd = os_open(fn, O_WRONLY | O_CREAT) else: fd, fn = mkstemp(dir=uploaddir) cnt = os_write(fd, data) os_close(fd) os_chmod(fn, 0o755) if cnt <= 0: # well, actually we should check against len(data) but lets assume we fail big time or not at all try: os_unlink(fn) except OSError as oe: pass return self.out_POST(req, False, "error writing to disk, not uploaded", isXml) else: statetext = fn if isXml else "uploaded to %s" % fn return self.out_POST(req, True, statetext, isXml)
def render_POST(self, req): uploaddir = self.default_uploaddir print "[UploadTextResource] req.args ", req.args if req.args['path'][0]: if os_path.isdir(req.args['path'][0]): uploaddir = req.args['path'][0] if uploaddir[-1] != "/": uploaddir += "/" else: print "[UploadTextResource] not a dir", req.args['path'][0] req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "path '%s' to upload not existing!" % req.args['path'][0] if uploaddir[: 10] == "/etc/opkg/" or uploaddir[: 12] == "/usr/script/": pass else: req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "illegal upload directory: " + req.args['path'][0] data = req.args['text'][0].replace('\r\n', '\n') if not data: req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "filesize was 0, not uploaded" else: print "[UploadTextResource] text:", data filename = req.args['filename'][0] fd, fn = mkstemp(dir=uploaddir) cnt = os_write(fd, data) os_close(fd) os_chmod(fn, 0755) if cnt <= 0: # well, actually we should check against len(data) but lets assume we fail big time or not at all try: os_unlink(fn) except OSError, oe: pass req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "error writing to disk, not uploaded"
def render_POST(self, req): uploaddir = self.default_uploaddir print "[UploadTextResource] req.args ", req.args if req.args["path"][0]: if os_path.isdir(req.args["path"][0]): uploaddir = req.args["path"][0] if uploaddir[-1] != "/": uploaddir += "/" else: print "[UploadTextResource] not a dir", req.args["path"][0] req.setResponseCode(http.OK) req.setHeader("Content-type", "text/html") return "path '%s' to upload not existing!" % req.args["path"][0] if uploaddir[:10] == "/etc/opkg/" or uploaddir[:12] == "/usr/script/": pass else: req.setResponseCode(http.OK) req.setHeader("Content-type", "text/html") return "illegal upload directory: " + req.args["path"][0] data = req.args["text"][0].replace("\r\n", "\n") if not data: req.setResponseCode(http.OK) req.setHeader("Content-type", "text/html") return "filesize was 0, not uploaded" else: print "[UploadTextResource] text:", data filename = req.args["filename"][0] fd, fn = mkstemp(dir=uploaddir) cnt = os_write(fd, data) os_close(fd) os_chmod(fn, 0755) if cnt <= 0: # well, actually we should check against len(data) but lets assume we fail big time or not at all try: os_unlink(fn) except OSError, oe: pass req.setResponseCode(http.OK) req.setHeader("Content-type", "text/html") return "error writing to disk, not uploaded"
def render_POST(self, req): data = req.args['file'][0] print("[filename req.args]", req.args['filename'][0]) filename = mbasename(req.args['filename'][0]) print("[filename]", filename) if not filename.endswith(".ipk"): return self.res % (_("wrong filetype!"), _("Close"), _("Add")) if not data: req.setResponseCode(http.OK) return self.res % (_("filesize was 0, not uploaded"), _("Close"), _("Add")) fd, fn = mkstemp(dir="/tmp/") cnt = os_write(fd, data) os_close(fd) os_chmod(fn, 0o755) if cnt <= 0: # well, actually we should check against len(data) but lets assume we fail big time or not at all try: os_unlink(fn) except OSError as oe: pass req.setResponseCode(http.OK) return self.res % (_("error writing to disk, not uploaded"), _("Close"), _("Add")) else: file = "/tmp/" + filename os_rename(fn, (file)) if file is not None: out = os_popen("opkg install %s" % file) debug = "" for line in out: debug += line else: return self.res % (_("error writing to disk, not uploaded"), _("Close"), _("Add")) req.setResponseCode(http.OK) return self.res % ((debug), _("Close"), _("Add"))
def render_POST(self, req): req.setResponseCode(http.OK) req.setHeader('Content-type', 'application/xhtml+xml;' ) req.setHeader('charset', 'UTF-8') data = req.args['file'][0] if not data: result = """<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n <e2simplexmlresult>\n <e2state>False</e2state> <e2statetext>Filesize was 0, not uploaded</e2statetext> </e2simplexmlresult>\n""" return result fd = os_open( self.FILENAME, os_O_WRONLY|os_O_CREAT ) if fd: cnt = os_write(fd, data) os_close(fd) if cnt <= 0: try: os_remove(FILENAME) except OSError, oe: pass result = """<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n
def generate_ephemeral_certificate(return_as_strings=False): """ Create ephemeral self-signed certificate and return it with key. Based on http://www.web2pyslices.com/slice/show/1507/generate-ssl-self-signed-certificate-and-key-enable-https-encryption-in-web2py Args: return_as_strings - Boolean. If True, will return strings containing file content. If False, will return path to each file Returns: tuple of str - either path_to_certfile, path_to_keyfile or certfile_content, keyfile_content """ from OpenSSL import crypto, rand from socket import gethostname from tempfile import mkstemp from os import write as os_write, unlink # create a key pair k = crypto.PKey() k.generate_key(crypto.TYPE_RSA, 4096) # poor effort at providing a random serial number for the cert randbytes = rand.bytes(4) cert_serial = ord(randbytes[0]) for c in randbytes[1:]: cert_serial = cert_serial * ord(c) # create a self-signed cert cert = crypto.X509() cert.get_subject().C = "GB" cert.get_subject().ST = "State" cert.get_subject().L = "City" cert.get_subject().O = "Company" cert.get_subject().OU = "Organization" cert.get_subject().CN = gethostname() cert.set_serial_number(cert_serial) cert.gmtime_adj_notBefore(0) cert.gmtime_adj_notAfter(10*365*24*60*60) cert.set_issuer(cert.get_subject()) cert.set_pubkey(k) cert.sign(k, 'sha256') # we have to write a file to disk as Python's ssl implementation calls C code that expects an actual file cfile, cfile_path = mkstemp() kfile, kfile_path = mkstemp() os_write(cfile, crypto.dump_certificate(crypto.FILETYPE_PEM, cert)) os_write(kfile, crypto.dump_privatekey(crypto.FILETYPE_PEM, k)) if return_as_strings: cert_data = ''.join(open(cfile_path, 'r').readlines()) key_data = ''.join(open(kfile_path, 'r').readlines()) try: unlink(cfile_path) unlink(kfile_path) except: pass return cert_data, key_data else: return cfile_path, kfile_path
def write(b): os_write(fd, b)
if (now - start) > self.server.config['ReadTimeout']: print 'Connection Timeout' self.connection.send('stream: ERROR timeout\n') ok = False break if r: try: d = conn.recv(4096) if not d: break bytes = bytes + len(d) if bytes > self.server.config['StreamMaxLength']: print 'ScanStream: StreamMaxLength reached (max: %s)' % self.server.config['StreamMaxLength'] self.connection.send('stream: ERROR StreamMaxLength reached\n') ok = False break os_write(f, d) start = now except Exception, error: print 'Error Recv', error self.connection.send('stream: ERROR %s\n' % error) ok = False break if e: print 'Error select()' self.connection.send('stream: Socket ERROR\n') ok = False break conn.close() os_close(f) stream.close()
def li_write(args): return os_write(args[0].val, args[1].val)
self.connection.send('stream: ERROR timeout\n') ok = False break if r: try: d = conn.recv(4096) if not d: break bytes = bytes + len(d) if bytes > self.server.config['StreamMaxLength']: print 'ScanStream: StreamMaxLength reached (max: %s)' % self.server.config[ 'StreamMaxLength'] self.connection.send( 'stream: ERROR StreamMaxLength reached\n') ok = False break os_write(f, d) start = now except Exception, error: print 'Error Recv', error self.connection.send('stream: ERROR %s\n' % error) ok = False break if e: print 'Error select()' self.connection.send('stream: Socket ERROR\n') ok = False break conn.close() os_close(f) stream.close()
class UploadResource(resource.Resource): default_uploaddir = "/tmp/" restricted_paths = frozenset( ("/bin/", "/boot/", "/dev/", "/etc/", "/lib/", "/proc/", "/sbin/", "/sys/", "/usr/", "/var/")) def out_POST(self, req, state, statetext, isXml): req.setResponseCode(http.OK) if isXml: req.setHeader('Content-type', 'application/xhtml+xml;') req.setHeader('charset', 'UTF-8') return """<?xml version="1.0" encoding="UTF-8" ?> <e2simplexmlresult> <e2state>%s</e2state> <e2statetext>%s</e2statetext> </e2simplexmlresult>""" % ('True' if state else 'False', statetext) else: req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return statetext def render_POST(self, req): isXml = 'xml' in req.args and req.args['xml'][0] == 'True' uploaddir = self.default_uploaddir if req.args['path'][0]: if os_path.isdir(req.args['path'][0]): uploaddir = req.args['path'][0] if uploaddir[-1] != "/": uploaddir += "/" else: return self.out_POST( req, False, "path '%s' to upload not existing!" % req.args['path'][0], isXml) data = req.args['file'][0] if not data: return self.out_POST(req, False, "filesize was 0, not uploaded", isXml) # allw to overwrite files (if the user requests it), but not in critical directories overwrite = 'overwrite' in req.args and req.args['overwrite'][ 0] == 'True' if overwrite and uploaddir in self.restricted_paths: overwrite = False try: matches = search('.*?filename="(.*?)"\r\n.*?', req.content.getvalue()) fn = os_path.join(uploaddir, matches.group(1)) except Exception, e: fn = None # NOTE: we only accept the given filename if no such file exists yet or the user requested it AND we think its safe if fn and (overwrite or not os_path.exists(fn)): fd = os_open(fn, O_WRONLY | O_CREAT) else: fd, fn = mkstemp(dir=uploaddir) cnt = os_write(fd, data) os_close(fd) os_chmod(fn, 0755) if cnt <= 0: # well, actually we should check against len(data) but lets assume we fail big time or not at all try: os_unlink(fn) except OSError, oe: pass return self.out_POST(req, False, "error writing to disk, not uploaded", isXml)
def render_POST(self, req): uploaddir = self.default_uploaddir print("[UploadTextResource] req.args ", req.args) if req.args['path'][0]: if os_path.isdir(req.args['path'][0]): uploaddir = req.args['path'][0] if uploaddir[-1] != "/": uploaddir += "/" else: print("[UploadTextResource] not a dir", req.args['path'][0]) req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "path '%s' to upload not existing!" % req.args['path'][0] if uploaddir[: 10] == "/etc/opkg/" or uploaddir[: 12] == "/usr/script/": pass else: req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "illegal upload directory: " + req.args['path'][0] data = req.args['text'][0].replace('\r\n', '\n') if not data: req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "filesize was 0, not uploaded" else: print("[UploadTextResource] text:", data) filename = req.args['filename'][0] fd, fn = mkstemp(dir=uploaddir) cnt = os_write(fd, data) os_close(fd) os_chmod(fn, 0755) if cnt <= 0: # well, actually we should check against len(data) but lets assume we fail big time or not at all try: os_unlink(fn) except OSError as oe: pass req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "error writing to disk, not uploaded" else: file = uploaddir + filename os_rename(fn, file) return """ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta content="text/html; charset=UTF-8" http-equiv="content-type"> <link href="/web-data/tpl/default/style.min.css" type="text/css" rel="stylesheet"> <link rel="shortcut icon" type="image/x-icon" href="/web-data/img/favicon.ico"> </head> <body onunload="javascript:opener.location.reload()" > <hr> <p align="left"> uploaded to %s </p> <hr> <form> <input type="button" value="%s" onClick="window.close();"> </form> </body> </html>""" % (file, _("Close"))