summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schneider <asn@cryptomilk.org>2017-02-22 09:53:54 +0100
committerAndreas Schneider <asn@cryptomilk.org>2017-02-22 09:54:12 +0100
commitf1a7b08202fe20a974a6be4b3040ffa96384c489 (patch)
treefb8b42732d5b1fa0e555a08cb73a2b7c0f5036c2
parente3b53a270ba8e7b56511aaba4be8b3dea65aebe3 (diff)
downloadcpaste-f1a7b08202fe20a974a6be4b3040ffa96384c489.tar.gz
cpaste-f1a7b08202fe20a974a6be4b3040ffa96384c489.tar.xz
cpaste-f1a7b08202fe20a974a6be4b3040ffa96384c489.zip
Refactor code to use functions
-rwxr-xr-xcpaste217
1 files changed, 106 insertions, 111 deletions
diff --git a/cpaste b/cpaste
index cbbe126..bf18a42 100755
--- a/cpaste
+++ b/cpaste
@@ -123,140 +123,135 @@ def sjcl_encrypt(plaintext, passphrase):
return cipher_data
-default_lang = 'text'
+def guess_lang_formatter(paste_plaintext, paste_filename=None):
+ paste_formatter = 'plaintext'
+ # Map numpy to python because the numpy lexer gives false positives
+ # when guessing.
+ lexer_lang_map = {'numpy': 'python'}
-# Map numpy to python because the numpy lexer gives false positives
-# when guessing.
-lexer_lang_map = {'numpy': 'python'}
-
-paste_url = 'https://cpaste.org'
-paste_formatter = 'Plain Text'
-paste_burn = 0
-paste_opendicussion = 0
-
-#valid_langs = []
-#
-#try:
-# r = requests.get(paste_url + '/api/json/parameter/language')
-# valid_langs = json.loads(r.text)['result']['values']
-#except:
-# print("Unable to retrieve list of valid languages from api.")
-
-
-parser = OptionParser()
-parser.add_option("-f", "--file", dest="filename",
- help="Read from a file instead of stdin", metavar="FILE")
-parser.add_option("-p", "--password", dest="password",
- help="Create a password protected paste", metavar="PASSWORD")
-parser.add_option("-e", "--expire",
- action="store", type="string", dest="expire", default="86400",
- help="Expire the paste in X minutes (default: 1 day (1440), valid: 30, 360, 1440, 43200)", metavar="X")
-parser.add_option("-s", "--sourcecode",
- action="store_true", dest="source", default=False,
- help="Use source code highlighting")
-parser.add_option("-m", "--markdown",
- action="store_true", dest="markdown", default=False,
- help="Parse paste as markdown")
-parser.add_option("-b", "--burn",
- action="store_true", dest="burn", default=False,
- help="Burn paste after reading")
-parser.add_option("-o", "--opendiscussion",
- action="store_true", dest="opendiscussion", default=False,
- help="Allow discussion for the paste")
-
-(options, args) = parser.parse_args()
-
-if options.filename:
- f = open(options.filename)
- if not f:
- print("Oops, could not open file!")
-
- paste_data = f.read()
-else:
- paste_data = sys.stdin.read()
-
-if options.burn:
- paste_burn = 1
-
-if options.opendiscussion:
- paste_opendiscussion = 1
-
-if not paste_data:
- print("Oops, we have no data")
- sys.exit(1)
-
-lang = None
-# API expects lower case language option
-if options.source:
- paste_formatter = 'Source Code'
-elif options.markdown:
- paste_formatter = 'Markdown'
-elif guess_lang:
# If we have a filename, try guessing using the more reliable
# guess_lexer_for_filename function.
# If that fails, try the guess_lexer function on the code.
- if options.filename:
+ lang = None
+ if paste_filename:
try:
lang = guess_lexer_for_filename(options.filename,
- paste_data).name.lower()
- if lang:
- paste_formatter = 'Source Code'
+ paste_plaintext).name.lower()
except:
print("No guess by filename")
pass
- if not options.source:
+ else:
try:
- lang = guess_lexer(paste_data).name.lower()
- lang = lexer_lang_map.get(options.lang, options.lang)
+ #lang = guess_lexer(paste_plaintext).name.lower()
+ lang = guess_lexer('#!/usr/bin/python\nprint "Hello World!"').name.lower()
except:
pass
-# Use default if no language specified or guessed
-if lang != 'text only':
- paste_formatter = 'Source Code'
+ if lang:
+ if lang == 'markdown':
+ paste_formatter = 'markdown'
+ if lang != 'text only':
+ paste_formatter = 'syntaxhighlighting'
+
+ return paste_formatter
+
+def main():
+ parser = OptionParser()
+
+ parser.add_option("-f", "--file", dest="filename",
+ help="Read from a file instead of stdin", metavar="FILE")
+ parser.add_option("-p", "--password", dest="password",
+ help="Create a password protected paste", metavar="PASSWORD")
+ parser.add_option("-e", "--expire",
+ action="store", type="string", dest="expire", default="86400",
+ help="Expire the paste in X minutes (default: 1 day (1440), valid: 30, 360, 1440, 43200)", metavar="X")
+ parser.add_option("-s", "--sourcecode",
+ action="store_true", dest="source", default=False,
+ help="Use source code highlighting")
+ parser.add_option("-m", "--markdown",
+ action="store_true", dest="markdown", default=False,
+ help="Parse paste as markdown")
+ parser.add_option("-b", "--burn",
+ action="store_true", dest="burn", default=False,
+ help="Burn paste after reading")
+ parser.add_option("-o", "--opendiscussion",
+ action="store_true", dest="opendiscussion", default=False,
+ help="Allow discussion for the paste")
+
+ (options, args) = parser.parse_args()
+
+ paste_url = 'https://cpaste.org'
+ paste_formatter = 'plaintext'
+ paste_expire = 86400
+ paste_opendicussion = 0
+ paste_burn = 0
+ paste_password = None
+
+ if options.filename:
+ f = open(options.filename)
+ if not f:
+ print("Oops, could not open file!")
+
+ paste_plaintext = f.read()
+ else:
+ paste_plaintext = sys.stdin.read()
+
+ if not paste_plaintext:
+ print("Oops, we have no data")
+ sys.exit(1)
+
+ if options.burn:
+ paste_burn = 1
+
+ if options.opendiscussion:
+ paste_opendiscussion = 1
-if int(options.expire) != 86400:
- options.expire = int(options.expire) * 60
+ if options.source:
+ paste_formatter = 'syntaxhighlighting'
+ elif options.markdown:
+ paste_formatter = 'markdown'
+ elif guess_lang:
+ paste_formatter = guess_lang_formatter(paste_plaintext,
+ options.filename)
-paste_password = None
-if options.password:
- paste_password = options.password
+ if int(options.expire) != 86400:
+ paste_expire = int(options.expire) * 60
-paste_passphrase = base64.b64encode(bytes(os.urandom(32)))
+ if options.password:
+ paste_password = options.password
-cipher_data = sjcl_encrypt(paste_data, paste_passphrase)
+ paste_otp = base64.b64encode(bytes(os.urandom(32)))
-# json payload
-payload = {'data': json.dumps(cipher_data, ensure_ascii=False),
- 'expire': options.expire,
- 'formatter': paste_formatter,
- 'burnafterreading': paste_burn,
- 'opendiscussion': paste_opendicussion}
+ cipher_json = sjcl_encrypt(paste_plaintext, paste_otp)
-# http content type
-headers = {'X-Requested-With':'JSONHttpRequest'}
+ # json payload
+ payload = {'data': json.dumps(cipher_json, ensure_ascii=False),
+ 'expire': paste_expire,
+ 'formatter': paste_formatter,
+ 'burnafterreading': paste_burn,
+ 'opendiscussion': paste_opendicussion}
-r = requests.post(paste_url,
- data=payload,
- headers=headers)
+ # http content type
+ headers = {'X-Requested-With': 'JSONHttpRequest'}
-#print('result: %s' % r.text)
-#print('')
-#print('')
+ r = requests.post(paste_url,
+ data=payload,
+ headers=headers)
-paste_status = json.loads(r.text)['status']
-if paste_status:
- paste_message = json.loads(r.text)['message']
- print("Oops, error: %s" % paste_message)
- sys.exit(1)
+ paste_status = json.loads(r.text)['status']
+ if paste_status:
+ paste_message = json.loads(r.text)['message']
+ print("Oops, error: %s" % paste_message)
+ sys.exit(1)
+ paste_id = json.loads(r.text)['id']
+ paste_deletetoken = json.loads(r.text)['deletetoken']
-# result: {"status":0,"id":"fceecc2ba163a632","url":"\/?fceecc2ba163a632","deletetoken":"b64e93f516a6e89801c6b2db0b22a22a531a3c8a0f53640592af9aec6c08fc41"}
-paste_id = json.loads(r.text)['id']
-paste_deletetoken = json.loads(r.text)['deletetoken']
+ print('Delete paste: %s/?pasteid=%s&deletetoken=%s' % (paste_url, paste_id, paste_deletetoken))
+ print('')
+ print('### Paste (%s): %s/?%s#%s' % (paste_formatter, paste_url, paste_id, paste_otp.decode('utf-8')))
-print('Delete paste: %s/?pasteid=%s&deletetoken=%s' % (paste_url, paste_id, paste_deletetoken))
-print('')
-print('### Paste (%s): %s/?%s#%s' % (paste_formatter, paste_url, paste_id, paste_passphrase.decode('utf-8')))
+ sys.exit(0)
-sys.exit(0)
+if __name__ == "__main__":
+ main()