#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import sys
import optparse
import urlparse
import requests
from getpass import getpass
from centos import CentOSUserCert
from centos import defaults
def download_cert(username, password, topurl=None, servercacert=None, uploadcacert=None):
if not topurl:
topurl = defaults.FAS_TOPURL
if not servercacert:
servercacert = defaults.SERVER_CA_CERT_FILE
if not uploadcacert:
uploadcacert = defaults.UPLOAD_CA_CERT_FILE
splittopurl = urlparse.urlsplit(topurl)
usercertpath = os.path.join(splittopurl.path, 'user/dogencert')
params = {'user_name': username, 'password': password, 'login': 'Login'}
userspliturl = urlparse.SplitResult(splittopurl.scheme,
splittopurl.netloc,
usercertpath,
None,
None)
servercapath = os.path.join(splittopurl.path, 'centos-server-ca.cert')
servercaspliturl = urlparse.SplitResult(splittopurl.scheme,
splittopurl.netloc,
servercapath,
None,
None)
uploadcapath = os.path.join(splittopurl.path, 'centos-upload-ca.cert')
uploadcaspliturl = urlparse.SplitResult(splittopurl.scheme,
splittopurl.netloc,
uploadcapath,
None,
None)
userurl = urlparse.urlunsplit(userspliturl)
servercaurl = urlparse.urlunsplit(servercaspliturl)
uploadcaurl = urlparse.urlunsplit(uploadcaspliturl)
with open(os.path.expanduser(defaults.USER_CERT_FILE), 'w') as usercertfile:
r = requests.post(userurl, params=params, verify=False)
if r.status_code <= 400:
usercertfile.write(r.raw.read())
print os.path.expanduser(defaults.USER_CERT_FILE)
with open(os.path.expanduser(defaults.SERVER_CA_CERT_FILE), 'w') as servercacertfile:
r = requests.get(servercaurl, params=params, verify=False)
if r.status_code <= 400:
servercacertfile.write(r.raw.read())
print os.path.expanduser(defaults.SERVER_CA_CERT_FILE)
with open(os.path.expanduser(defaults.UPLOAD_CA_CERT_FILE), 'w') as uploadcacertfile:
r = requests.get(uploadcaurl, params=params, verify=False)
if r.status_code <= 400:
uploadcacertfile.write(r.raw.read())
print os.path.expanduser(defaults.UPLOAD_CA_CERT_FILE)
def main(opts):
if not opts.certfile:
certfile = defaults.USER_CERT_FILE
else:
certfile = opts.certfile
if opts.username and not opts.verifycert:
username = opts.username
else:
try:
cert = CentOSUserCert(certfile)
username = cert.CN
except IOError, e:
print "{0}: {1}".format(os.path.expanduser(certfile), e.strerror)
exit(1)
if opts.verifycert:
if not cert.valid:
print "Your certificate is not valid"
sys.exit(1)
else:
print "Your certificate is valid"
sys.exit(0)
if opts.newcert:
password = getpass('FAS Password: ')
download_cert(username, password)
if __name__ == '__main__':
parser = optparse.OptionParser(usage="%prog [OPTIONS] ")
parser.add_option('-u', '--username', action='store', dest='username',
default=False, help="FAS Username.")
parser.add_option('-n', '--new-cert', action='store_true', dest='newcert',
default=False, help="Generate a new Fedora Certificate.")
parser.add_option('-f', '--file', action='store', dest='certfile',
default=None, help="User Certificate.")
parser.add_option('-v', '--verify-cert', action='store_true', dest='verifycert',
default=False, help="Verify Certificate.")
opts, args = parser.parse_args()
main(opts)