From 551b27dc8538426e27c74d360d35ca4dc34581c3 Mon Sep 17 00:00:00 2001 From: Ankur Sinha (Ankur Sinha Gmail) Date: Oct 08 2019 16:26:55 +0000 Subject: WIP --- diff --git a/docs/config/config.ini b/docs/config/config.ini index 5082062..65ef11b 100644 --- a/docs/config/config.ini +++ b/docs/config/config.ini @@ -3,13 +3,12 @@ [server] # Currently supported: # stikked: https://github.com/claudehohl/Stikked -# modernpaste (no longer maintained): https://github.com/LINKIWI/modern-paste -type = "modernpaste" -# type = "stikked" +type = "stikked" +url = "https://paste.centos.org/api/create/" -# Submit URL of instance -# url = "https://paste.centos.org/api/create" -url = "https://paste.fedoraproject.org/api/paste/submit" +# modernpaste (no longer maintained): https://github.com/LINKIWI/modern-paste +# type = "modernpaste" +# url = "https://paste.fedoraproject.org/api/paste/submit" # File with list of sysinfo commands commandfile = "" diff --git a/scripts/fpaste b/scripts/fpaste index 80a9cb3..417b3be 100755 --- a/scripts/fpaste +++ b/scripts/fpaste @@ -1,128 +1,159 @@ +#!/usr/bin/python3 +from argparse import ArgumentParser, SUPPRESS +import textwrap +import logging +from fpaste import __version__ +from fpaste.utils import read_config, selectionClipboards +from fpaste.logger import get_module_logger -from optparse import OptionParser, OptionGroup, SUPPRESS_HELP -from fpaste.utils import read_config + +# Logger for these functions +lgr = get_module_logger("fpaste", logging.INFO) + + +def callback_enable_debugging(option, opt, value, parser): + """ + Change the logging level. + + :returns: TODO + + """ + global lgr + lgr.setLevel(logging.DEBUG) def main(): """Main work function.""" - validClipboardSelectionOpts = ['primary', 'secondary', 'clipboard'] + client_config = read_config() + # Define usage usage = textwrap.dedent("""\ Usage: %%prog [OPTION]... [FILE]... - send text file(s), stdin, or clipboard to the %s pastebin and return the URL. + send text file(s), stdin, or clipboard to the Fedora pastebin. Examples: %%prog file1.txt file2.txt dmesg | %%prog (prog1; prog2; prog3) | fpaste %%prog --sysinfo -d "my pass" --confirm - %%prog -t "debug output" -d "my pass" -l python foo.py""").format(FPASTE_URL) + %%prog -t "debug output" -d "my pass" -l python foo.py""") - parser = OptionParser(usage=usage, version='%prog '+VERSION) - parser.add_option( + parser = ArgumentParser(usage=usage, version='%prog '+__version__) + # Config file + parser.add_argument( + '-c', + '--config', + help="Path to config file: default /etc/fpaste/config.ini followed by ~/.config/fpaste/config.ini", + metavar="config" + ) + + args, remaining_argv = parser.parse_known_args() + # Debug + parser.add_argument( '', '--debug', - dest='debug', help=SUPPRESS_HELP, - action="store_true", + action="callback", + callback=callback_enable_debugging, default=False) - parser.add_option('', '--proxy', dest='proxy', help=SUPPRESS_HELP) + + # Proxy + parser.add_argument('', '--proxy', dest='proxy', help=SUPPRESS_HELP) # pastebin-specific options first fpasteOrg_group = OptionGroup(parser, "fpaste.org Options") - fpasteOrg_group.add_option( + fpasteOrg_group.add_argument( '-t', '--title', dest='title', help='title of paste; defaults to UNTITLED', metavar='"TITLE"') - fpasteOrg_group.add_option( + + fpasteOrg_group.add_argument( '-l', dest='lang', - help='language of content for syntax highlighting; default is "%default"; use "list" to show all ' + - str( - len(validSyntaxOpts)) + - ' supported langs', + help='language of content for syntax highlighting; default is "%default"; use "list" to show all supported langs', metavar='"LANGUAGE"') - fpasteOrg_group.add_option( + + fpasteOrg_group.add_argument( '-x', dest='expires', help='time before paste is removed; default is %default seconds for unauthenticated posts; valid options: ' + - ', '.join(validExpiresOpts), + ', '.join(client_config[]), metavar='EXPIRES') - fpasteOrg_group.add_option( + fpasteOrg_group.add_argument( '-U', '--URL', help='URL of fpaste server; default is %default', dest='url', metavar='"FPASTE URL"') - fpasteOrg_group.add_option( + fpasteOrg_group.add_argument( '-d', '--password', help='password for paste; default is %default', dest='password', metavar='"PASSWORD"') - parser.add_option_group(fpasteOrg_group) + parser.add_argument_group(fpasteOrg_group) # other options fpasteProg_group = OptionGroup(parser, "Input/Output Options") - fpasteProg_group.add_option( + fpasteProg_group.add_argument( '-i', '--clipin', dest='clipin', help='read paste text from current X clipboard selection [requires: xsel]', action="store_true", default=False) - fpasteProg_group.add_option( + fpasteProg_group.add_argument( '-o', '--clipout', dest='clipout', help='save returned paste URL to all available clipboards', action="store_true", default=False) - fpasteProg_group.add_option( + fpasteProg_group.add_argument( '', '--input-selection', dest='selection', help='specify which X clipboard to use. valid options: "primary" (default; middle-mouse-button paste), "secondary" (uncommon), or "clipboard" (ctrl-v paste)', metavar='CLIP') - fpasteProg_group.add_option( + fpasteProg_group.add_argument( '', '--fullpath', dest='fullpath', help='use pathname VS basename for file description(s)', action="store_true", default=False) - fpasteProg_group.add_option( + fpasteProg_group.add_argument( '', '--pasteself', dest='pasteself', help='paste this script itself', action="store_true", default=False) - fpasteProg_group.add_option( + fpasteProg_group.add_argument( '', '--sysinfo', dest='sysinfo', help='paste system information', action="store_true", default=False) - fpasteProg_group.add_option( + fpasteProg_group.add_argument( '', '--printonly', dest='printonly', help='print paste, but do not send', action="store_true", default=False) - fpasteProg_group.add_option( + fpasteProg_group.add_argument( '', '--confirm', dest='confirm', help='print paste, and prompt for confirmation before sending', action="store_true", default=False) - parser.add_option_group(fpasteProg_group) + parser.add_argument_group(fpasteProg_group) # Let default be anonymous. # p = subprocess.Popen('whoami', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) @@ -134,7 +165,7 @@ Examples: parser.set_defaults( lang='text', - expires='604800', + expires='86400', selection='primary', password=None, url=FPASTE_URL) @@ -157,7 +188,9 @@ Examples: if options.clipin and args: parser.error( "Sending both clipboard contents AND files is not supported. Use -i OR filename(s)") - for optk, optv, opts in [('language', options.lang, validSyntaxOpts), ('expires', options.expires, validExpiresOpts), ('clipboard selection', options.selection, validClipboardSelectionOpts)]: + for optk, optv, opts in [('language', options.lang, validSyntaxOpts), + ('expires', options.expires, validExpiresOpts), + ('clipboard selection', options.selection, selectionClipboards)]: if optv not in opts: parser.error( "'%s' is not a valid %s option.\n\tVALID OPTIONS: %s" %