| #!/usr/bin/python |
| # Licensed to the Apache Software Foundation (ASF) under one or more |
| # contributor license agreements. See the NOTICE file distributed with |
| # this work for additional information regarding copyright ownership. |
| # The ASF licenses this file to You under the Apache License, Version 2.0 |
| # (the "License"); you may not use this file except in compliance with |
| # the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| import sys |
| import os |
| from subprocess import Popen,PIPE |
| from optparse import OptionParser |
| |
| if os.getenv('JAVA_HOME') is None: |
| print "ERROR: JAVA_HOME environment property was not defined, exit." |
| sys.exit(1) |
| else: |
| JAVA_BIN=os.path.join(os.getenv('JAVA_HOME'),'bin','java') |
| print "Using Java:" + str(JAVA_BIN) |
| |
| def main(): |
| |
| parser = OptionParser() |
| |
| parser.add_option("-l", "--libpath", dest="library_path", help="Path to folder where credential libs are present") |
| parser.add_option("-f", "--file", dest="jceks_file_path", help="Path to jceks file to use") |
| parser.add_option("-k", "--key", dest="key", help="Key to use") |
| parser.add_option("-v", "--value", dest="value", help="Value to use") |
| parser.add_option("-c", "--create", dest="create", help="Add a new alias") |
| |
| (options, args) = parser.parse_args() |
| library_path = options.library_path |
| jceks_file_path = options.jceks_file_path |
| key = options.key |
| value = options.value |
| getorcreate = 'create' if options.create else 'get' |
| call_keystore(library_path, jceks_file_path, key, value, getorcreate) |
| |
| |
| def call_keystore(libpath, filepath, aliasKey, aliasValue='', getorcreate='get'): |
| finalLibPath = libpath.replace('\\','/').replace('//','/') |
| finalFilePath = 'jceks://file/'+filepath.replace('\\','/').replace('//','/') |
| if getorcreate == 'create': |
| commandtorun = [JAVA_BIN, '-cp', finalLibPath, 'org.apache.ranger.credentialapi.buildks' ,'create', aliasKey, '-value', aliasValue, '-provider',finalFilePath] |
| p = Popen(commandtorun,stdin=PIPE, stdout=PIPE, stderr=PIPE) |
| output, error = p.communicate() |
| statuscode = p.returncode |
| if statuscode == 0: |
| print "Alias " + aliasKey + " created successfully!" |
| else : |
| print "Error creating Alias!! Error: " + str(error) |
| |
| elif getorcreate == 'get': |
| commandtorun = [JAVA_BIN, '-cp', finalLibPath, 'org.apache.ranger.credentialapi.buildks' ,'get', aliasKey, '-provider',finalFilePath] |
| p = Popen(commandtorun,stdin=PIPE, stdout=PIPE, stderr=PIPE) |
| output, error = p.communicate() |
| statuscode = p.returncode |
| if statuscode == 0: |
| print "Alias : " + aliasKey + " Value : " + str(output) |
| else : |
| print "Error getting value!! Error: " + str(error) |
| |
| else: |
| print 'Invalid Arguments!!' |
| |
| if __name__ == '__main__': |
| main() |