2
from flexget.feed import Entry
3
from flexget.plugin import *
6
log = logging.getLogger('formlogin')
9
class FormLogin(object):
15
from flexget import validator
16
root = validator.factory('dict')
17
root.accept('url', key='url', required=True)
18
root.accept('text', key='username', required=True)
19
root.accept('text', key='password', required=True)
20
root.accept('text', key='userfield')
21
root.accept('text', key='passfield')
24
def on_feed_start(self, feed):
26
from mechanize import Browser
28
raise PluginError('mechanize required (python module), please install it.', log)
30
config = feed.config['form']
32
userfield = config.get('userfield', 'username')
33
passfield = config.get('passfield', 'password')
36
username = config['username']
37
password = config['password']
40
br.set_handle_robots(False)
44
# TODO: improve error handling
45
raise PluginError('Unable to post login form', log)
47
#br.set_debug_redirects(True)
48
#br.set_debug_responses(True)
49
#br.set_debug_http(True)
51
for form in br.forms():
55
loginform[userfield] = username
56
loginform[passfield] = password
59
raise PluginError('Unable to find login fields', log)
65
cookiejar = br._ua_handlers["_cookies"].cookiejar
67
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
68
urllib2.install_opener(opener)
70
def on_feed_exit(self, feed):
71
"""Feed exiting, remove cookiejar"""
72
log.debug('Removing urllib2 opener')
73
urllib2.install_opener(None)
75
# Feed aborted, unhook the cookiejar
76
on_feed_abort = on_feed_exit
78
register_plugin(FormLogin, 'form')