add a check for authentication plugin on startup and respond according to no_auth...
authorRodney Ewing <ewing.rj@gmail.com>
Tue, 14 May 2013 23:14:19 +0000 (16:14 -0700)
committerRodney Ewing <ewing.rj@gmail.com>
Fri, 24 May 2013 23:52:48 +0000 (16:52 -0700)
mediagoblin.ini
mediagoblin/app.py
mediagoblin/auth/tools.py
mediagoblin/auth/views.py
mediagoblin/plugins/basic_auth/__init__.py
mediagoblin/templates/mediagoblin/base.html
mediagoblin/templates/mediagoblin/bits/frontpage_welcome.html
mediagoblin/templates/mediagoblin/user_pages/media.html
mediagoblin/tools/template.py

index 4906546a9cc52cf37b92ff1ca2abd6e2d2fbf845..27146845889e5da889d989460a252393db54202b 100644 (file)
@@ -33,6 +33,10 @@ allow_registration = true
 ## install other themes.
 # theme = airy
 
+# Set to true to run an instance with no authentication plugins enabled. 
+# You will not be able to login or register
+no_auth = false
+
 [storage:queuestore]
 base_dir = %(here)s/user_dev/media/queue
 
index 1984ce77da91dc2e0f065a7165a7ad347bdae090..51c597aa7960f593abcb2b8b10446a22917a417d 100644 (file)
@@ -37,6 +37,7 @@ from mediagoblin.init import (get_jinja_loader, get_staticdirector,
     setup_storage)
 from mediagoblin.tools.pluginapi import PluginManager, hook_transform
 from mediagoblin.tools.crypto import setup_crypto
+from mediagoblin.auth.tools import check_auth_enabled
 
 
 _log = logging.getLogger(__name__)
@@ -97,6 +98,9 @@ class MediaGoblinApp(object):
             PluginManager().get_template_paths()
             )
 
+        # Check if authentication plugin is enabled and respond accordingly.
+        self.auth = check_auth_enabled()
+
         # Set up storage systems
         self.public_store, self.queue_store = setup_storage()
 
index 1b30a7d9473589fbac15d67486e3bc0beed6e946..114cc7fbd85aeb6e275d651eacf45639dfc6bd3b 100644 (file)
 # You should have received a copy of the GNU Affero General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+import logging
+import sys
 import wtforms
 
+from mediagoblin import mg_globals
 from mediagoblin.tools.mail import normalize_email
 from mediagoblin.tools.translate import lazy_pass_to_ugettext as _
+from mediagoblin.tools.pluginapi import hook_handle
+
+_log = logging.getLogger(__name__)
 
 
 def normalize_user_or_email_field(allow_email=True, allow_user=True):
@@ -48,3 +54,19 @@ def normalize_user_or_email_field(allow_email=True, allow_user=True):
         if field.data is None:  # should not happen, but be cautious anyway
             raise wtforms.ValidationError(message)
     return _normalize_field
+
+
+def check_auth_enabled():
+    no_auth = mg_globals.app_config['no_auth']
+    auth_plugin = True if hook_handle('auth') is not None else False
+
+    if no_auth == 'false' and not auth_plugin:
+        print 'No authentication plugin is enabled and no_auth = false in ' \
+              'config! \n..Exiting'
+        sys.exit()
+
+    if no_auth == 'true' and not auth_plugin:
+        _log.warning('No authentication is enabled')
+        return False
+    else:
+        return True
index ec40930381c53265fca8d66f733f54469a936997..811bb157c3f0bb7f7130e8139a36f380cd252dc5 100644 (file)
@@ -44,8 +44,9 @@ def register(request):
     Note that usernames will always be lowercased. Email domains are lowercased while
     the first part remains case-sensitive.
     """
-    # Redirects to indexpage if registrations are disabled
-    if not mg_globals.app_config["allow_registration"]:
+    # Redirects to indexpage if registrations are disabled or no authentication
+    # is enabled
+    if not mg_globals.app_config["allow_registration"] or not mg_globals.app.auth:
         messages.add_message(
             request,
             messages.WARNING,
@@ -88,6 +89,14 @@ def login(request):
 
     If you provide the POST with 'next', it'll redirect to that view.
     """
+    # Redirects to index page if no authentication is enabled
+    if not mg_globals.app.auth:
+        messages.add_message(
+            request,
+            messages.WARNING,
+            _('Sorry, authentication is disabled on this instance.'))
+        return redirect(request, 'index')
+
     login_form = auth.get_login_form(request)
 
     login_failed = False
index 6500151ad47665d6749f6a5b5c12a42e64a5794b..a3539738cc7b7762693fa81bb1165af5dba8be17 100644 (file)
@@ -81,8 +81,13 @@ def get_registration_form(request):
     return auth_forms.RegistrationForm(request.form)
 
 
+def auth():
+    return True
+
+
 hooks = {
     'setup': setup_plugin,
+    'auth': auth,
     'auth_check_login': check_login,
     'auth_get_user': get_user,
     'auth_create_user': create_user,
index 5e2898f9602b7343038cec48e21f21eb46ae0e1f..d9ef34ae4c709b551aa061145eac6db7671f9872 100644 (file)
@@ -67,7 +67,7 @@
                {% trans %}Verify your email!{% endtrans %}</a>
                or <a href="{{ request.urlgen('mediagoblin.auth.logout') }}">{% trans %}log out{% endtrans %}</a>
               {% endif %}
-            {%- else %}
+            {%- elif auth %}
               <a href="{{ request.urlgen('mediagoblin.auth.login') }}?next={{
                                                 request.base_url|urlencode }}">
                 {%- trans %}Log in{% endtrans -%}
index 544ee14636c11f8f52bd4c706ee7d308ec8097fc..261536940c40a5d3c33bda5f42bd46f0f45dd37b 100644 (file)
 #}
 
 {% if request.user %}
-  <h1>{% trans %}Explore{% endtrans %}</h1>
-{% else %}
-  <h1>{% trans %}Hi there, welcome to this MediaGoblin site!{% endtrans %}</h1>
-  <img class="right_align" src="{{ request.staticdirect('/images/frontpage_image.png') }}" />
-  <p>{% trans %}This site is running <a href="http://mediagoblin.org">MediaGoblin</a>, an extraordinarily great piece of media hosting software.{% endtrans %}</p>
-  <p>{% trans %}To add your own media, place comments, and more, you can log in with your MediaGoblin account.{% endtrans %}</p>
-  {% if allow_registration %}
-    <p>{% trans %}Don't have one yet? It's easy!{% endtrans %}</p>
-    {% trans register_url=request.urlgen('mediagoblin.auth.register') -%}
-      <a class="button_action_highlight" href="{{ register_url }}">Create an account at this site</a>
-      or
-      <a class="button_action" href="http://wiki.mediagoblin.org/HackingHowto">Set up MediaGoblin on your own server</a>
-    {%- endtrans %}
+    <h1>{% trans %}Explore{% endtrans %}</h1>
+  {% else %}
+    <h1>{% trans %}Hi there, welcome to this MediaGoblin site!{% endtrans %}</h1>
+    <img class="right_align" src="{{ request.staticdirect('/images/frontpage_image.png') }}" />
+    <p>{% trans %}This site is running <a href="http://mediagoblin.org">MediaGoblin</a>, an extraordinarily great piece of media hosting software.{% endtrans %}</p>
+               {% if auth %}
+    <p>{% trans %}To add your own media, place comments, and more, you can log in with your MediaGoblin account.{% endtrans %}</p>
+    {% if allow_registration %}
+      <p>{% trans %}Don't have one yet? It's easy!{% endtrans %}</p>
+      {% trans register_url=request.urlgen('mediagoblin.auth.register') -%}
+        <a class="button_action_highlight" href="{{ register_url }}">Create an account at this site</a>
+        or
+                       {%- endtrans %}
+               {% endif %}
+               {% endif %}
+                       {% trans %}
+        <a class="button_action" href="http://wiki.mediagoblin.org/HackingHowto">Set up MediaGoblin on your own server</a>
+      {%- endtrans %}
+
+    <div class="clear"></div>
   {% endif %}
-  <div class="clear"></div>
-{% endif %}
+
index 92c01c48b6e1791b4dd048779bb115b848682565..08e9d8ea1d1ebed858e97a3a5a3c3ac62090b25b 100644 (file)
@@ -86,7 +86,7 @@
       <p>{{ media.description_html }}</p>
     {% endautoescape %}
     {% if comments %}
-      {% if app_config['allow_comments'] %}
+      {% if app_config['allow_comments'] and auth %}
         <a
           {% if not request.user %}
             href="{{ request.urlgen('mediagoblin.auth.login') }}"
index 3d651a6e0602cad26f4a9843bedd67d0933d10c3..615ce129a755a677deefa756bb34c6b324bb9e17 100644 (file)
@@ -71,6 +71,7 @@ def get_jinja_env(template_loader, locale):
     template_env.globals['app_config'] = mg_globals.app_config
     template_env.globals['global_config'] = mg_globals.global_config
     template_env.globals['version'] = _version.__version__
+    template_env.globals['auth'] = mg_globals.app.auth
 
     template_env.filters['urlencode'] = url_quote_plus