Merge pull request #210 from lbryio/app-startup
make app startup consistent across versions
This commit is contained in:
commit
30b1dd3ce6
3 changed files with 50 additions and 42 deletions
|
@ -5,9 +5,8 @@ import webbrowser
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from twisted.web import server, guard
|
from twisted.web import server, guard
|
||||||
from twisted.internet import defer, reactor
|
from twisted.internet import defer, reactor, error
|
||||||
from twisted.cred import portal
|
from twisted.cred import portal
|
||||||
|
|
||||||
from jsonrpc.proxy import JSONRPCProxy
|
from jsonrpc.proxy import JSONRPCProxy
|
||||||
|
|
||||||
from lbrynet.lbrynet_daemon.auth.auth import PasswordChecker, HttpPasswordRealm
|
from lbrynet.lbrynet_daemon.auth.auth import PasswordChecker, HttpPasswordRealm
|
||||||
|
@ -131,29 +130,7 @@ def start():
|
||||||
print "To quit press ctrl-c or call 'stop' via the API"
|
print "To quit press ctrl-c or call 'stop' via the API"
|
||||||
|
|
||||||
if test_internet_connection():
|
if test_internet_connection():
|
||||||
lbry = DaemonServer()
|
start_server_and_listen(args.launchui, args.useauth)
|
||||||
|
|
||||||
d = lbry.start()
|
|
||||||
if args.launchui:
|
|
||||||
d.addCallback(lambda _: webbrowser.open(settings.UI_ADDRESS))
|
|
||||||
d.addErrback(log_and_kill)
|
|
||||||
|
|
||||||
if settings.use_auth_http:
|
|
||||||
log.info("Using authenticated API")
|
|
||||||
pw_path = os.path.join(settings.data_dir, ".api_keys")
|
|
||||||
initialize_api_key_file(pw_path)
|
|
||||||
checker = PasswordChecker.load_file(pw_path)
|
|
||||||
realm = HttpPasswordRealm(lbry.root)
|
|
||||||
portal_to_realm = portal.Portal(realm, [checker, ])
|
|
||||||
factory = guard.BasicCredentialFactory('Login to lbrynet api')
|
|
||||||
_lbrynet_server = guard.HTTPAuthSessionWrapper(portal_to_realm, [factory, ])
|
|
||||||
else:
|
|
||||||
log.info("Using non-authenticated API")
|
|
||||||
_lbrynet_server = server.Site(lbry.root)
|
|
||||||
|
|
||||||
lbrynet_server = server.Site(_lbrynet_server)
|
|
||||||
lbrynet_server.requestFactory = DaemonRequest
|
|
||||||
reactor.listenTCP(settings.api_port, lbrynet_server, interface=settings.API_INTERFACE)
|
|
||||||
reactor.run()
|
reactor.run()
|
||||||
|
|
||||||
if not args.logtoconsole and not args.quiet:
|
if not args.logtoconsole and not args.quiet:
|
||||||
|
@ -170,5 +147,50 @@ def log_and_kill(failure):
|
||||||
reactor.stop()
|
reactor.stop()
|
||||||
|
|
||||||
|
|
||||||
|
def start_server_and_listen(launchui, use_auth, **kwargs):
|
||||||
|
"""The primary entry point for launching the daemon.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
launchui: set to true to open a browser window
|
||||||
|
use_auth: set to true to enable http authentication
|
||||||
|
kwargs: passed along to `DaemonServer().start()`
|
||||||
|
"""
|
||||||
|
lbry = DaemonServer()
|
||||||
|
|
||||||
|
d = lbry.start(**kwargs)
|
||||||
|
if launchui:
|
||||||
|
d.addCallback(lambda _: webbrowser.open(settings.UI_ADDRESS))
|
||||||
|
d.addErrback(log_and_kill)
|
||||||
|
|
||||||
|
site_base = get_site_base(use_auth, lbry.root)
|
||||||
|
lbrynet_server = server.Site(site_base)
|
||||||
|
lbrynet_server.requestFactory = DaemonRequest
|
||||||
|
try:
|
||||||
|
reactor.listenTCP(settings.API_PORT, lbrynet_server, interface=settings.API_INTERFACE)
|
||||||
|
except error.CannotListenError:
|
||||||
|
log.info('Daemon already running, exiting app')
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
def get_site_base(use_auth, root):
|
||||||
|
if use_auth:
|
||||||
|
log.info("Using authenticated API")
|
||||||
|
return create_auth_session(root)
|
||||||
|
else:
|
||||||
|
log.info("Using non-authenticated API")
|
||||||
|
return server.Site(root)
|
||||||
|
|
||||||
|
|
||||||
|
def create_auth_session(root):
|
||||||
|
pw_path = os.path.join(settings.data_dir, ".api_keys")
|
||||||
|
initialize_api_key_file(pw_path)
|
||||||
|
checker = PasswordChecker.load_file(pw_path)
|
||||||
|
realm = HttpPasswordRealm(root)
|
||||||
|
portal_to_realm = portal.Portal(realm, [checker, ])
|
||||||
|
factory = guard.BasicCredentialFactory('Login to lbrynet api')
|
||||||
|
_lbrynet_server = guard.HTTPAuthSessionWrapper(portal_to_realm, [factory, ])
|
||||||
|
return _lbrynet_server
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
start()
|
start()
|
||||||
|
|
|
@ -55,7 +55,6 @@ class LBRYDaemonApp(AppKit.NSApplication):
|
||||||
self.statusitem.setMenu_(self.menubarMenu)
|
self.statusitem.setMenu_(self.menubarMenu)
|
||||||
self.statusitem.setToolTip_(settings.APP_NAME)
|
self.statusitem.setToolTip_(settings.APP_NAME)
|
||||||
|
|
||||||
|
|
||||||
if test_internet_connection():
|
if test_internet_connection():
|
||||||
if platform.mac_ver()[0] >= "10.10":
|
if platform.mac_ver()[0] >= "10.10":
|
||||||
LBRYNotify("Starting LBRY")
|
LBRYNotify("Starting LBRY")
|
||||||
|
@ -64,12 +63,7 @@ class LBRYDaemonApp(AppKit.NSApplication):
|
||||||
LBRYNotify("LBRY needs an internet connection to start, try again when one is available")
|
LBRYNotify("LBRY needs an internet connection to start, try again when one is available")
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
lbry = DaemonServer()
|
DaemonControl.start_server_and_listen(launchui=True, use_auth=False)
|
||||||
d = lbry.start(use_authentication=False)
|
|
||||||
d.addCallback(lambda _: webbrowser.open(settings.UI_ADDRESS))
|
|
||||||
lbrynet_server = server.Site(lbry.root)
|
|
||||||
lbrynet_server.requestFactory = DaemonRequest
|
|
||||||
reactor.listenTCP(settings.api_port, lbrynet_server, interface=settings.API_INTERFACE)
|
|
||||||
|
|
||||||
def openui_(self, sender):
|
def openui_(self, sender):
|
||||||
webbrowser.open(settings.UI_ADDRESS)
|
webbrowser.open(settings.UI_ADDRESS)
|
||||||
|
|
|
@ -19,6 +19,7 @@ except ImportError:
|
||||||
import win32gui
|
import win32gui
|
||||||
|
|
||||||
from lbrynet.core import utils
|
from lbrynet.core import utils
|
||||||
|
from lbrynet.lbrynet_daemon import DaemonControl
|
||||||
from lbrynet.lbrynet_daemon.DaemonServer import DaemonServer
|
from lbrynet.lbrynet_daemon.DaemonServer import DaemonServer
|
||||||
from lbrynet.lbrynet_daemon.DaemonRequest import DaemonRequest
|
from lbrynet.lbrynet_daemon.DaemonRequest import DaemonRequest
|
||||||
from lbrynet.conf import settings
|
from lbrynet.conf import settings
|
||||||
|
@ -278,16 +279,7 @@ def main(lbry_name=None):
|
||||||
systray_thread.daemon = True
|
systray_thread.daemon = True
|
||||||
systray_thread.start()
|
systray_thread.start()
|
||||||
|
|
||||||
lbry = DaemonServer()
|
DaemonControl.start_server_and_listen(launchui=True, use_auth=False)
|
||||||
d = lbry.start(use_authentication=False)
|
|
||||||
d.addCallback(lambda _: LBRYURIHandler.open_address(lbry_name))
|
|
||||||
lbrynet_server = server.Site(lbry.root)
|
|
||||||
lbrynet_server.requestFactory = DaemonRequest
|
|
||||||
try:
|
|
||||||
reactor.listenTCP(settings.api_port, lbrynet_server, interface=settings.API_INTERFACE)
|
|
||||||
except error.CannotListenError:
|
|
||||||
log.info('Daemon already running, exiting app')
|
|
||||||
sys.exit(1)
|
|
||||||
reactor.run()
|
reactor.run()
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
Loading…
Reference in a new issue