#
# 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_
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)
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,
}