Exemple #1
0
def app_register (request):
  login = get_login(request)

  if request.method == "POST":
    try:
      user = User.objects.get(username=login)
      app_id = request.POST["app-id"].lower()
      app_name = request.POST["app-name"]
      app_token = str(uuid.uuid4())
      app = App(
          app_id=app_id, app_name=app_name, user=user, app_token=app_token)
      app.save()
  
      try:
        hashed_password = hashlib.sha1(app_token).hexdigest()
        DataHubManager.create_user(
            username=app_id, password=hashed_password, create_db=False)
      except Exception, e:
        app.delete()
        raise e

      return HttpResponseRedirect('/developer/apps')
    except Exception, e:
      c = {
          'login': login,
          'errors': [str(e)]}
      c.update(csrf(request))
      return render_to_response('app-create.html', c)
Exemple #2
0
def create_user_db_and_data_folder_if_needed(sender, instance, **kwargs):
    """
    Creates a Postgres role and db and data folder to go with new Django users.

    Raises an exception if the role, database, or user data folder exists
    before this user.
    """
    username = instance.username
    hashed_password = instance.password

    # The Django user doesn't exist yet, so we can't just try to create a
    # DataHubManager connection as the user. We need to act as the db
    # superuser and check for any existing db role or database.
    db_exists = DataHubManager.database_exists(username)
    user_exists = DataHubManager.user_exists(username)
    user_data_folder_exists = DataHubManager.user_data_folder_exists(username)
    if db_exists and user_exists and user_data_folder_exists:
        # Make sure new users don't inherit orphaned roles or databases that
        # are missing a matching Django user.
        try:
            User.objects.get(username=username)
        except User.DoesNotExist:
            raise IntegrityError("Failed to create user. That name is already"
                                 " in use by an orphaned user.")
    elif not db_exists and not user_exists and not user_data_folder_exists:
        try:
            DataHubManager.create_user(
                username=username,
                password=hashed_password)
        except OperationalError:
            raise
    else:
        raise Exception("Failed to create user. That name is already"
                        " in use by either a role, database, or data folder.")
Exemple #3
0
def app_register(request):
    username = request.user.get_username()

    if request.method == "POST":
        try:
            user = User.objects.get(username=username)
            app_id = request.POST["app-id"].lower()
            app_name = request.POST["app-name"]
            app_token = str(uuid.uuid4())
            app = App(app_id=app_id,
                      app_name=app_name,
                      user=user,
                      app_token=app_token)
            app.save()

            try:
                hashed_password = hashlib.sha1(app_token).hexdigest()
                DataHubManager.create_user(username=app_id,
                                           password=hashed_password,
                                           create_db=False)
            except Exception as e:
                app.delete()
                raise e

            return HttpResponseRedirect('/developer/apps')
        except Exception as e:
            c = {'login': username, 'errors': [str(e)]}
            c.update(csrf(request))
            return render_to_response('app-create.html', c)
    else:
        c = {'login': username}
        c.update(csrf(request))
        return render_to_response('app-create.html', c)
Exemple #4
0
def account_register(username, email, password, repo_name, app_id, app_token):
    try:
        user = User.objects.get(username=username)
        raise Exception("Duplicate username (email=%s)" % (user.email))
    except User.DoesNotExist:
        pass

    try:
        user = User.objects.get(email=email)
        raise Exception("Duplicate email (username=%s)" % (user.username))
    except User.DoesNotExist:
        pass

    hashed_password = hashlib.sha1(password).hexdigest()
    user = User(username=username, email=email, password=hashed_password)
    user.save()

    try:
        DataHubManager.create_user(username=username, password=hashed_password)
        account_grant_permission(username=username,
                                 repo_name=repo_name,
                                 app_id=app_id,
                                 app_token=app_token)
    except Exception, e:
        user.delete()
        raise e
Exemple #5
0
def create_user_db_and_data_folder_if_needed(sender, instance, **kwargs):
    """
    Creates a Postgres role and db and data folder to go with new Django users.

    Raises an exception if the role, database, or user data folder exists
    before this user.
    """
    username = instance.username
    hashed_password = instance.password

    # The Django user doesn't exist yet, so we can't just try to create a
    # DataHubManager connection as the user. We need to act as the db
    # superuser and check for any existing db role or database.
    db_exists = DataHubManager.database_exists(username)
    user_exists = DataHubManager.user_exists(username)
    user_data_folder_exists = DataHubManager.user_data_folder_exists(username)
    if db_exists and user_exists and user_data_folder_exists:
        # Make sure new users don't inherit orphaned roles or databases that
        # are missing a matching Django user.
        try:
            User.objects.get(username=username)
        except User.DoesNotExist:
            raise IntegrityError("Failed to create user. That name is already"
                                 " in use by an orphaned user.")
    elif not db_exists and not user_exists and not user_data_folder_exists:
        try:
            DataHubManager.create_user(username=username,
                                       password=hashed_password)
        except OperationalError:
            raise
    else:
        raise Exception("Failed to create user. That name is already"
                        " in use by either a role, database, or data folder.")
Exemple #6
0
def account_register (username, email, password, repo_name, app_id, app_token):
  try:
    user = User.objects.get(username=username)
    raise Exception("Duplicate username (email=%s)" %(user.email))
  except User.DoesNotExist:
    pass

  try:
    user = User.objects.get(email=email)
    raise Exception("Duplicate email (username=%s)" %(user.username))
  except User.DoesNotExist:
    pass
  
  hashed_password = hashlib.sha1(password).hexdigest()
  user = User(username=username, email=email, password=hashed_password)
  user.save()

  try:
    DataHubManager.create_user(username=username, password=hashed_password)
    account_grant_permission(
        username=username,
        repo_name=repo_name,
        app_id=app_id,
        app_token=app_token)
  except Exception, e:
    user.delete()
    raise e
Exemple #7
0
def create_anonymous_user(apps, schema_editor):
    # Create anonymous user
    username = settings.ANONYMOUS_ROLE
    email = settings.ANONYMOUS_ROLE_EMAIL
    users = User.objects.filter(username=username)

    dh_user_exists = False
    if len(users) > 0:
        dh_user_exists = True
    db_exists = DataHubManager.database_exists(username)
    db_role_exists = DataHubManager.user_exists(username)
    user_data_folder_exists = DataHubManager.user_data_folder_exists(username)

    # try to create the django user. Get the password from them
    password = None
    if not dh_user_exists:
        password = User.objects.create_user(username=username,
                                            email=email,
                                            password=None).password

    # try to create the db role
    if not db_role_exists:
        DataHubManager.create_user(username=username,
                                   password=password,
                                   create_db=False)

    # delete any db that exists
    if db_exists:
        DataHubManager.remove_database(repo_base=username,
                                       revoke_collaborators=False)

    # delete any user data folder that exists
    if user_data_folder_exists:
        DataHubManager.delete_user_data_folder(username)
Exemple #8
0
def create_public_user(apps, schema_editor):
    # Create public user
    username = settings.PUBLIC_ROLE
    email = settings.PUBLIC_ROLE_EMAIL
    users = User.objects.filter(username=username)

    dh_user_exists = False
    if len(users) > 0:
        dh_user_exists = True
    db_exists = DataHubManager.database_exists(username)
    db_role_exists = DataHubManager.user_exists(username)
    user_data_folder_exists = DataHubManager.user_data_folder_exists(username)

    # try to create the django user. Get the password from them
    password = None
    if not dh_user_exists:
        password = User.objects.create_user(username=username,
                                            email=email,
                                            password=None).password

    # try to create the db role
    if not db_role_exists:
        DataHubManager.create_user(username=username,
                                   password=password,
                                   create_db=False)

    # try to create the db
    if not db_exists:
        DataHubManager.create_user_database(username=username)

    # delete any user data folder that exists
    if user_data_folder_exists:
        DataHubManager.delete_user_data_folder(username)
Exemple #9
0
    def setUp(self):
        self.client = Client(enforce_csrf_checks=False)

        # Need to mock out the authentication system here
        # So that we aren't actually testing the auth/db systems, too
        # ARC

        # create the user
        self.username = "******"
        self.password = "******"
        self.hashed_password = hashlib.sha1(self.password).hexdigest()
        DataHubManager.create_user(username=self.username,
                                   password=self.hashed_password)

        user = User(username=self.username,
                    email="*****@*****.**",
                    password=self.hashed_password)
        user.save()

        # log the user in
        login_credentials = {
            'login_id': self.username,
            'login_password': self.password
        }
        self.client.post('/account/login', login_credentials)
Exemple #10
0
def reset(request, encrypted_email):
    errors = []
    error = False
    if request.method == "POST":
        try:
            user_email = request.POST["user_email"].lower()
            password = request.POST["new_password"]
            password2 = request.POST["new_password2"]

            if password == "":
                errors.append("Empty Password.")
                error = True

            if password2 != password:
                errors.append("Password and Confirm Password don't match.")
                error = True

            if not error:
                hashed_password = hashlib.sha1(password).hexdigest()
                user = User.objects.get(email=user_email)
                try:
                    DataHubManager.create_user(username=user.username,
                                               password=hashed_password)
                except Exception, e:
                    pass

                try:
                    DataHubManager.change_password(username=user.username,
                                                   password=hashed_password)
                except Exception, e:
                    errors.append(str(e))
                    error = True

            if error:
                c = {
                    'user_email': user_email,
                    'encrypted_email': encrypted_email,
                    'errors': errors
                }
                c.update(csrf(request))
                return render_to_response('reset.html', c)

            else:
                hashed_password = hashlib.sha1(password).hexdigest()
                user = User.objects.get(email=user_email)
                user.password = hashed_password
                user.save()
                c = {
                    'msg_title':
                    'DataHub Reset Password',
                    'msg_body':
                    'Your password has been changed successfully.<br /> <br />'
                    '<a href="/account/login" class="blue bold">Click Here</a>'
                    ' to sign in.'
                }
                c.update(csrf(request))
                return render_to_response('confirmation.html', c)
Exemple #11
0
def reset (request, encrypted_email):
  errors = []
  error = False
  if request.method == "POST":
    try:
      user_email = request.POST["user_email"].lower()
      password = request.POST["new_password"]
      password2 = request.POST["new_password2"]

      if password == "":
        errors.append("Empty Password.")
        error = True

      if password2 != password:
        errors.append("Password and Confirm Password don't match.")
        error = True

      if not error:
        hashed_password = hashlib.sha1(password).hexdigest()
        user = User.objects.get(email=user_email)
        try:
          DataHubManager.create_user(username=user.username, password=hashed_password)
        except Exception, e:
          pass

        try:
          DataHubManager.change_password(username=user.username, password=hashed_password)
        except Exception, e:
          errors.append(str(e))
          error = True

      if error:
        c = {
          'user_email': user_email,
          'encrypted_email': encrypted_email,
          'errors': errors
        }
        c.update(csrf(request))
        return render_to_response('reset.html', c)

      else:
        hashed_password = hashlib.sha1(password).hexdigest()
        user = User.objects.get(email=user_email)
        user.password = hashed_password
        user.save()
        c = {
          'msg_title': 'DataHub Reset Password',
          'msg_body': 'Your password has been changed successfully.<br /> <br />'
                      '<a href="/login" class="blue bold">Click Here</a>'
                      ' to sign in.'
        } 
        c.update(csrf(request))
        return render_to_response('confirmation.html', c)
Exemple #12
0
    def setUp(self):
        self.client = Client(enforce_csrf_checks=False)

        # Need to mock out the authentication system here
        # So that we aren't actually testing the auth/db systems, too
        # ARC

        # create the user
        self.username = "******"
        self.password = "******"
        self.hashed_password = hashlib.sha1(self.password).hexdigest()
        DataHubManager.create_user(username=self.username, password=self.hashed_password)
        
        user = User(username=self.username, email="*****@*****.**", 
            password=self.hashed_password)
        user.save()
       
        # log the user in
        login_credentials = {'login_id': self.username, 
        'login_password': self.password}
        self.client.post('/account/login', login_credentials) 
Exemple #13
0
def register (request):
  redirect_url = '/'
  if('redirect_url' in request.GET.keys()):
    redirect_url = urllib.unquote_plus(request.GET['redirect_url'])

  if request.method == "POST":
    errors = []
    email = ''
    try:
      error = False
      if('redirect_url' in request.POST.keys()):
        redirect_url = urllib.unquote_plus(request.POST['redirect_url'])

      username = request.POST["username"].lower()
      email = request.POST["email"].lower()
      password = request.POST["password"]

      if(email_re.match(email.strip()) == None):
        errors.append("Invalid Email.")
        error = True
      if(not is_valid_username(username)):
        errors.append("Invalid Username.")
        error = True
      if(password == ""):
        errors.append("Empty Password.")
        error = True

      try:
        user = User.objects.get(username=username)
        errors.append("Username already taken.")
        error = True
      except User.DoesNotExist:
        pass

      if not error:
        hashed_password = hashlib.sha1(password).hexdigest()
        try:
          DataHubManager.create_user(username=username, password=hashed_password)
        except Exception, e:
          pass

        try:
          DataHubManager.change_password(username=username, password=hashed_password)
        except Exception, e:
          errors.append(str(e))
          error = True

      if(error):
        return register_form(request, redirect_url = urllib.quote_plus(redirect_url), errors = errors)

      user = User(username=username, email=email, password=hashed_password)
      user.save()

      clear_session(request)
      request.session[kEmail] = user.email
      request.session[kUsername] = user.username

      encrypted_email = encrypt_text(user.email)

      subject = "Welcome to DataHub"

      msg_body = '''
      Dear %s,

      Thanks for registering to DataHub. 

      Please click the link below to start using DataHub:

      %s://%s/verify/%s

      ''' % (
          user.email,
          'https' if request.is_secure() else 'http',
          request.get_host(),          
          encrypted_email)

      pool.apply_async(send_email, [user.email, subject, msg_body])

      return HttpResponseRedirect(redirect_url)
Exemple #14
0
def register (request):
  redirect_url = '/'
  if('redirect_url' in request.GET.keys()):
    redirect_url = urllib.unquote_plus(request.GET['redirect_url'])

  if request.method == "POST":
    errors = []
    email = ''
    try:
      error = False
      if('redirect_url' in request.POST.keys()):
        redirect_url = urllib.unquote_plus(request.POST['redirect_url'])

      username = request.POST["username"].lower()
      email = request.POST["email"].lower()
      password = request.POST["password"]

      if(email_re.match(email.strip()) == None):
        errors.append("Invalid Email.")
        error = True
      if(not is_valid_username(username)):
        errors.append("Invalid Username.")
        error = True
      if(password == ""):
        errors.append("Empty Password.")
        error = True

      try:
        user = User.objects.get(username=username)
        errors.append("Username already taken.")
        error = True
      except User.DoesNotExist:
        pass

      if not error:
        hashed_password = hashlib.sha1(password).hexdigest()
        try:
          DataHubManager.create_user(username=username, password=hashed_password)
        except Exception, e:
          pass

        try:
          DataHubManager.change_password(username=username, password=hashed_password)
        except Exception, e:
          errors.append(str(e))
          error = True

      if(error):
        return register_form(request, redirect_url = urllib.quote_plus(redirect_url), errors = errors)

      user = User(username=username, email=email, password=hashed_password)
      user.save()

      clear_session(request)
      request.session[kEmail] = user.email
      request.session[kUsername] = user.username

      encrypted_email = encrypt_text(user.email)

      subject = "Welcome to DataHub"

      msg_body = '''
      Dear %s,

      Thanks for registering to DataHub. 

      Please click the link below to start using DataHub:

      %s://%s/account/verify/%s

      ''' % (
          user.email,
          'https' if request.is_secure() else 'http',
          request.get_host(),          
          encrypted_email)

      pool.apply_async(send_email, [user.email, subject, msg_body])

      return HttpResponseRedirect(redirect_url)