From The Compiler, 6 Years ago, written in Python.
Embed
  1. #!/usr/bin/python3
  2. # dwb: Control x
  3.  
  4. import hashlib
  5. import base64
  6. import re
  7. import subprocess
  8. import os
  9. import sys
  10.  
  11.  
  12. config = {
  13.         'verify': {
  14.         'hash': "",
  15.         'salt': "",
  16.     },
  17.         'generate': {
  18.                 'length': 20,
  19.                 'salt':   "",
  20.                 'strip_subdomains': True,
  21.         },
  22. }
  23.  
  24. def b64_md5(string):
  25.         md5 = hashlib.md5(string.encode('UTF-8')).digest()
  26.  
  27.         altchars = '98'.encode('ASCII')
  28.         b64 = base64.b64encode(md5, altchars)
  29.         b64 = b64.decode('ASCII').replace('=', 'A')
  30.  
  31.         return(b64)
  32.  
  33. def sgp_gen(pwd, length):
  34.         if not (4 <= length <= 24):
  35.                 raise ValueError("length needs to be between 4 and 24!")
  36.         for i in range(10):
  37.                 pwd = b64_md5(pwd)
  38.        
  39.         while not re.match('^[a-z].*[A-Z0-9].*', pwd[:length]):
  40.                 pwd = b64_md5(pwd)
  41.  
  42.         return(pwd[:length])
  43.        
  44. def sgp(url, password):
  45.         length = config['generate']['length']
  46.         salt = config['generate']['salt']
  47.         domain = url_to_domain(url)
  48.         pwd = password + salt + ':' + domain
  49.         pwd = sgp_gen(pwd, length)
  50.         return(pwd)
  51.  
  52. def url_to_domain(domain):
  53.         tldlist = [
  54.         '2000.hu', 'ab.ca', 'ac.ae', 'ac.ac', 'ac.at', 'ac.be', 'ac.cn',
  55.         'ac.cr', 'ac.cy', 'ac.fj', 'ac.fk', 'ac.gg', 'ac.id', 'ac.il', 'ac.im',
  56.         'ac.in', 'ac.ir', 'ac.je', 'ac.jp', 'ac.kr', 'ac.ma', 'ac.ng', 'ac.nz',
  57.         'ac.om', 'ac.pa', 'ac.pg', 'ac.th', 'ac.ug', 'ac.uk', 'ac.vn', 'ac.yu',
  58.         'ac.za', 'ac.zw', 'ad.jp', 'adm.br', 'adv.br', 'aeroport.fr',
  59.         'aero.tt', 'agrar.hu', 'agr.br', 'agro.pl', 'ah.cn', 'aichi.jp',
  60.         'aid.pl', 'akita.jp', 'alderney.gg', 'alt.na', 'alt.za', 'am.br',
  61.         'aomori.jp', 'arq.br', 'art.br', 'art.do', 'art.dz', 'arts.co',
  62.         'arts.ro', 'arts.ve', 'asn.au', 'asn.lv', 'ass.dz', 'assedic.fr',
  63.         'asso.fr', 'asso.re', 'atm.pl', 'ato.br', 'at.tt', 'au.com', 'auto.pl',
  64.         'au.tt', 'avocat.fr', 'avoues.fr', 'barreau.fr', 'bbs.tr', 'bc.ca',
  65.         'belgie.be', 'be.tt', 'bib.ve', 'bio.br', 'biz.et', 'biz.om', 'biz.pk',
  66.         'biz.pl', 'biz.tt', 'biz.vn', 'bj.cn', 'bmd.br', 'bolt.hu',
  67.         'bourse.za', 'brand.se', 'br.com', 'casino.hu', 'ca.tt', 'cci.fr',
  68.         'chambagri.fr', 'chiba.jp', 'chirurgiens-dentistes.fr', 'ch.vu',
  69.         'cim.br', 'city.hu', 'city.za', 'cn.com', 'cng.br', 'cnt.br', 'co.ae',
  70.         'co.at', 'co.ck', 'co.cr', 'co.dk', 'co.gg', 'co.hu', 'co.id', 'co.il',
  71.         'co.im', 'co.in', 'co.ir', 'co.je', 'co.jp', 'co.kr', 'co.ma',
  72.         'com.ac', 'com.ae', 'com.ai', 'com.ar', 'com.au', 'com.az', 'com.bb',
  73.         'com.bh', 'com.bm', 'com.br', 'com.bs', 'com.cn', 'com.co', 'com.cu',
  74.         'com.cy', 'com.do', 'com.dz', 'com.ec', 'com.ee', 'com.eg', 'com.er',
  75.         'com.es', 'com.et', 'com.fj', 'com.fk', 'com.fr', 'com.ge', 'com.gr',
  76.         'com.gt', 'com.gu', 'com.hk', 'com.jo', 'com.kh', 'com.kw', 'com.la',
  77.         'com.lb', 'com.lc', 'com.lv', 'com.ly', 'com.mk', 'com.mm', 'com.mn',
  78.         'com.mo', 'com.mt', 'com.mx', 'com.my', 'com.na', 'com.nc', 'com.ng',
  79.         'com.ni', 'com.np', 'com.om', 'com.pa', 'com.pe', 'com.pg', 'com.ph',
  80.         'com.pk', 'com.pl', 'com.pt', 'com.py', 'com.qa', 'com.re', 'com.ro',
  81.         'com.ru', 'com.sa', 'com.sb', 'com.sd', 'com.sg', 'com.sh', 'com.st',
  82.         'com.sv', 'com.sy', 'com.tn', 'com.tr', 'com.tt', 'com.tw', 'com.ua',
  83.         'com.uy', 'com.ve', 'com.vn', 'com.vu', 'com.ws', 'com.ye', 'conf.au',
  84.         'conf.lv', 'consulado.st', 'co.nz', 'co.om', 'coop.br', 'coop.tt',
  85.         'co.st', 'co.th', 'co.tt', 'co.tv', 'co.ug', 'co.uk', 'co.ve', 'co.vi',
  86.         'co.yu', 'co.za', 'co.zw', 'cq.cn', 'cri.nz', 'csiro.au', 'cul.na',
  87.         'de.com', 'de.net', 'de.tt', 'de.vu', 'dk.org', 'dk.tt', 'dni.us',
  88.         'dns.be', 'e164.arpa', 'ecn.br', 'ed.cr', 'ed.jp', 'edu.ac', 'edu.ai',
  89.         'edu.ar', 'edu.au', 'edu.bh', 'edu.bm', 'edu.br', 'edu.ck', 'edu.cn',
  90.         'edu.co', 'edu.do', 'edu.dz', 'edu.ec', 'edu.eg', 'edu.er', 'edu.es',
  91.         'edu.et', 'edu.ge', 'edu.gr', 'edu.gt', 'edu.gu', 'edu.hk', 'edu.jo',
  92.         'edu.kh', 'edu.kw', 'edu.lb', 'edu.lc', 'edu.lv', 'edu.mm', 'edu.mn',
  93.         'edu.mo', 'edu.mt', 'edu.mx', 'edu.my', 'edu.na', 'edunet.tn',
  94.         'edu.ng', 'edu.ni', 'edu.np', 'edu.om', 'edu.pa', 'edu.pe', 'edu.pk',
  95.         'edu.pl', 'edu.ps', 'edu.pt', 'edu.py', 'edu.qa', 'edu.sa', 'edu.sb',
  96.         'edu.sd', 'edu.sg', 'edu.sh', 'edu.st', 'edu.sv', 'edu.tr', 'edu.tt',
  97.         'edu.tw', 'edu.ua', 'edu.uk', 'edu.uy', 'edu.ve', 'edu.vn', 'edu.vu',
  98.         'edu.ws', 'edu.ye', 'edu.yu', 'edu.za', 'ehime.jp', 'embaixada.st',
  99.         'eng.br', 'ens.tn', 'ernet.in', 'erotica.hu', 'erotika.hu', 'esp.br',
  100.         'es.tt', 'etc.br', 'eti.br', 'eu.com', 'eun.eg', 'eu.org', 'eu.tt',
  101.         'experts-comptables.fr', 'fam.pk', 'far.br', 'fax.nr', 'fed.us',
  102.         'fgov.be', 'fh.se', 'fhsk.se', 'fhv.se', 'fi.cr', 'fie.ee', 'film.hu',
  103.         'fin.ec', 'fin.tn', 'firm.co', 'firm.in', 'firm.ro', 'firm.ve',
  104.         'fm.br', 'fnd.br', 'forum.hu', 'fot.br', 'fr.tt', 'fr.vu', 'fst.br',
  105.         'fukui.jp', 'fukuoka.jp', 'fukushima.jp', 'g12.br', 'games.hu',
  106.         'gb.com', 'gb.net', 'gc.ca', 'gd.cn', 'geek.nz', 'gen.in', 'gen.nz',
  107.         'gen.tr', 'geometre-expert.fr', 'ggf.br', 'gifu.jp', 'gmina.pl',
  108.         'gob.do', 'gob.es', 'gob.gt', 'gob.mx', 'gob.ni', 'gob.pa', 'gob.pe',
  109.         'gob.pk', 'gob.sv', 'go.cr', 'go.id', 'go.jp', 'gok.pk', 'go.kr',
  110.         'gon.pk', 'gop.pk', 'gos.pk', 'go.th', 'go.ug', 'gouv.fr', 'gov.ac',
  111.         'gov.ae', 'gov.ai', 'gov.ar', 'gov.au', 'gov.bh', 'gov.bm', 'gov.br',
  112.         'gov.ck', 'gov.cn', 'gov.co', 'gov.cy', 'gov.do', 'gov.dz', 'gov.ec',
  113.         'gov.eg', 'gov.er', 'gov.et', 'gov.fj', 'gov.fk', 'gov.ge', 'gov.gg',
  114.         'gov.gr', 'gov.gu', 'gov.hk', 'gov.il', 'gov.im', 'gov.in', 'gov.ir',
  115.         'gov.je', 'gov.jo', 'gov.jp', 'gov.kh', 'gov.kw', 'gov.lb', 'gov.lc',
  116.         'gov.lv', 'gov.mm', 'gov.mn', 'gov.mo', 'gov.my', 'gov.ng', 'gov.np',
  117.         'gov.om', 'gov.pk', 'gov.ps', 'gov.pt', 'gov.qa', 'gov.ru', 'gov.sa',
  118.         'gov.sb', 'gov.sd', 'gov.sg', 'gov.sh', 'gov.st', 'gov.sy', 'gov.tn',
  119.         'govt.nz', 'gov.tr', 'gov.tt', 'gov.tw', 'gov.ua', 'gov.uk', 'gov.ve',
  120.         'gov.vn', 'gov.ws', 'gov.ye', 'gov.za', 'gov.zw', 'greta.fr', 'gr.jp',
  121.         'gs.cn', 'gsm.pl', 'gub.uy', 'guernsey.gg', 'gunma.jp', 'gv.at',
  122.         'gx.cn', 'gz.cn', 'hb.cn', 'health.vn', 'he.cn', 'hi.cn',
  123.         'hiroshima.jp', 'hk.cn', 'hl.cn', 'hn.cn', 'hokkaido.jp', 'hotel.hu',
  124.         'hu.com', 'huissier-justice.fr', 'hyogo.jp', 'ibaraki.jp', 'id.au',
  125.         'id.au', 'idf.il', 'id.fj', 'id.ir', 'id.lv', 'idv.hk', 'idv.tw',
  126.         'imb.br', 'ind.br', 'ind.er', 'ind.gg', 'ind.gt', 'ind.in', 'ind.je',
  127.         'ind.tn', 'inf.br', 'info.au', 'info.co', 'info.et', 'info.hu',
  128.         'info.pl', 'info.ro', 'info.tn', 'info.tt', 'info.ve', 'info.vn',
  129.         'ingatlan.hu', 'int.ar', 'int.co', 'intl.tn', 'int.pt', 'int.tt',
  130.         'int.ve', 'int.vn', 'ishikawa.jp', 'it.tt', 'iwate.jp', 'iwi.nz',
  131.         'jersey.je', 'jl.cn', 'jobs.tt', 'jogasz.hu', 'jor.br', 'js.cn',
  132.         'k12.ec', 'k12.il', 'k12.tr', 'kagawa.jp', 'kagoshima.jp',
  133.         'kanagawa.jp', 'kanazawa.jp', 'kawasaki.jp', 'kitakyushu.jp',
  134.         'kobe.jp', 'kochi.jp', 'komforb.se', 'kommunalforbund.se',
  135.         'komvux.se', 'konyvelo.hu', 'kumamoto.jp', 'kyonggi.kr', 'kyoto.jp',
  136.         'lakas.hu', 'lanarb.se', 'lanbib.se', 'law.za', 'lel.br', 'lg.jp',
  137.         'lkd.co.im', 'ln.cn', 'ltd.gg', 'ltd.je', 'ltd.uk', 'mail.pl',
  138.         'maori.nz', 'mat.br', 'matsuyama.jp', 'mb.ca', 'med.br', 'med.ec',
  139.         'medecin.fr', 'med.ee', 'media.hu', 'media.pl', 'med.om', 'med.sa',
  140.         'med.sd', 'me.uk', 'miasta.pl', 'mie.jp', 'mil.ac', 'mil.ar', 'mil.br',
  141.         'mil.co', 'mil.do', 'mil.ec', 'mil.er', 'mil.ge', 'mil.gt', 'mil.gu',
  142.         'mil.id', 'mil.in', 'mil.jo', 'mil.kh', 'mil.lb', 'mil.lv', 'mil.nz',
  143.         'mil.pe', 'mil.ph', 'mil.pl', 'mil.sh', 'mil.st', 'mil.tr', 'mil.uy',
  144.         'mil.ve', 'mil.ye', 'mil.za', 'miyagi.jp', 'miyazaki.jp', 'mobile.nr',
  145.         'mobil.nr', 'mobi.tt', 'mob.nr', 'mo.cn', 'mod.om', 'mod.uk',
  146.         'muni.il', 'mus.br', 'museum.mn', 'museum.om', 'museum.tt',
  147.         'nagano.jp', 'nagasaki.jp', 'nagoya.jp', 'name.et', 'name.tt',
  148.         'name.vn', 'nara.jp', 'nat.tn', 'naturbruksgymn.se', 'nb.ca', 'ne.jp',
  149.         'ne.kr', 'net.ac', 'net.ae', 'net.ar', 'net.au', 'net.az', 'e164.arpa',
  150.         'net.bh', 'net.bm', 'net.br', 'net.bs', 'net.ck', 'net.cn', 'net.cu',
  151.         'net.cy', 'net.do', 'net.dz', 'net.ec', 'net.eg', 'net.er', 'net.et',
  152.         'net.fk', 'net.ge', 'net.gg', 'net.gr', 'net.gt', 'net.gu', 'net.hk',
  153.         'net.id', 'net.il', 'net.im', 'net.in', 'net.ir', 'net.je', 'net.jo',
  154.         'net.jp', 'net.kh', 'net.kw', 'net.la', 'net.lb', 'net.lc', 'net.lv',
  155.         'net.ly', 'net.ma', 'net.mm', 'net.mo', 'net.mt', 'net.mx', 'net.my',
  156.         'net.na', 'net.nc', 'net.ng', 'net.ni', 'net.np', 'net.nz', 'net.om',
  157.         'net.pa', 'net.pe', 'net.pg', 'net.ph', 'net.pk', 'net.pl', 'net.pt',
  158.         'net.py', 'net.qa', 'net.ru', 'net.sa', 'net.sb', 'net.sd', 'net.sg',
  159.         'net.sh', 'net.st', 'net.sy', 'net.th', 'net.tn', 'net.tr', 'net.tt',
  160.         'net.tw', 'net.ua', 'net.uk', 'net.uy', 'net.ve', 'net.vi', 'net.vn',
  161.         'net.vu', 'net.ws', 'net.ye', 'net.za', 'news.hu', 'nf.ca', 'ngo.ph',
  162.         'ngo.za', 'nhs.uk', 'nic.im', 'nic.in', 'nic.tt', 'nic.uk',
  163.         'nieruchomosci.pl', 'niigata.jp', 'nl.ca', 'nm.cn', 'no.com',
  164.         'nom.br', 'nom.co', 'nome.pt', 'nom.es', 'nom.fk', 'nom.fr', 'nom.ni',
  165.         'nom.pe', 'nom.pl', 'nom.re', 'nom.ro', 'nom.ve', 'nom.za',
  166.         'notaires.fr', 'not.br', 'ns.ca', 'nt.ca', 'ntr.br', 'nt.ro', 'nu.ca',
  167.         'nx.cn', 'odo.br', 'oita.jp', 'okayama.jp', 'okinawa.jp', 'on.ca',
  168.         'or.at', 'or.cr', 'org.ac', 'org.ae', 'org.ai', 'org.ar', 'org.au',
  169.         'org.az', 'org.bb', 'org.bh', 'org.bm', 'org.br', 'org.bs', 'org.ck',
  170.         'org.cn', 'org.co', 'org.cu', 'org.cy', 'org.do', 'org.dz', 'org.ec',
  171.         'org.ee', 'org.eg', 'org.er', 'org.es', 'org.et', 'org.fj', 'org.fk',
  172.         'org.ge', 'org.gg', 'org.gr', 'org.gt', 'org.gu', 'org.hk', 'org.hu',
  173.         'org.il', 'org.im', 'org.in', 'org.ir', 'org.je', 'org.jo', 'org.jp',
  174.         'org.kh', 'org.kw', 'org.la', 'org.lb', 'org.lc', 'org.lv', 'org.ly',
  175.         'org.ma', 'org.mm', 'org.mn', 'org.mo', 'org.mt', 'org.mx', 'org.my',
  176.         'org.na', 'org.nc', 'org.ng', 'org.ni', 'org.np', 'org.nz', 'org.om',
  177.         'org.pa', 'org.pe', 'org.ph', 'org.pk', 'org.pl', 'org.pt', 'org.py',
  178.         'org.qa', 'org.ro', 'org.ru', 'org.sa', 'org.sb', 'org.sd', 'org.se',
  179.         'org.sg', 'org.sh', 'org.st', 'org.sv', 'org.sy', 'org.tn', 'org.tr',
  180.         'org.tt', 'org.tw', 'org.ua', 'org.uk', 'org.uy', 'org.ve', 'org.vi',
  181.         'org.vn', 'org.vu', 'org.ws', 'org.ye', 'org.yu', 'org.za', 'org.zw',
  182.         'or.id', 'or.jp', 'or.kr', 'or.th', 'or.ug', 'osaka.jp', 'otc.au',
  183.         'oz.au', 'parti.se', 'pc.pl', 'pe.ca', 'pe.kr', 'per.kh', 'per.sg',
  184.         'pharmacien.fr', 'plc.co.im', 'plc.uk', 'plo.ps', 'pol.dz',
  185.         'police.uk', 'port.fr', 'powiat.pl', 'ppg.br', 'pp.ru', 'pp.se',
  186.         'prd.fr', 'presse.fr', 'press.ma', 'press.se', 'pri.ee', 'principe.st',
  187.         'priv.at', 'priv.hu', 'priv.pl', 'pro.ae', 'pro.br', 'pro.om',
  188.         'pro.tt', 'pro.vn', 'psc.br', 'psi.br', 'publ.pt', 'pub.sa', 'pvt.ge',
  189.         'qc.ca', 'qc.com', 'qh.cn', 'qsl.br', 'realestate.pl', 'rec.br',
  190.         'rec.co', 'rec.ro', 'rec.ve', 'red.sv', 'reklam.hu', 're.kr', 'rel.pl',
  191.         'res.in', 'rnrt.tn', 'rns.tn', 'rnu.tn', 'ru.com', 'sa.com', 'sa.cr',
  192.         'saga.jp', 'saitama.jp', 'saotome.st', 'sapporo.jp', 'sark.gg',
  193.         'sc.cn', 'sch.ae', 'sch.gg', 'sch.ir', 'sch.je', 'sch.ng', 'school.fj',
  194.         'school.nz', 'school.za', 'sch.sa', 'sch.sd', 'sch.uk', 'sci.eg',
  195.         'se.com', 'sec.ps', 'sendai.jp', 'seoul.kr', 'se.tt', 'sex.hu',
  196.         'sex.pl', 'sh.cn', 'shiga.jp', 'shimane.jp', 'shizuoka.jp', 'shop.hu',
  197.         'shop.pl', 'sk.ca', 'sklep.pl', 'sld.do', 'sld.pa', 'slg.br', 'sn.cn',
  198.         'sos.pl', 'sport.hu', 'srv.br', 'sshn.se', 'store.co', 'store.ro',
  199.         'store.st', 'store.ve', 'suli.hu', 'sx.cn', 'szex.hu', 'szkola.pl',
  200.         'takamatsu.jp', 'targi.pl', 'tec.ve', 'telecom.na', 'telememo.au',
  201.         'tel.no', 'tel.nr', 'tj.cn', 'tlf.nr', 'tm.fr', 'tm.hu', 'tm.mt',
  202.         'tmp.br', 'tm.pl', 'tm.ro', 'tm.se', 'tm.za', 'tochigi.jp',
  203.         'tokushima.jp', 'tokyo.jp', 'tottori.jp', 'tourism.pl', 'tourism.tn',
  204.         'toyama.jp', 'tozsde.hu', 'travel.pl', 'travel.tt', 'trd.br', 'tur.br',
  205.         'turystyka.pl', 'tv.br', 'tw.cn', 'uk.com', 'uk.net', 'uk.tt',
  206.         'unam.na', 'us.com', 'us.tt', 'utazas.hu', 'utsunomiya.jp', 'uu.mt',
  207.         'uy.com', 'vet.br', 'veterinaire.fr', 'video.hu', 'wakayama.jp',
  208.         'web.co', 'web.do', 'web.pk', 'web.ve', 'web.za', 'www.ro', 'xj.cn',
  209.         'xz.cn', 'yamagata.jp', 'yamaguci.jp', 'yamanashi.jp', 'yk.ca',
  210.         'yn.cn', 'yokohama.jp', 'za.com', 'zj.cn', 'zlg.br'
  211.         ]
  212.  
  213.         protos = ['http', 'https', 'ftp', 'ftps', 'webdav', 'gopher', 'rtsp',
  214.                   'irc' , 'nntp' , 'pop', 'imap', 'smtp']
  215.  
  216.         # Remove whitspace and convert to lowercase
  217.         hostname = domain.strip().lower()
  218.        
  219.         # Remove protocol
  220.         for e in protos:
  221.                 hostname = hostname.replace(e + '://', "")
  222.        
  223.         # Remove everything after an : or /
  224.         hostname = re.match('([^/:]+)', hostname).group()
  225.  
  226.         # Split on dots (subdomains)
  227.         hostname = hostname.split('.')
  228.  
  229.         # If the domain has >3 parts and it's a common second-level domain,
  230.         # take the last three parts
  231.         if domain in tldlist and len(hostname) >= 3:
  232.                 domain = hostname[-3:]
  233.         # If it isn't a common second-level domain or has 2 parts, take
  234.         # the last two parts
  235.         elif len(hostname) >= 2:
  236.                 domain = hostname[-2:]
  237.         # If it has only one part, take it.
  238.         else:
  239.                 domain = hostname
  240.  
  241.         # Add the dots again
  242.         domain = '.'.join(domain)
  243.  
  244.         return(domain)
  245.  
  246. def minify_javascript(password):
  247. #       js = """
  248. #       document.activeElement.value = {0}
  249. #       """.format(password).strip()
  250.  
  251.         js = """
  252.         document.activeElement.value = '{0}'
  253.         """.format(password).strip()
  254.         return(js)
  255.  
  256. def sha256hash(masterpassword):
  257.         verify_hash = hashlib.sha256(masterpassword.encode('UTF-8')).hexdigest()
  258.         return(verify_hash)
  259.  
  260. def verify_masterpassword(masterpassword):
  261.         salt = config['verify']['salt']
  262.         hash_config = config['verify']['hash']
  263.         hash_given = sha256hash(salt + masterpassword)
  264.  
  265.         if hash_config == "":
  266.                 return(None)
  267.  
  268.         if hash_config == hash_given:
  269.                 return(True)
  270.         else:
  271.                 return(False)
  272.  
  273. def call_zenity(*args):
  274.         args = [ '--' + arg for arg in args ]
  275.  
  276.         try:
  277.                 out = subprocess.check_output(['zenity', '--title=superpassgen'] +
  278.                                               args)
  279.         except subprocess.CalledProcessError:
  280.                 sys.exit(0)
  281.  
  282.         out = out.decode('UTF-8').rstrip('\n')
  283.         return(out)
  284.  
  285. def output_dwb(masterpassword):
  286.         url = os.environ['DWB_URI']
  287.         password = sgp(url, masterpassword)
  288.         out = "js " + minify_javascript(password)
  289.  
  290.         if 'DWB_FIFO' in os.environ:
  291.                 print("Writing {0} to {1}".format(out, os.environ['DWB_FIFO']))
  292.                 out += '\n'
  293.                 with open(os.environ['DWB_FIFO'], 'w') as outfile:
  294.                         outfile.write(out)
  295.  
  296.         else:
  297.                 print(out)
  298.  
  299. def output_console(masterpassword):
  300.         verify_salt = base64.b64encode(os.urandom(48)).decode('UTF-8')
  301.         masterpassword = verify_salt + masterpassword
  302.         verify_hash = sha256hash(masterpassword)
  303.  
  304.         print("To turn on password verification, change the config at the top "
  305.           "of the script to the following:")
  306.         print()
  307.         print("config = {")
  308.         print("    'verify': {")
  309.         print("        'hash': " + '"' + verify_hash + '",')
  310.         print("        'salt': " + '"' + verify_salt + '",')
  311.         print("    },")
  312.         print("    ...")
  313.         print("}")
  314.  
  315. def main():
  316.         if 'DISPLAY' not in os.environ:
  317.                 raise OSError("DISPLAY is not set!")
  318.  
  319.         masterpassword = call_zenity('password')
  320.         verification = verify_masterpassword(masterpassword)
  321.         if verification == False:
  322.                 call_zenity('error', 'text=Wrong password!')
  323.         # Calling this from DWB
  324.         if 'DWB_URI' in os.environ:
  325.                 print("Calling output_dwb")
  326.                 output_dwb(masterpassword)
  327.         # Calling from the console
  328.         else:
  329.                 output_console(masterpassword)
  330.  
  331. if __name__ == '__main__':
  332.         main()

Replies to sgp.py rss

Title Name Language When
RE: sgp.py anonymous javascript 6 Years ago.