moving forgot_password views back to gmg/auth and cleanup
[mediagoblin.git] / mediagoblin / plugins / basic_auth / __init__.py
index f11d255a3e101effd8be8425a8eec2ef22ffc8d7..2fe161cbf91c3683159400ae97f671e7d37d331e 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 os
 import uuid
 
-import forms as auth_forms
-import tools as auth_tools
+from mediagoblin.plugins.basic_auth import forms as auth_forms
+from mediagoblin.plugins.basic_auth import lib as auth_lib
 from mediagoblin.db.models import User
-from mediagoblin.tools.translate import pass_to_ugettext as _
 from mediagoblin.tools import pluginapi
 from sqlalchemy import or_
 
@@ -29,50 +27,37 @@ def setup_plugin():
 
 
 def check_login(user, password):
-    return auth_tools.bcrypt_check_password(password, user.pw_hash)
+    if user.pw_hash:
+        result = auth_lib.bcrypt_check_password(password, user.pw_hash)
+        if result:
+            return result
+    return None
 
 
-def get_user(login_form):
-    username = login_form.data['username']
-    user = User.query.filter(
-        or_(
-            User.username == username,
-            User.email == username,
-        )).first()
-    return user
+def get_user(form):
+    if 'username' in form.data:
+        username = form.username.data
+        user = User.query.filter(
+            or_(
+                User.username == username,
+                User.email == username,
+            )).first()
+        return user
 
 
 def create_user(registration_form):
-    user = User()
-    user.username = registration_form.data['username']
-    user.email = registration_form.data['email']
-    user.pw_hash = auth_tools.bcrypt_gen_password_hash(
-        registration_form.password.data)
-    user.verification_key = unicode(uuid.uuid4())
-    user.save()
+    user = get_user(registration_form)
+    if not user and 'password' in registration_form:
+        user = User()
+        user.username = registration_form.username.data
+        user.email = registration_form.email.data
+        user.pw_hash = auth_lib.bcrypt_gen_password_hash(
+            registration_form.password.data)
+        user.verification_key = unicode(uuid.uuid4())
+        user.save()
     return user
 
 
-def extra_validation(register_form, *args):
-    users_with_username = User.query.filter_by(
-        username=register_form.data['username']).count()
-    users_with_email = User.query.filter_by(
-        email=register_form.data['email']).count()
-
-    extra_validation_passes = True
-
-    if users_with_username:
-        register_form.username.errors.append(
-            _(u'Sorry, a user with that name already exists.'))
-        extra_validation_passes = False
-    if users_with_email:
-        register_form.email.errors.append(
-            _(u'Sorry, a user with that email address already exists.'))
-        extra_validation_passes = False
-
-    return extra_validation_passes
-
-
 def get_login_form(request):
     return auth_forms.LoginForm(request.form)
 
@@ -82,21 +67,41 @@ def get_registration_form(request):
 
 
 def gen_password_hash(raw_pass, extra_salt):
-    return auth_tools.bcrypt_gen_password_hash(raw_pass, extra_salt)
+    return auth_lib.bcrypt_gen_password_hash(raw_pass, extra_salt)
+
+
+def check_password(raw_pass, stored_hash, extra_salt):
+    return auth_lib.bcrypt_check_password(raw_pass, stored_hash, extra_salt)
 
 
 def auth():
     return True
 
 
+def append_to_global_context(context):
+    context['pass_auth'] = True
+    return context
+
+
+def add_to_form_context(context):
+    context['pass_auth_link'] = True
+    return context
+
+
 hooks = {
     'setup': setup_plugin,
-    'auth': auth,
+    'authentication': auth,
     'auth_check_login': check_login,
     'auth_get_user': get_user,
     'auth_create_user': create_user,
-    'auth_extra_validation': extra_validation,
     'auth_get_login_form': get_login_form,
     'auth_get_registration_form': get_registration_form,
     'auth_gen_password_hash': gen_password_hash,
+    'auth_check_password': check_password,
+    'auth_fake_login_attempt': auth_lib.fake_login_attempt,
+    'template_global_context': append_to_global_context,
+    ('mediagoblin.plugins.openid.register',
+    'mediagoblin/auth/register.html'): add_to_form_context,
+    ('mediagoblin.plugins.openid.login',
+     'mediagoblin/auth/login.html'): add_to_form_context,
 }