implemented project creation

This commit is contained in:
2025-07-18 22:10:47 +02:00
parent 9626d91ccb
commit 722f12912d
17 changed files with 157 additions and 78 deletions

View File

@@ -140,6 +140,11 @@ public class UserModule extends BaseHandler implements UserService {
}
}
@Override
public Map<Long, UmbrellaUser> list(Collection<Long> ids) throws UmbrellaException {
return users.list(0,null,ids);
}
@Override
public UmbrellaUser loadUser(long userId) throws UmbrellaException {
return users.load(userId);
@@ -191,7 +196,7 @@ public class UserModule extends BaseHandler implements UserService {
if (user.isEmpty()) return unauthorized(ex);
if (!(user.get() instanceof DbUser dbUser)) return unauthorized(ex);
if (!(dbUser.id() == userId || dbUser.permissions().contains(LIST_USERS))) throw forbidden("You are not allowed to access that user!");
return sendContent(ex,users.load(userId));
return sendContent(ex,loadUser(userId));
} catch (UmbrellaException e) {
return send(ex,e);
} catch (NumberFormatException ignored) {}
@@ -216,7 +221,7 @@ public class UserModule extends BaseHandler implements UserService {
if (PASSWORD.equals(head)) return patchPassword(ex,requestingUser.get());
if (OIDC.equals(head)) return patchService(ex,path.pop(),requestingUser.get());
userId = Long.parseLong(head);
DbUser editedUser = (DbUser) users.load(userId);
DbUser editedUser = (DbUser) loadUser(userId);
if (!(requestingUser.get() instanceof DbUser dbUser) || !(dbUser.id() == userId || dbUser.permissions().contains(UPDATE_USERS))) throw forbidden("You are not allowed to update user "+editedUser.name());
@@ -288,7 +293,7 @@ public class UserModule extends BaseHandler implements UserService {
var assignment = new ForeignLogin(state.loginService.name(),oidcUserId,currentUser.id());
logins.save(assignment);
}
var user = users.load(logins.getUserId(state.loginService.name(), oidcUserId));
var user = loadUser(logins.getUserId(state.loginService.name(), oidcUserId));
var session = users.getSession(user);
var returnTo = "/user";
if (state.config.has("returnTo")) returnTo = state.config.getString("returnTo");
@@ -384,7 +389,7 @@ public class UserModule extends BaseHandler implements UserService {
private boolean getUserList(HttpExchange ex, UmbrellaUser user) throws IOException, UmbrellaException {
if (!(user instanceof DbUser dbUser && dbUser.permissions().contains(LIST_USERS))) throw forbidden("You are not allowed to list users!");
var list = users.list(0, null).stream().map(UmbrellaUser::toMap).toList();
var list = users.list(0, null,null).values().stream().map(UmbrellaUser::toMap).toList();
return sendContent(ex,list);
}
@@ -393,7 +398,7 @@ public class UserModule extends BaseHandler implements UserService {
if (!(requestingUser.isPresent() && requestingUser.get() instanceof DbUser dbUser)) return unauthorized(ex);
if (!dbUser.permissions().contains(PERMISSION.IMPERSONATE)) throw forbidden("You are not allowed to impersonate other users!");
if (targetId == null) return sendContent(ex,HTTP_UNPROCESSABLE,"user id missing");
var targetUser = users.load(targetId);
var targetUser = loadUser(targetId);
users.getSession(targetUser).cookie().addTo(ex);
return sendContent(ex,targetUser.toMap());
}

View File

@@ -8,7 +8,8 @@ import de.srsoftware.umbrella.core.model.Token;
import de.srsoftware.umbrella.core.model.UmbrellaUser;
import de.srsoftware.umbrella.user.model.DbUser;
import de.srsoftware.umbrella.user.model.Password;
import java.util.List;
import java.util.Collection;
import java.util.Map;
public interface UserDb {
@@ -25,7 +26,7 @@ public interface UserDb {
Session extend(Session session) throws UmbrellaException;
List<UmbrellaUser> list(Integer start, Integer limit, Long ... ids) throws UmbrellaException;
Map<Long, UmbrellaUser> list(Integer start, Integer limit, Collection<Long> ids) throws UmbrellaException;
Session load(Token token) throws UmbrellaException;

View File

@@ -295,15 +295,18 @@ CREATE TABLE IF NOT EXISTS {0} (
@Override
public List<UmbrellaUser> list(Integer start, Integer limit, Long ... ids) throws UmbrellaException {
var list = new ArrayList<UmbrellaUser>();
public Map<Long, UmbrellaUser> list(Integer start, Integer limit, Collection<Long> ids) throws UmbrellaException {
var list = new HashMap<Long, UmbrellaUser>();
try {
var query = select(ALL).from(TABLE_USERS);
if (start != null && start > 0) query.skip(start);
if (limit != null && limit > 0) query.limit(limit);
if (ids != null && ids.length>0) query.where(ID,in((Object[]) ids));
if (ids != null && !ids.isEmpty()) query.where(ID,in(ids.toArray()));
var rs = query.exec(db);
while (rs.next()) list.add(toUser(rs));
while (rs.next()) {
var user = toUser(rs);
list.put(user.id(),user);
}
rs.close();
} catch (SQLException e) {
LOG.log(WARNING,"Failed to load user list from database!",e);