from jenkinsapi.view import View
from jenkinsapi.node import Node
from jenkinsapi.exceptions import UnknownJob, NotAuthorized
-from utils.urlopener import mkurlopener
+from utils.urlopener import mkurlopener, mkopener, NoAuto302Handler
import logging
import time
import urllib2
import urllib
+import urlparse
+import cookielib
try:
import json
except ImportError:
"""
Represents a jenkins environment.
"""
- def __init__(self, baseurl, username=None, password=None, proxyhost=None, proxyport=None, proxyuser=None, proxypass=None):
+ def __init__(self, baseurl, username=None, password=None, proxyhost=None, proxyport=None, proxyuser=None, proxypass=None, formauth=False):
"""
:param baseurl: baseurl for jenkins instance including port, str
self.proxyport = proxyport
self.proxyuser = proxyuser
self.proxypass = proxypass
- JenkinsBase.__init__(self, baseurl)
+ JenkinsBase.__init__(self, baseurl, poll=not formauth)
def get_proxy_auth(self):
return self.proxyhost, self.proxyport, self.proxyuser, self.proxypass
def get_opener(self):
return mkurlopener(*self.get_auth())
+ def get_login_opener(self):
+ hdrs = []
+ if getattr(self, '_cookies', False):
+ mcj = cookielib.MozillaCookieJar()
+ for c in self._cookies:
+ mcj.set_cookie(c)
+ hdrs.append(urllib2.HTTPCookieProcessor(mcj))
+ return mkopener(*hdrs)
+
+ def login(self):
+ formdata = dict(j_username=self.username, j_password=self.password,
+ remember_me=True, form='/')
+ formdata.update(dict(json=json.dumps(formdata), Submit='log in'))
+ formdata = urllib.urlencode(formdata)
+
+ loginurl = urlparse.urljoin(self.baseurl, 'j_acegi_security_check')
+ mcj = cookielib.MozillaCookieJar()
+ cookiehandler = urllib2.HTTPCookieProcessor(mcj)
+
+ urlopen = mkopener(NoAuto302Handler, cookiehandler)
+ res = urlopen(loginurl, data=formdata)
+ self._cookies = [c for c in mcj]
+ return res.getcode() == 302
+
+ def build(self, jobname):
+ assert jobname
+ buildurl = urlparse.urljoin(self.baseurl, 'job/%s/build' % jobname)
+ urlopen = self.get_login_opener()
+ res = urlopen(buildurl)
+ return res.code == 200
+
def validate_fingerprint(self, id):
obj_fingerprint = Fingerprint(self.baseurl, id, jenkins_obj=self)
obj_fingerprint.validate()
opener = urllib2.build_opener(*handlers)
return opener.open
+def mkopener(*handlers):
+ opener = urllib2.build_opener(*handlers)
+ return opener.open
+
def get_jenkins_auth_handler(jenkinsuser, jenkinspass, jenkinsurl):
"""
Get a basic authentification handler for jenkins
proxy_auth_handler.add_password( None, proxyhost, proxyuser, proxypass )
return [proxy_handler, proxy_auth_handler]
+
+class NoAuto302Handler(urllib2.HTTPRedirectHandler):
+ def http_error_302(self, req, fp, code, msg, hdrs):
+ return fp
+