From: Michael Tremer Date: Mon, 6 Dec 2021 18:04:42 +0000 (+0000) Subject: backend: Add some basic user backend X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=73de4288c45613a9f4a4e070712407a15c647846;p=people%2Fms%2Fwestferry.git backend: Add some basic user backend Signed-off-by: Michael Tremer --- diff --git a/Makefile.am b/Makefile.am index 5d2d4d3..a9999b1 100644 --- a/Makefile.am +++ b/Makefile.am @@ -102,7 +102,8 @@ westferry_backend_PYTHON = \ src/westferry/backend/__version__.py \ src/westferry/backend/base.py \ src/westferry/backend/graphs.py \ - src/westferry/backend/system.py + src/westferry/backend/system.py \ + src/westferry/backend/users.py westferry_backenddir = $(pythondir)/westferry/backend diff --git a/src/templates/base.html b/src/templates/base.html index a8618fe..a1b1840 100644 --- a/src/templates/base.html +++ b/src/templates/base.html @@ -27,9 +27,21 @@
-
diff --git a/src/westferry/backend/__init__.py b/src/westferry/backend/__init__.py index 3e99836..2c094b2 100644 --- a/src/westferry/backend/__init__.py +++ b/src/westferry/backend/__init__.py @@ -23,6 +23,7 @@ from .__version__ import VERSION from . import graphs from . import system +from . import users class Backend(object): version = VERSION @@ -32,3 +33,4 @@ class Backend(object): self.graphs = graphs.GraphsBackend(self) self.system = system.SystemBackend(self) + self.users = users.UsersBackend(self) diff --git a/src/westferry/backend/users.py b/src/westferry/backend/users.py new file mode 100644 index 0000000..81ba5cf --- /dev/null +++ b/src/westferry/backend/users.py @@ -0,0 +1,76 @@ +#!/usr/bin/python3 +############################################################################### +# # +# Westferry - The IPFire web user interface # +# Copyright (C) 2021 IPFire development team # +# # +# This program is free software: you can redistribute it and/or modify # +# it under the terms of the GNU General Public License as published by # +# the Free Software Foundation, either version 3 of the License, or # +# (at your option) any later version. # +# # +# This program is distributed in the hope that it will be useful, # +# but WITHOUT ANY WARRANTY; without even the implied warranty of # +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # +# GNU General Public License for more details. # +# # +# You should have received a copy of the GNU General Public License # +# along with this program. If not, see . # +# # +############################################################################### + +import functools +import pydbus + +from . import base + +class UsersBackend(base.BaseBackend): + """ + This class manages and has access to all user objects + """ + @functools.cached_property + def sssd(self): + """ + Returns the SSSD d-bus proxy + """ + return self.backend.system.bus.get( + "org.freedesktop.sssd.infopipe", + "/org/freedesktop/sssd/infopipe/Users", + ) + + def get_by_name(self, name): + try: + return User(self.backend, name) + except NotFoundError: + return + + +class User(base.BaseBackend): + def initialize(self, name): + # Store the UID + self.name = name + + # Search for the user's path in dbus + self.path = self.backend.users.sssd.FindByName(name) + if not self.path: + raise NotFoundError("Could not find user %s" % name) + + def __repr__(self): + return "<%s uid=%s>" % (self.__class__.__name__, self.uid) + + def __str__(self): + return self.gecos + + @functools.cached_property + def sssd(self): + """ + Returns the SSSD d-bus proxy + """ + return self.backend.system.bus.get("org.freedesktop.sssd.infopipe", self.path) + + @property + def gecos(self): + """ + Return's the user's realname + """ + return self.sssd.gecos diff --git a/src/westferry/handlers/base.py b/src/westferry/handlers/base.py index 9f134df..abbe1a7 100644 --- a/src/westferry/handlers/base.py +++ b/src/westferry/handlers/base.py @@ -61,6 +61,13 @@ class BaseHandler(tornado.web.RequestHandler, metaclass=HandlerRegistration): """ return self.application.backend + def get_current_user(self): + """ + This function returns the currently logged-in user. + """ + # XXX This is just a demo + return self.backend.users.get_by_name("ms") + @property def topmenu(self): """