Exemple #1
0
def grant_app_permission(username, repo_name, app_id, app_token):
    """
    Grants SELECT, INSERT, UPDATE, and DELETE on given user's repo to app.

    Raises exceptions on empty input, if no app matches app_id, if app_token
    doesn't match, or if there are any database errors.
    """
    if not app_id:
        raise Exception("Invalid app_id")

    if not app_token:
        raise Exception("Invalid app_token")

    app = None
    try:
        app = App.objects.get(app_id=app_id)
    except App.DoesNotExist:
        raise Exception("Invalid app_id")

    if app.app_token != app_token:
        raise Exception("Invalid app_token")

    try:
        manager = DataHubManager(user=username)
        manager.create_repo(repo_name)
        manager.add_collaborator(
            repo_name,
            app_id,
            privileges=['SELECT', 'INSERT', 'UPDATE', 'DELETE'])
    except Exception as e:
        raise e
Exemple #2
0
def grant_app_permission(username, repo_name, app_id, app_token):
    """
    Grants SELECT, INSERT, UPDATE, and DELETE on given user's repo to app.

    Raises exceptions on empty input, if no app matches app_id, if app_token
    doesn't match, or if there are any database errors.
    """
    if not app_id:
        raise Exception("Invalid app_id")

    if not app_token:
        raise Exception("Invalid app_token")

    app = None
    try:
        app = App.objects.get(app_id=app_id)
    except App.DoesNotExist:
        raise Exception("Invalid app_id")

    if app.app_token != app_token:
        raise Exception("Invalid app_token")

    try:
        manager = DataHubManager(user=username)
        manager.create_repo(repo_name)
        manager.add_collaborator(
            repo_name,
            app_id,
            privileges=['SELECT', 'INSERT', 'UPDATE', 'DELETE'])
        manager.close_connection()
    except Exception as e:
        raise e
Exemple #3
0
def account_grant_permission(username, repo_name, app_id, app_token):
    if not app_id:
        raise Exception("Invalid app_id")

    if not app_token:
        raise Exception("Invalid app_token")

    app = None
    try:
        app = App.objects.get(app_id=app_id)
    except App.DoesNotExist:
        raise Exception("Invalid app_id")

    if app.app_token != app_token:
        raise Exception("Invalid app_token")

    try:
        manager = DataHubManager(user=username)
        manager.create_repo(repo_name)
        manager.add_collaborator(
            repo_name,
            app_id,
            privileges=['SELECT', 'INSERT', 'UPDATE', 'DELETE'])
    except Exception, e:
        raise e
Exemple #4
0
def create_cache(username):
    """ DBWipes stores some metadata about the table in a schema in the owner's
        database. Note that this is not necessarily the current user's DB
    """
    try:
        query = ('create table if not exists %s.dbwipes_cache'
                 '(key varchar, val text)') % dbwipes_repo
        manager = DataHubManager(user=username)
        manager.create_repo(dbwipes_repo)
        manager.execute_sql(query)
        return True
    except Exception as e:
        print(e)
        return False
Exemple #5
0
 def create_repo(self, con, repo_name):
   try:
     manager = DataHubManager(user=con.user, repo_base=con.repo_base)
     res = manager.create_repo(repo=repo_name)
     return construct_result_set(res)
   except Exception, e:
     raise DBException(message=str(e))
Exemple #6
0
 def create_repo(self, con, repo_name):
   try:
     '''
     res = DataHubManager.has_base_privilege(con.user, con.repo_base, 'CREATE')
     if not (res and res['tuples'][0][0]):
       raise Exception('Access denied. Missing required privileges.')
     '''
     manager = DataHubManager(user=con.repo_base, repo_base=con.repo_base)
     res = manager.create_repo(repo=repo_name)
     return construct_result_set(res)
   except Exception, e:
     raise DBException(message=str(e))
Exemple #7
0
def repo_create(request, repo_base):
    '''
    creates a repo (POST), or returns a page for creating repos (GET)
    '''

    username = request.user.get_username()
    if username != repo_base:
        message = ('Error: Permission Denied. '
                   '%s cannot create new repositories in %s.' %
                   (username, repo_base))
        return HttpResponseForbidden(message)

    if request.method == 'POST':
        repo = request.POST['repo']
        manager = DataHubManager(user=username, repo_base=repo_base)
        manager.create_repo(repo)
        return HttpResponseRedirect(reverse('browser-user', args=(username, )))

    elif request.method == 'GET':
        res = {'repo_base': repo_base, 'login': username}
        res.update(csrf(request))
        return render_to_response("repo-create.html", res)
Exemple #8
0
 def create_repo(self, con, repo_name):
     try:
         '''
   res = DataHubManager.has_base_privilege(con.user, con.repo_base, 'CREATE')
   if not (res and res['tuples'][0][0]):
     raise Exception('Access denied. Missing required privileges.')
   '''
         manager = DataHubManager(user=con.repo_base,
                                  repo_base=con.repo_base)
         res = manager.create_repo(repo=repo_name)
         return construct_result_set(res)
     except Exception, e:
         raise DBException(message=str(e))
Exemple #9
0
def account_grant_permission (username, repo_name, app_id, app_token):
  if not app_id:
    raise Exception("Invalid app_id")

  if not app_token:
    raise Exception("Invalid app_token")

  app = None
  try:
    app = App.objects.get(app_id=app_id)
  except App.DoesNotExist:
    raise Exception("Invalid app_id")
  
  if app.app_token != app_token:
    raise Exception("Invalid app_token")
  
  try:
    manager = DataHubManager(user=username)
    manager.create_repo(repo_name)
    manager.add_collaborator(
        repo_name, app_id, privileges=['SELECT', 'INSERT', 'UPDATE', 'DELETE'])
  except Exception, e:
    raise e
Exemple #10
0
def repo_create(request, repo_base):
    try:
        login = get_login(request)
        if request.method == "POST":
            if login != repo_base:
                raise Exception('Permission denied. '
                                '%s can\'t create new repository in %s.' %
                                (login, repo_base))

            repo = request.POST['repo']
            manager = DataHubManager(user=repo_base)
            manager.create_repo(repo)

            return HttpResponseRedirect('/browse/%s' % (repo_base))

        else:
            res = {'repo_base': repo_base, 'login': login}
            res.update(csrf(request))
            return render_to_response("repo-create.html", res)

    except Exception, e:
        return HttpResponse(json.dumps({'error': str(e)}),
                            content_type="application/json")
Exemple #11
0
def repo_create(request, repo_base):
  try:
    login = get_login(request)
    if request.method == "POST":
      if login != repo_base:
        raise Exception(
            'Permission denied. '
            '%s can\'t create new repository in %s.' %(login, repo_base))

      repo = request.POST['repo']
      manager = DataHubManager(user=repo_base)
      manager.create_repo(repo)

      return HttpResponseRedirect('/browse/%s' %(repo_base))

    else:
      res = {'repo_base': repo_base, 'login':login}
      res.update(csrf(request))
      return render_to_response("repo-create.html", res)
  
  except Exception, e:
    return HttpResponse(json.dumps(
        {'error': str(e)}),
        content_type="application/json")
Exemple #12
0
def repo_create(request, repo_base):
    '''
    creates a repo (POST), or returns a page for creating repos (GET)
    '''

    username = request.user.get_username()
    if username != repo_base:
        message = (
            'Error: Permission Denied. '
            '%s cannot create new repositories in %s.'
            % (username, repo_base)
            )
        return HttpResponseForbidden(message)

    if request.method == 'POST':
        repo = request.POST['repo']
        manager = DataHubManager(user=username, repo_base=repo_base)
        manager.create_repo(repo)
        return HttpResponseRedirect(reverse('browser-user', args=(username,)))

    elif request.method == 'GET':
        res = {'repo_base': repo_base, 'login': username}
        res.update(csrf(request))
        return render_to_response("repo-create.html", res)
Exemple #13
0
    def create_repo(self, con, repo_name):
        try:
            '''
            res = DataHubManager.has_base_privilege(
                con.user, con.repo_base, 'CREATE')
            if not (res and res['tuples'][0][0]):
              raise Exception('Access denied. Missing required privileges.')
            '''
            manager = DataHubManager(
                user=con.user, repo_base=con.repo_base, is_app=con.is_app)
            res = manager.create_repo(repo=repo_name)
            thrift_crazy_result = {'status': res, 'row_count': -1,
                                   'tuples': [], 'fields': []}

            return construct_result_set(thrift_crazy_result)
        except Exception, e:
            raise DBException(message=str(e))
Exemple #14
0
    def create_repo(self, con, repo_name):
        try:
            '''
            res = DataHubManager.has_base_privilege(
                con.user, con.repo_base, 'CREATE')
            if not (res and res['tuples'][0][0]):
              raise Exception('Access denied. Missing required privileges.')
            '''
            manager = DataHubManager(user=con.user,
                                     repo_base=con.repo_base,
                                     is_app=con.is_app)
            res = manager.create_repo(repo=repo_name)
            thrift_crazy_result = {
                'status': res,
                'row_count': -1,
                'tuples': [],
                'fields': []
            }

            return construct_result_set(thrift_crazy_result)
        except Exception as e:
            raise DBException(message=str(e))
Exemple #15
0
class BasicOperations(TestCase):
    """Tests basic operations in manager.py."""

    @factory.django.mute_signals(signals.pre_save)
    def setUp(self):
        self.username = "******"
        self.password = "******"
        self.email = "*****@*****.**"
        self.user = User.objects.create_user(
            self.username, self.email, self.password)

        self.mock_connection = self.create_patch(
            'core.db.manager.DataHubConnection')

        self.manager = DataHubManager(user=self.username)

    def create_patch(self, name):
        # helper method for creating patches
        patcher = patch(name)
        thing = patcher.start()
        self.addCleanup(patcher.stop)
        return thing

    def test_set_search_paths(self):
        con_set_spaths = self.mock_connection.return_value.set_search_paths
        search_paths = ['reponame', 'username']
        self.manager.set_search_paths(search_paths)
        self.assertTrue(con_set_spaths.called)

    def test_create_table(self):
        con_create_table = self.mock_connection.return_value.create_table
        repo = 'repo'
        table = 'table'
        params = {'id': 'integer', 'words': 'text'}
        self.manager.create_table(repo, table, params)
        self.assertTrue(con_create_table.called)

    def test_list_tables(self):
        con_list_tables = self.mock_connection.return_value.list_tables
        self.manager.list_tables('repo')

        self.assertTrue(con_list_tables.called)

    def test_describe_table(self):
        con_describe_table = self.mock_connection.return_value.describe_table
        self.manager.describe_table(repo='repo', table='table', detail=False)

        self.assertTrue(con_describe_table.called)

    def test_list_table_permissions(self):
        con_tbl_perm = self.mock_connection.return_value.list_table_permissions
        self.manager.list_table_permissions(repo='repo', table='table')

        self.assertTrue(con_tbl_perm.called)

    def test_delete_table(self):
        con_delete_table = self.mock_connection.return_value.delete_table
        self.manager.delete_table(repo='repo', table='table', force=False)
        self.assertTrue(con_delete_table.called)

    def test_list_views(self):
        con_list_views = self.mock_connection.return_value.list_views
        self.manager.list_views('repo')

        self.assertTrue(con_list_views.called)

    def test_create_view(self):
        con_create_view = self.mock_connection.return_value.create_view
        repo = 'repo_name'
        view = 'view_name'
        sql = 'SELECT * FROM table_name'
        self.manager.create_view(repo, view, sql)
        self.assertTrue(con_create_view.called)

    def test_describe_view(self):
        con_describe_view = self.mock_connection.return_value.describe_view
        self.manager.describe_view(
            repo='repo_name', view='_name', detail=False)
        self.assertTrue(con_describe_view.called)

    def test_delete_view(self):
        con_delete_view = self.mock_connection.return_value.delete_view
        self.manager.delete_view(
            repo='repo_name', view='view_name', force=False)
        self.assertTrue(con_delete_view.called)

    def test_list_repos(self):
        con_list_repos = self.mock_connection.return_value.list_repos
        self.manager.list_repos()

        self.assertTrue(con_list_repos.called)

    def test_rename_repo(self):
        con_rename_repo = self.mock_connection.return_value.rename_repo
        # self.mock_Collaborator = self.create_patch(
        #     'inventory.models.Collaborator')

        self.manager = DataHubManager(
            user=self.username, repo_base=self.username)
        self.manager.Collaborator = MagicMock

        self.manager.rename_repo('old_name', 'new_name')
        self.assertTrue(con_rename_repo.called)

    def test_create_repo(self):
        con_create_repo = self.mock_connection.return_value.create_repo
        self.manager.create_repo('repo')

        self.assertTrue(con_create_repo.called)

    def test_delete_repo(self):
        con_delete_repo = self.mock_connection.return_value.delete_repo
        self.manager = DataHubManager(
            user=self.username, repo_base=self.username)
        self.manager.delete_repo('repo')

        self.assertTrue(con_delete_repo.called)
        self.assertEqual(con_delete_repo.call_args[1]['force'], False)

    def test_add_collaborator(self):
        con_add_collab = self.mock_connection.return_value.add_collaborator
        self.create_patch('core.db.manager.User')
        mock_Collaborator = self.create_patch(
            'core.db.manager.Collaborator')
        mock_Collaborator.objects.get_or_create.return_value = (
            MagicMock(), True)

        self.manager.add_collaborator(
            repo='reponame',
            collaborator='new_collaborator',
            db_privileges=['select'], file_privileges=['read', 'write'])

        self.assertTrue(con_add_collab.called)
        self.assertEqual(con_add_collab.call_args[1]['repo'], 'reponame')
        self.assertEqual(
            con_add_collab.call_args[1]['collaborator'], 'new_collaborator')
        self.assertEqual(
            con_add_collab.call_args[1]['db_privileges'], ['SELECT'])

    def test_delete_collaborator(self):
        self.mock_connection.return_value.list_collaborators.return_value = [
            {'username': '******', 'permissions': 'U'},
            {'username': self.username, 'permissions': 'UC'}
            ]
        self.mock_User = self.create_patch('core.db.manager.User')
        self.mock_Collaborator = self.create_patch(
            'core.db.manager.Collaborator')

        con_delete_collab = (self.mock_connection
                             .return_value.delete_collaborator)
        self.manager.delete_collaborator('reponame', 'old_collaborator')

        self.assertTrue(con_delete_collab.called)
        self.assertEqual(con_delete_collab.call_args[1]['repo'], 'reponame')
        self.assertEqual(
            con_delete_collab.call_args[1]['collaborator'], 'old_collaborator')

    def test_get_schema(self):
        con_get_schema = self.mock_connection.return_value.get_schema
        self.manager.get_schema('reponame', 'tablename')

        self.assertTrue(con_get_schema.called)
        self.assertEqual(con_get_schema.call_args[1]['repo'], 'reponame')
        self.assertEqual(con_get_schema.call_args[1]['table'], 'tablename')
Exemple #16
0
class BasicOperations(TestCase):
    """Tests basic operations in manager.py."""

    @factory.django.mute_signals(signals.pre_save)
    def setUp(self):
        self.username = "******"
        self.password = "******"
        self.email = "*****@*****.**"
        self.user = User.objects.create_user(
            self.username, self.email, self.password)

        self.mock_connection = self.create_patch(
            'core.db.manager.DataHubConnection')

        self.manager = DataHubManager(user=self.username)

    def create_patch(self, name):
        # helper method for creating patches
        patcher = patch(name)
        thing = patcher.start()
        self.addCleanup(patcher.stop)
        return thing

    def test_create_table(self):
        con_create_table = self.mock_connection.return_value.create_table
        repo = 'repo'
        table = 'table'
        params = {'id': 'integer', 'words': 'text'}
        self.manager.create_table(repo, table, params)
        self.assertTrue(con_create_table.called)

    def test_list_tables(self):
        con_list_tables = self.mock_connection.return_value.list_tables
        self.manager.list_tables('repo')

        self.assertTrue(con_list_tables.called)

    def test_describe_table(self):
        con_describe_table = self.mock_connection.return_value.describe_table
        self.manager.describe_table(repo='repo', table='table', detail=False)

        self.assertTrue(con_describe_table.called)

    def test_list_table_permissions(self):
        con_tbl_perm = self.mock_connection.return_value.list_table_permissions
        self.manager.list_table_permissions(repo='repo', table='table')

        self.assertTrue(con_tbl_perm.called)

    def test_delete_table(self):
        con_delete_table = self.mock_connection.return_value.delete_table
        self.manager.delete_table(repo='repo', table='table', force=False)
        self.assertTrue(con_delete_table.called)

    def test_clone_table(self):
        con_clone_table = self.mock_connection.return_value.clone_table
        self.manager.clone_table(
            repo='repo_name', table='table_name', new_table='new_table_name')
        self.assertTrue(con_clone_table.called)

    def test_list_views(self):
        con_list_views = self.mock_connection.return_value.list_views
        self.manager.list_views('repo')

        self.assertTrue(con_list_views.called)

    def test_create_view(self):
        con_create_view = self.mock_connection.return_value.create_view
        repo = 'repo_name'
        view = 'view_name'
        sql = 'SELECT * FROM table_name'
        self.manager.create_view(repo, view, sql)
        self.assertTrue(con_create_view.called)

    def test_describe_view(self):
        con_describe_view = self.mock_connection.return_value.describe_view
        self.manager.describe_view(
            repo='repo_name', view='_name', detail=False)
        self.assertTrue(con_describe_view.called)

    def test_delete_view(self):
        con_delete_view = self.mock_connection.return_value.delete_view
        self.manager.delete_view(
            repo='repo_name', view='view_name', force=False)
        self.assertTrue(con_delete_view.called)

    def test_list_repos(self):
        con_list_repos = self.mock_connection.return_value.list_repos
        self.manager.list_repos()

        self.assertTrue(con_list_repos.called)

    def test_rename_repo(self):
        con_rename_repo = self.mock_connection.return_value.rename_repo
        # self.mock_Collaborator = self.create_patch(
        #     'inventory.models.Collaborator')

        self.manager = DataHubManager(
            user=self.username, repo_base=self.username)
        self.manager.Collaborator = MagicMock

        self.manager.rename_repo('old_name', 'new_name')
        self.assertTrue(con_rename_repo.called)

    def test_create_repo(self):
        con_create_repo = self.mock_connection.return_value.create_repo
        self.manager.create_repo('repo')

        self.assertTrue(con_create_repo.called)

    def test_delete_repo(self):
        con_delete_repo = self.mock_connection.return_value.delete_repo
        self.manager = DataHubManager(
            user=self.username, repo_base=self.username)
        self.manager.delete_repo('repo')

        self.assertTrue(con_delete_repo.called)
        self.assertEqual(con_delete_repo.call_args[1]['force'], False)

    def test_add_collaborator(self):
        con_add_collab = self.mock_connection.return_value.add_collaborator
        self.create_patch('core.db.manager.User')
        mock_Collaborator = self.create_patch(
            'core.db.manager.Collaborator')
        mock_Collaborator.objects.get_or_create.return_value = (
            MagicMock(), True)

        self.manager.add_collaborator(
            repo='reponame',
            collaborator='new_collaborator',
            db_privileges=['select'], file_privileges=['read', 'write'])

        self.assertTrue(con_add_collab.called)
        self.assertEqual(con_add_collab.call_args[1]['repo'], 'reponame')
        self.assertEqual(
            con_add_collab.call_args[1]['collaborator'], 'new_collaborator')
        self.assertEqual(
            con_add_collab.call_args[1]['db_privileges'], ['SELECT'])

    def test_delete_collaborator(self):
        self.mock_connection.return_value.list_collaborators.return_value = [
            {'username': '******', 'permissions': 'U'},
            {'username': self.username, 'permissions': 'UC'}
            ]
        self.mock_User = self.create_patch('core.db.manager.User')
        self.mock_Collaborator = self.create_patch(
            'core.db.manager.Collaborator')

        con_delete_collab = (self.mock_connection
                             .return_value.delete_collaborator)
        self.manager.delete_collaborator('reponame', 'old_collaborator')

        self.assertTrue(con_delete_collab.called)
        self.assertEqual(con_delete_collab.call_args[1]['repo'], 'reponame')
        self.assertEqual(
            con_delete_collab.call_args[1]['collaborator'], 'old_collaborator')

    def test_get_schema(self):
        con_get_schema = self.mock_connection.return_value.get_schema
        self.manager.get_schema('reponame', 'tablename')

        self.assertTrue(con_get_schema.called)
        self.assertEqual(con_get_schema.call_args[1]['repo'], 'reponame')
        self.assertEqual(con_get_schema.call_args[1]['table'], 'tablename')
class BasicOperations(TestCase):

    """Tests basic operations in manager.py."""

    @factory.django.mute_signals(signals.pre_save)
    def setUp(self):
        self.username = "******"
        self.password = "******"
        self.email = "*****@*****.**"
        self.user = User.objects.create_user(
            self.username, self.email, self.password)

        self.mock_connection = self.create_patch(
            'core.db.manager.DataHubConnection')

        self.manager = DataHubManager(user=self.username)

    def create_patch(self, name):
        # helper method for creating patches
        patcher = patch(name)
        thing = patcher.start()
        self.addCleanup(patcher.stop)
        return thing

    def test_list_tables(self):
        con_list_tables = self.mock_connection.return_value.list_tables
        self.manager.list_tables('repo')

        self.assertTrue(con_list_tables.called)

    def test_list_views(self):
        con_list_views = self.mock_connection.return_value.list_views
        self.manager.list_views('repo')

        self.assertTrue(con_list_views.called)

    def test_list_repos(self):
        con_list_repos = self.mock_connection.return_value.list_repos
        self.manager.list_repos()

        self.assertTrue(con_list_repos.called)

    def test_create_repo(self):
        con_create_repo = self.mock_connection.return_value.create_repo
        self.manager.create_repo('repo')

        self.assertTrue(con_create_repo.called)

    def test_delete_repo(self):
        con_delete_repo = self.mock_connection.return_value.delete_repo
        self.manager = DataHubManager(
            user=self.username, repo_base=self.username)
        self.manager.delete_repo('repo')

        self.assertTrue(con_delete_repo.called)
        self.assertEqual(con_delete_repo.call_args[1]['force'], False)

    def test_add_collaborator(self):
        con_add_collab = self.mock_connection.return_value.add_collaborator
        mock_User = self.create_patch('core.db.manager.User')
        mock_Collaborator = self.create_patch(
            'core.db.manager.Collaborator')
        mock_Collaborator.objects.get_or_create.return_value = (
            MagicMock(), True)

        self.manager.add_collaborator(
            repo='reponame', collaborator='new_collaborator', privileges='select')

        self.assertTrue(con_add_collab.called)
        self.assertEqual(con_add_collab.call_args[1]['repo'], 'reponame')
        self.assertEqual(
            con_add_collab.call_args[1]['collaborator'], 'new_collaborator')
        self.assertEqual(con_add_collab.call_args[1]['privileges'], 'select')

    def test_delete_collaborator(self):
        self.mock_connection.return_value.list_collaborators.return_value = [
            'old_collaborator']
        self.mock_User = self.create_patch('core.db.manager.User')
        self.mock_Collaborator = self.create_patch(
            'core.db.manager.Collaborator')

        con_delete_collab = (self.mock_connection
                             .return_value.delete_collaborator)
        self.manager.delete_collaborator('reponame', 'old_collaborator')

        self.assertTrue(con_delete_collab.called)
        self.assertEqual(con_delete_collab.call_args[1]['repo'], 'reponame')
        self.assertEqual(
            con_delete_collab.call_args[1]['collaborator'], 'old_collaborator')

    def test_get_schema(self):
        con_get_schema = self.mock_connection.return_value.get_schema
        self.manager.get_schema('reponame', 'tablename')

        self.assertTrue(con_get_schema.called)
        self.assertEqual(con_get_schema.call_args[1]['repo'], 'reponame')
        self.assertEqual(con_get_schema.call_args[1]['table'], 'tablename')