Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import splunk
- import splunk.entity as en
- import splunk.auth
- import splunk.admin
- import csv
- import requests
- import logging
- import xml.dom.minidom, xml.sax.saxutils
- import xml.etree.ElementTree as ET
- import os, sys, json, time
- from datetime import datetime
- ################################
- # Setup logging
- logging.root
- logging.root.setLevel(logging.DEBUG)
- formatter = logging.Formatter('%(levelname)s myapp=1,%(message)s')
- handler = logging.StreamHandler(stream=sys.stderr)
- handler.setFormatter(formatter)
- logging.root.addHandler(handler)
- # Turn down requests from spamming Splunkd logs
- logging.getLogger("requests").setLevel(logging.WARNING)
- ################################
- class myappApiSettingsEndpoint(splunk.admin.MConfigHandler):
- def setup(self):
- logging.info("type=setup,starting")
- if self.requestedAction == splunk.admin.ACTION_EDIT:
- for arg in [
- 'proxy_address',
- 'proxy_username',
- 'proxy_password'
- ]:
- self.supportedArgs.addOptArg(arg)
- def handleList(self, confInfo):
- # logging.info("type=handleList,starting")
- try:
- # Read Contents of myapp_traffic.conf
- confDict = self.readConf("myapp_traffic")
- if confDict:
- for stanza, settings in confDict.items():
- for key, val in settings.items():
- # Do not retrieve and display password
- if key == "proxy_password":
- val = ""
- confInfo[stanza].append(key, val)
- except:
- logging.error("type=handleList,Failed to load from myapp_traffic.conf")
- def handleEdit(self, confInfo):
- logging.info("type=handleEdit,starting")
- name = self.callerArgs.id
- args = self.callerArgs
- try:
- # Write changes to myapp_traffic.conf
- # Ensure no null values are sent.
- for arg in args :
- # logging.error(arg)
- if args[arg][0] == None:
- args[arg][0] = ""
- # Check if this is the password field
- if arg == "proxy_password":
- # Write to password store if it is not blank
- if not (args["proxy_password"][0] == "" or args["proxy_password"][0] == None) :
- # http://docs.splunk.com/Documentation/Splunk/6.5.1/RESTREF/RESTaccess#storage.2Fpasswords
- # Check if password exists
- url = splunk.getLocalServerInfo()+'/servicesNS/nobody/myapp_traffic/storage/passwords/myapp_traffic%3A' + args["proxy_username"][0] + '%3A?output_mode=json'
- r = requests.get(url=url,
- headers={'Authorization': 'Splunk ' + self.getSessionKey()},
- verify=False)
- logging.info("type=handleEdit,message=password storage query status %d" % r.status_code)
- if r.status_code == 200:
- # Update in password store via REST interface
- url = splunk.getLocalServerInfo()+'/servicesNS/nobody/myapp_traffic/storage/passwords/myapp_traffic%3A' + args["proxy_username"][0] + '%3A?output_mode=json'
- r = requests.post(url=url,
- data={'password': args["proxy_password"][0]},
- headers={'Authorization': 'Splunk ' + self.getSessionKey()},
- verify=False)
- logging.info("type=handleEdit,message=password update status %d" % r.status_code)
- else:
- # Create in password store via REST interface (Will have no effect if the user exists)
- url = splunk.getLocalServerInfo()+'/servicesNS/nobody/myapp_traffic/storage/passwords?output_mode=json'
- r = requests.post(url=url,
- data={'name': args["proxy_username"][0], 'password': args["proxy_password"][0], 'realm': "myapp_traffic"},
- headers={'Authorization': 'Splunk ' + self.getSessionKey()},
- verify=False)
- logging.info("type=handleEdit,message=password create status %d" % r.status_code)
- # Clear out password field so it doesn't get saved in .conf
- args["proxy_password"][0] = ""
- # Write out data to conf file (If on a cluster this might need to talk directly to the REST endpoint instead http://docs.splunk.com/Documentation/Splunk/6.5.1/RESTREF/RESTconf)
- logging.info("type=handleEdit,message=Writing conf file")
- self.writeConf('myapp_traffic', 'myapp_traffic_proxy', self.callerArgs.data)
- logging.info("type=handleEdit,message=Wrote conf file")
- except:
- logging.error("type=handleEdit,Failed to load from myapp_traffic.conf")
- try:
- splunk.admin.init(myappApiSettingsEndpoint, splunk.admin.CONTEXT_APP_AND_USER)
- except Exception, e:
- logging.error("type=baseCall,Unhandled exception reading configuring endpoint: %s" % detailed_exception())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement