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)

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(b"", protocol)
        self.putChild(conf.settings['API_ADDRESS'].encode(), 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)

Make curl work in py3 again
Make curl work in py3 again

  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(b"", protocol)
-         self.putChild(conf.settings['API_ADDRESS'], protocol)
+         self.putChild(conf.settings['API_ADDRESS'].encode(), 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)
  
Make curl work in py3 again
## Code Before:
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)

## Instruction:
Make curl work in py3 again
## Code After:
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(b"", protocol)
        self.putChild(conf.settings['API_ADDRESS'].encode(), 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)
