diff --git a/pagure/lib/__init__.py b/pagure/lib/__init__.py index de7815f..07e3d14 100644 --- a/pagure/lib/__init__.py +++ b/pagure/lib/__init__.py @@ -1328,6 +1328,7 @@ def new_project(session, user, name, blacklist, allowed_prefix, avatar_email=avatar_email if avatar_email else None, user_id=user_obj.id, parent_id=parent_id, + private=private, hook_token=pagure.lib.login.id_generator(40) ) session.add(project) @@ -1897,7 +1898,7 @@ def search_projects( session, username=None, fork=None, tags=None, namespace=None, pattern=None, start=None, limit=None, count=False, sort=None, - exclude_groups=None): + exclude_groups=None, private=None): '''List existing projects ''' projects = session.query( @@ -2015,6 +2016,24 @@ def search_projects( model.Project.id.in_(projects.subquery()) ) + if private is False: + query = query.filter( + model.Project.private == False + ) + elif isinstance(private, basestring): + user2 = aliased(model.User) + query = query.filter( + sqlalchemy.or_( + model.Project.private == False, + sqlalchemy.and_( + model.Project.private == True, + model.Project.user_id == user2.id, + user2.user == private, + ) + ) + ) + + if sort == 'latest': query = query.order_by( model.Project.date_created.desc() diff --git a/pagure/lib/model.py b/pagure/lib/model.py index 3bbf258..c60bb90 100644 --- a/pagure/lib/model.py +++ b/pagure/lib/model.py @@ -376,6 +376,7 @@ class Project(BASE): parent = relation('Project', remote_side=[id], backref='forks') user = relation('User', foreign_keys=[user_id], remote_side=[User.id], backref='projects') + private = sa.Column(sa.Boolean, nullable=False, default=False) users = relation( 'User', diff --git a/pagure/ui/app.py b/pagure/ui/app.py index ce0e38d..8ca08e0 100644 --- a/pagure/ui/app.py +++ b/pagure/ui/app.py @@ -47,6 +47,7 @@ def index(): fork=False, start=start, limit=limit, + private=False, sort=sorting) num_repos = pagure.lib.search_projects( @@ -93,27 +94,28 @@ def index_auth(): except ValueError: forkpage = 1 + private = flask.g.fas_user.username repos = pagure.lib.search_projects( SESSION, username=flask.g.fas_user.username, exclude_groups=APP.config.get('EXCLUDE_GROUP_INDEX'), - fork=False) + fork=False, private=private) repos_length = pagure.lib.search_projects( SESSION, username=flask.g.fas_user.username, exclude_groups=APP.config.get('EXCLUDE_GROUP_INDEX'), fork=False, - count=True) + count=True, private=private) forks = pagure.lib.search_projects( SESSION, username=flask.g.fas_user.username, - fork=True) + fork=True, private=private) forks_length = pagure.lib.search_projects( SESSION, username=flask.g.fas_user.username, fork=True, - count=True) + count=True, private=private) watch_list = pagure.lib.user_watch_list( SESSION,