Remote API is enabled.
I followed the instructions for setting up OAUTH with Confluence (following similar instructions for JIRA works).
My script returns a 404 error.
I've bypassed my proxy and hit Tomcat directly and I get the same error. I'm not sure how to proceed.
Any help appreciated.
Script below:
#!/usr/bin/env python ## You must set the next two variables below consumer_key = 'test-oauth' conf_page = '24645678' private_key = 'mykey.pem' conf_server = 'https://confluence.int.mycompany.com' ## You shouldn't have to modify below this line import base64 import oauth2 as oauth import os.path import ConfigParser class SignatureMethod_RSA_SHA1(oauth.SignatureMethod): name = 'RSA-SHA1'
def signing_base(self, request, consumer, token): if not hasattr(request, 'normalized_url') or request.normalized_url is None: raise ValueError("Base URL for request is not set.")
sig = ( oauth.escape(request.method), oauth.escape(request.normalized_url), oauth.escape(request.get_normalized_parameters()), )
key = '%s&' % oauth.escape(consumer.secret) if token: key += oauth.escape(token.secret) raw = '&'.join(sig) return key, raw
def sign(self, request, consumer, token): """Builds the base signature string.""" key, raw = self.signing_base(request, consumer, token)
if not os.path.isfile(private_key): print "Error: Private key file '" + private_key + "' not found." quit() with open(private_key, 'r') as f: data = f.read() privateKeyString = data.strip()
from tlslite.utils import keyfactory privatekey = keyfactory.parsePrivateKey(privateKeyString) signature = privatekey.hashAndSign(raw)
return base64.b64encode(signature)
rcfile = 'conf_config.txt'
def read_config(): data = {} if not os.path.isfile(rcfile): return False else: Config = ConfigParser.ConfigParser() Config.read(rcfile) data['token'] = Config.get('auth', 'oauth_token') data['secret'] = Config.get('auth', 'oauth_token_secret') return data
oauth_token = read_config()
consumer_secret = 'dont_care'
request_token_url = conf_server + '/plugins/servlet/oauth/request-token' access_token_url = conf_server + '/plugins/servlet/oauth/access-token' authorize_url = conf_server + '/plugins/servlet/oauth/authorize'
data_url = conf_server + '/rest/api/content/' + conf_page
consumer = oauth.Consumer(consumer_key, consumer_secret) if oauth_token == False: client = oauth.Client(consumer) else: accessToken = oauth.Token(oauth_token['token'], oauth_token['secret']) client = oauth.Client(consumer, accessToken) client.set_signature_method(SignatureMethod_RSA_SHA1())
resp, content = client.request(data_url, "GET") if resp['status'] != '200': raise Exception('Something went wrong: ' + str(resp)) else: print 'Success!' quit()
print data_url resp, content = client.request(data_url, "GET") if resp['status'] != '401': raise Exception('Something went wrong, you should have no access but do! ' + str(resp))
consumer = oauth.Consumer(consumer_key, consumer_secret) client = oauth.Client(consumer) client.set_signature_method(SignatureMethod_RSA_SHA1())
resp, content = client.request(request_token_url, "POST") if resp['status'] != '200': raise Exception("Invalid response %s: %s" % (resp['status'], content))
import urlparse request_token = dict(urlparse.parse_qsl(content))
print "Request Token:" print " - oauth_token = %s" % request_token['oauth_token'] print " - oauth_token_secret = %s" % request_token['oauth_token_secret'] print
print "Go to the following link in your browser:" print "%s?oauth_token=%s" % (authorize_url, request_token['oauth_token']) print
accepted = 'n' while accepted.lower() == 'n': accepted = raw_input('Have you authorized me? (y/n) ')
token = oauth.Token(request_token['oauth_token'], request_token['oauth_token_secret']) client = oauth.Client(consumer, token) client.set_signature_method(SignatureMethod_RSA_SHA1())
resp, content = client.request(access_token_url, "POST") access_token = dict(urlparse.parse_qsl(content))
print "Access Token:" print " - oauth_token = %s" % access_token['oauth_token'] print " - oauth_token_secret = %s" % access_token['oauth_token_secret'] print print "You may now access protected resources using the access tokens above." print
outf = open(rcfile, 'w') outf.write("[auth]\n") outf.write("oauth_token=" + access_token['oauth_token'] + "\n") outf.write("oauth_token_secret=" + access_token['oauth_token_secret'] + "\n") outf.close() print "Access Token information saved to " + rcfile
accessToken = oauth.Token(access_token['oauth_token'], access_token['oauth_token_secret']) client = oauth.Client(consumer, accessToken) client.set_signature_method(SignatureMethod_RSA_SHA1())
resp, content = client.request(data_url, "GET") if resp['status'] != '200': raise Exception("Something went wrong; you should have access, but dont! " + str(resp))
Hi!
Have you added Oauth token?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.