forked from LBRYCommunity/lbry-sdk
39 lines
1.4 KiB
Python
39 lines
1.4 KiB
Python
|
import logging
|
||
|
import os
|
||
|
|
||
|
from twisted.web import server, guard, resource
|
||
|
from twisted.cred import portal
|
||
|
|
||
|
from lbrynet import conf
|
||
|
from .auth import PasswordChecker, HttpPasswordRealm
|
||
|
from .util import initialize_api_key_file
|
||
|
|
||
|
log = logging.getLogger(__name__)
|
||
|
|
||
|
|
||
|
class AuthJSONRPCResource(resource.Resource):
|
||
|
def __init__(self, protocol):
|
||
|
resource.Resource.__init__(self)
|
||
|
self.putChild("", protocol)
|
||
|
self.putChild(conf.settings['API_ADDRESS'], protocol)
|
||
|
|
||
|
def getChild(self, name, request):
|
||
|
request.setHeader('cache-control', 'no-cache, no-store, must-revalidate')
|
||
|
request.setHeader('expires', '0')
|
||
|
return self if name == '' else resource.Resource.getChild(self, name, request)
|
||
|
|
||
|
def getServerFactory(self):
|
||
|
if conf.settings['use_auth_http']:
|
||
|
log.info("Using authenticated API")
|
||
|
pw_path = os.path.join(conf.settings['data_dir'], ".api_keys")
|
||
|
initialize_api_key_file(pw_path)
|
||
|
checker = PasswordChecker.load_file(pw_path)
|
||
|
realm = HttpPasswordRealm(self)
|
||
|
portal_to_realm = portal.Portal(realm, [checker, ])
|
||
|
factory = guard.BasicCredentialFactory('Login to lbrynet api')
|
||
|
root = guard.HTTPAuthSessionWrapper(portal_to_realm, [factory, ])
|
||
|
else:
|
||
|
log.info("Using non-authenticated API")
|
||
|
root = self
|
||
|
return server.Site(root)
|