Example #1
0
 def __init__(self, app):
     super().__init__(app)
     if app.config.enable_openid:
         self.openid_manager = OpenIDManager(
             app.config.openid_consumer_cache_path)
         self.openid_providers = OpenIDProviders.from_file(
             'lib/galaxy/openid/openid_conf.xml')
Example #2
0
class OpenID(BaseUIController):
    def __init__(self, app):
        super().__init__(app)
        if app.config.enable_openid:
            self.openid_manager = OpenIDManager(
                app.config.openid_consumer_cache_path)
            self.openid_providers = OpenIDProviders.from_file(
                'lib/galaxy/openid/openid_conf.xml')

    @web.expose
    def openid_auth(self, trans, **kwd):
        '''Handles user request to access an OpenID provider'''
        if not trans.app.config.enable_openid:
            return trans.show_error_message(
                "OpenID authentication is not enabled in this instance of Galaxy."
            )
        consumer = self.openid_manager.get_consumer(trans)
        openid_provider = kwd.get('openid_provider')
        if openid_provider:
            openid_provider_obj = self.openid_providers.get(openid_provider)
        else:
            return trans.show_error_message(
                "An OpenID provider was not specified.")
        if not openid_provider_obj:
            return trans.show_error_message("An OpenID provider is invalid.")
        process_url = trans.request.base.rstrip('/') + url_for(
            controller='openid',
            action='openid_process',
            openid_provider=openid_provider)
        request = None
        try:
            request = consumer.begin(openid_provider_obj.op_endpoint_url)
            if request is None:
                return trans.show_error_message(
                    "No OpenID services are available at %s." %
                    openid_provider_obj.op_endpoint_url)
        except Exception as e:
            return trans.show_error_message(
                "Failed to begin OpenID authentication: %s." % unicodify(e))
        if request is not None:
            self.openid_manager.add_sreg(
                trans,
                request,
                required=openid_provider_obj.sreg_required,
                optional=openid_provider_obj.sreg_optional)
            if request.shouldSendRedirect():
                redirect_url = request.redirectURL(trans.request.base,
                                                   process_url)
                self.openid_manager.persist_session(trans, consumer)
                return trans.response.send_redirect(redirect_url)
            else:
                form = request.htmlMarkup(trans.request.base,
                                          process_url,
                                          form_tag_attrs={
                                              'id': 'openid_message',
                                              'target': '_top'
                                          })
                self.openid_manager.persist_session(trans, consumer)
                return form
        return trans.show_error_message("OpenID request failed.")

    @web.expose
    def openid_process(self, trans, **kwd):
        '''Handle's response from OpenID Providers'''
        return_link = "Click <a href='%s'>here</a> to return." % url_for("/")
        if not trans.app.config.enable_openid:
            return trans.show_error_message(
                "OpenID authentication is not enabled in this instance of Galaxy. %s"
                % return_link)
        consumer = self.openid_manager.get_consumer(trans)
        info = consumer.complete(kwd, trans.request.url)
        openid_provider = kwd.get('openid_provider', None)
        if info.status == self.openid_manager.SUCCESS:
            openid_provider_obj = self.openid_providers.get(openid_provider)
            openid_provider_obj.post_authentication(trans, self.openid_manager,
                                                    info)
            return trans.show_message("Processed OpenID authentication. %s" %
                                      return_link)
        else:
            return trans.show_error_message(
                "Authentication via OpenID failed: {}. {}".format(
                    info.message, return_link))