# Path: core/exceptions.py
# class MethodUnsupported(Exception):
#     """Exception thrown when an HTTP request method isn't supported by the REST
#        API"""
#     pass
# 
# class NonAjaxRequest(Exception):
#     """Exception thrown when an API call is made that is not an AJAX request
#        and we don't want to allow this kind of (potentially) cross-site 
#        call
#     
#     """
#     pass
# 
# Path: users/exceptions.py
# class BadUsernameOrPassword(Exception):
#    def __init__(self, msg='Bad username or password.'):
#        self.msg = msg 
# 
#    def __str__(self):
#        return self.msg
# 
# class UserAccountDisabled(Exception):
#    def __init__(self, msg='User account has been disabled.'):
#        self.msg = msg 
# 
#    def __str__(self):
#        return self.msg
# 
# class UserUsernameExists(Exception):
#    def __init__(self, msg='The username is taken, please try another'):
#        self.msg = msg 
# 
#    def __str__(self):
#        return self.msg
# 
# class UserEmailExists(Exception):
#    def __init__(self, msg='This email already exists, please try another'):
#        self.msg = msg 
# 
#    def __str__(self):
#        return self.msg
# 
# class NoFacebookUser(Exception):
#     def __init__(self, msg='No Facebook user detected.'):
#         self.msg = msg
#     
#     def __str__(self):
#         return self.msg


import json
import core.utils
from django.http import HttpResponseRedirect, HttpResponse
from django.shortcuts import render_to_response
from django.conf import settings
from django.template import RequestContext
from django.contrib.auth import authenticate, login, logout
from fbapi import facebook 
from core.exceptions import MethodUnsupported, NonAjaxRequest
from users.exceptions import BadUsernameOrPassword, UserAccountDisabled, \
                             UserUsernameExists, UserEmailExists, \
                             NoFacebookUser
from models import UserProfile
from models import User
from models import ActivationKeyValue
from forms import LoginForm, RegisterForm, InviteForm, ActivateUnactivatedForm
from registration.models import RegistrationProfile
                        zip=f_zip_code, phone_number=f_phone)
                    newuser.save()

                    if not f_dont_log_user_in:

                        # Create user
                        user = authenticate(username=f_username, \
                                            password=f_password)
                        login(request, user)

                    # Set our response codes and data
                    status = 201 # Created
                    data['username'] = f_username
                    data['uri'] = '/api/%s/users/%s/' % (output_format, \
                        f_username)

                else:
                    # Form didn't validate

                    # HACK ALERT: Conflicting usernames/emails 
                    # are checked in the validation code of user.forms.RegisterForm
                    # We'll detect this and try to return a more reasonable 
                    # error message.
                    if 'username' in form.errors.keys():
                        if form.errors['username'] == \
                           [form.USERNAME_EXISTS_MSG]:
                            raise UserUsernameExists(form.USERNAME_EXISTS_MSG) 

                    if 'email' in form.errors.keys():
                        if form.errors['email'] == [form.EMAIL_EXISTS_MSG]:

# Path: core/exceptions.py
# class MethodUnsupported(Exception):
#     """Exception thrown when an HTTP request method isn't supported by the REST
#        API"""
#     pass
# 
# class NonAjaxRequest(Exception):
#     """Exception thrown when an API call is made that is not an AJAX request
#        and we don't want to allow this kind of (potentially) cross-site 
#        call
#     
#     """
#     pass
# 
# Path: users/exceptions.py
# class BadUsernameOrPassword(Exception):
#    def __init__(self, msg='Bad username or password.'):
#        self.msg = msg 
# 
#    def __str__(self):
#        return self.msg
# 
# class UserAccountDisabled(Exception):
#    def __init__(self, msg='User account has been disabled.'):
#        self.msg = msg 
# 
#    def __str__(self):
#        return self.msg
# 
# class UserUsernameExists(Exception):
#    def __init__(self, msg='The username is taken, please try another'):
#        self.msg = msg 
# 
#    def __str__(self):
#        return self.msg
# 
# class UserEmailExists(Exception):
#    def __init__(self, msg='This email already exists, please try another'):
#        self.msg = msg 
# 
#    def __str__(self):
#        return self.msg
# 
# class NoFacebookUser(Exception):
#     def __init__(self, msg='No Facebook user detected.'):
#         self.msg = msg
#     
#     def __str__(self):
#         return self.msg


# Path: users/views.py
import json
import core.utils
from django.http import HttpResponseRedirect, HttpResponse
from django.shortcuts import render_to_response
from django.conf import settings
from django.template import RequestContext
from django.contrib.auth import authenticate, login, logout
from fbapi import facebook 
from core.exceptions import MethodUnsupported, NonAjaxRequest
from users.exceptions import BadUsernameOrPassword, UserAccountDisabled, \
                             UserUsernameExists, UserEmailExists, \
                             NoFacebookUser
from models import UserProfile
from models import User
from models import ActivationKeyValue
from forms import LoginForm, RegisterForm, InviteForm, ActivateUnactivatedForm
from registration.models import RegistrationProfile

                        zip=f_zip_code, phone_number=f_phone)
                    newuser.save()

                    if not f_dont_log_user_in:

                        # Create user
                        user = authenticate(username=f_username, \
                                            password=f_password)
                        login(request, user)

                    # Set our response codes and data
                    status = 201 # Created
                    data['username'] = f_username
                    data['uri'] = '/api/%s/users/%s/' % (output_format, \
                        f_username)

                else:
                    # Form didn't validate

                    # HACK ALERT: Conflicting usernames/emails 
                    # are checked in the validation code of user.forms.RegisterForm
                    # We'll detect this and try to return a more reasonable 
                    # error message.
                    if 'username' in form.errors.keys():
                        if form.errors['username'] == \
                           [form.USERNAME_EXISTS_MSG]:
                            raise UserUsernameExists(form.USERNAME_EXISTS_MSG) 

                    if 'email' in form.errors.keys():
                        if form.errors['email'] == [form.EMAIL_EXISTS_MSG]:

                            raise UserEmailExists(form.EMAIL_EXISTS_MSG) 