| |
@@ -1,7 +1,12 @@
|
| |
+ import json
|
| |
+ import simplejson
|
| |
from coprs import exceptions
|
| |
+ from flask import url_for
|
| |
|
| |
from coprs import app, db
|
| |
from coprs.models import User, Group
|
| |
+ from coprs.helpers import copr_url
|
| |
+ from sqlalchemy import update
|
| |
|
| |
|
| |
class UsersLogic(object):
|
| |
@@ -102,3 +107,69 @@
|
| |
return fas_group in app.config["BLACKLISTED_GROUPS"]
|
| |
else:
|
| |
return False
|
| |
+
|
| |
+ @classmethod
|
| |
+ def delete_user_data(cls, fas_name):
|
| |
+ query = update(User).where(User.username==fas_name).\
|
| |
+ values(
|
| |
+ timezone=None,
|
| |
+ proven=False,
|
| |
+ admin=False,
|
| |
+ proxy=False,
|
| |
+ api_login='',
|
| |
+ api_token='',
|
| |
+ api_token_expiration='1970-01-01',
|
| |
+ openid_groups=None
|
| |
+ )
|
| |
+ db.engine.connect().execute(query)
|
| |
+
|
| |
+
|
| |
+ class UserDataDumper(object):
|
| |
+ def __init__(self, user):
|
| |
+ self.user = user
|
| |
+
|
| |
+ def dumps(self, pretty=False):
|
| |
+ if pretty:
|
| |
+ return simplejson.dumps(self.data, indent=2)
|
| |
+ return json.dumps(self.data)
|
| |
+
|
| |
+ @property
|
| |
+ def data(self):
|
| |
+ data = self.user_information
|
| |
+ data["groups"] = self.groups
|
| |
+ data["projects"] = self.projects
|
| |
+ data["builds"] = self.builds
|
| |
+ return data
|
| |
+
|
| |
+ @property
|
| |
+ def user_information(self):
|
| |
+ return {
|
| |
+ "username": self.user.name,
|
| |
+ "email": self.user.mail,
|
| |
+ "timezone": self.user.timezone,
|
| |
+ "api_login": self.user.api_login,
|
| |
+ "api_token": self.user.api_token,
|
| |
+ "api_token_expiration": self.user.api_token_expiration.strftime("%b %d %Y %H:%M:%S"),
|
| |
+ "gravatar": self.user.gravatar_url,
|
| |
+ }
|
| |
+
|
| |
+ @property
|
| |
+ def groups(self):
|
| |
+ return [{"name": g.name,
|
| |
+ "url": url_for("groups_ns.list_projects_by_group", group_name=g.name, _external=True)}
|
| |
+ for g in self.user.user_groups]
|
| |
+
|
| |
+ @property
|
| |
+ def projects(self):
|
| |
+ # @FIXME We get into circular import when this import is on module-level
|
| |
+ from coprs.logic.coprs_logic import CoprsLogic
|
| |
+ return [{"full_name": p.full_name,
|
| |
+ "url": copr_url("coprs_ns.copr_detail", p, _external=True)}
|
| |
+ for p in CoprsLogic.filter_by_user_name(CoprsLogic.get_multiple(), self.user.name)]
|
| |
+
|
| |
+ @property
|
| |
+ def builds(self):
|
| |
+ return [{"id": b.id,
|
| |
+ "project": b.copr.full_name,
|
| |
+ "url": copr_url("coprs_ns.copr_build", b.copr, build_id=b.id, _external=True)}
|
| |
+ for b in self.user.builds]
|
| |
I'd probably request "are you sure" confirmation.