implemented creation of new user
This commit is contained in:
@@ -6,6 +6,7 @@ public class Paths {
|
||||
|
||||
public static final String CALLBACK = "callback";
|
||||
public static final String CONNECTED = "connected";
|
||||
public static final String CREATE = "create";
|
||||
public static final String DASH = "dash";
|
||||
public static final String IMPERSONATE = "impersonate";
|
||||
public static final String INSTALL = "install";
|
||||
|
||||
@@ -242,6 +242,7 @@ public class UserModule extends BaseHandler {
|
||||
head = path.pop();
|
||||
} catch (NumberFormatException ignored) {}
|
||||
switch (head){
|
||||
case CREATE: return postCreate(ex);
|
||||
case OIDC: return postOIDC(ex,path);
|
||||
case IMPERSONATE: return impersonate(ex,targetId);
|
||||
case LOGIN: return postLogin(ex);
|
||||
@@ -466,6 +467,30 @@ public class UserModule extends BaseHandler {
|
||||
}
|
||||
}
|
||||
|
||||
private boolean postCreate(HttpExchange ex) throws IOException {
|
||||
var sessionToken = SessionToken.from(ex).map(Token::of);
|
||||
if (sessionToken.isEmpty()) return sendEmptyResponse(HTTP_UNAUTHORIZED,ex);
|
||||
try {
|
||||
var u = users.load(users.load(sessionToken.get()));
|
||||
if (!(u instanceof DbUser requestingUser && requestingUser.permissions().contains(PERMISSION.CREATE_USERS))) return sendEmptyResponse(HTTP_FORBIDDEN,ex);
|
||||
var json = json(ex);
|
||||
|
||||
if (json.has(USER)) json = json.getJSONObject(USER);
|
||||
var name = json.has(NAME) ? json.getString(NAME) : null;
|
||||
var email = json.has(EMAIL) ? new EmailAddress(json.getString(EMAIL)) : null;
|
||||
var theme = json.has(THEME) ? json.getString(THEME) : null;
|
||||
var lang = json.has(LANGUAGE) ? json.getString(LANGUAGE) : null;
|
||||
var pass = json.has(PASSWORD) ? json.getString(PASSWORD) : null;
|
||||
var hashedPass = Password.of(BAD_HASHER.hash(pass,null));
|
||||
var newUser = new DbUser(0, name, email, hashedPass, theme, lang, Set.of(), null);
|
||||
|
||||
var user = users.save(newUser);
|
||||
return sendContent(ex,HTTP_OK,user);
|
||||
} catch (UmbrellaException e) {
|
||||
return send(ex,e);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean postResetPassword(HttpExchange ex) throws IOException {
|
||||
try {
|
||||
var email = body(ex);
|
||||
|
||||
@@ -144,7 +144,7 @@ CREATE TABLE IF NOT EXISTS {0} (
|
||||
`{2}` VARCHAR(255) NOT NULL,
|
||||
`{3}` VARCHAR(255) NOT NULL,
|
||||
`{4}` VARCHAR(50),
|
||||
`{5}` VARCHAR(255),
|
||||
`{5}` VARCHAR(255) UNIQUE,
|
||||
`{6}` VARCHAR(100) DEFAULT "DELIVER INSTANTLY",
|
||||
`{7}` INT DEFAULT NULL,
|
||||
`{8}` TEXT,
|
||||
@@ -476,11 +476,17 @@ CREATE TABLE IF NOT EXISTS {0} (
|
||||
public UmbrellaUser save(DbUser user) throws UmbrellaException {
|
||||
try {
|
||||
Long id = user.id();
|
||||
if (id<1) id = null;
|
||||
replaceInto(TABLE_USERS, ID, LOGIN, PASS, THEME, EMAIL, LAST_LOGOFF)
|
||||
.values(id,user.name(),user.hashedPassword(),user.theme(),user.email(),user.lastLogoff())
|
||||
.execute(db)
|
||||
.close();
|
||||
if (id<1){
|
||||
insertInto(TABLE_USERS,LOGIN, PASS, THEME, EMAIL)
|
||||
.values(user.name(), user.hashedPassword(), user.theme(), user.email().toString())
|
||||
.execute(db)
|
||||
.close();
|
||||
} else {
|
||||
replaceInto(TABLE_USERS, ID, LOGIN, PASS, THEME, EMAIL, LAST_LOGOFF)
|
||||
.values(id, user.name(), user.hashedPassword(), user.theme(), user.email().toString(), user.lastLogoff())
|
||||
.execute(db)
|
||||
.close();
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
LOG.log(WARNING,"Failed to store user data for {0}!",user.name(),e);
|
||||
throw new UmbrellaException(500,"Failed to store user data for {0}!",user.name()).causedBy(e);
|
||||
|
||||
Reference in New Issue
Block a user