You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
3.0 KiB
81 lines
3.0 KiB
/* © SRSoftware 2024 */ |
|
package de.srsoftware.oidc.backend; |
|
|
|
import static de.srsoftware.oidc.api.Constants.*; |
|
import static de.srsoftware.oidc.api.data.Permission.MANAGE_SMTP; |
|
import static java.net.HttpURLConnection.HTTP_FORBIDDEN; |
|
import static java.net.HttpURLConnection.HTTP_UNAUTHORIZED; |
|
|
|
import com.sun.net.httpserver.HttpExchange; |
|
import de.srsoftware.oidc.api.MailConfig; |
|
import de.srsoftware.oidc.api.SessionService; |
|
import de.srsoftware.oidc.api.UserService; |
|
import de.srsoftware.oidc.api.data.Session; |
|
import java.io.IOException; |
|
|
|
public class EmailController extends Controller { |
|
private final MailConfig mailConfig; |
|
private final UserService users; |
|
|
|
public EmailController(MailConfig mailConfig, SessionService sessionService, UserService userService) { |
|
super(sessionService); |
|
this.mailConfig = mailConfig; |
|
users = userService; |
|
} |
|
|
|
@Override |
|
public boolean doGet(String path, HttpExchange ex) throws IOException { |
|
var optSession = getSession(ex); |
|
if (optSession.isEmpty()) return sendEmptyResponse(HTTP_UNAUTHORIZED, ex); |
|
var session = optSession.get(); |
|
var optUser = users.load(session.userId()); |
|
if (optUser.isEmpty()) return invalidSessionUser(ex); |
|
var user = optUser.get(); |
|
sessions.extend(session, user); |
|
|
|
switch (path) { |
|
case "/settings": |
|
return provideSettings(ex, session); |
|
} |
|
return notFound(ex); |
|
} |
|
|
|
@Override |
|
public boolean doPost(String path, HttpExchange ex) throws IOException { |
|
var optSession = getSession(ex); |
|
if (optSession.isEmpty()) return sendEmptyResponse(HTTP_UNAUTHORIZED, ex); |
|
var session = optSession.get(); |
|
var optUser = users.load(session.userId()); |
|
if (optUser.isEmpty()) return invalidSessionUser(ex); |
|
var user = optUser.get(); |
|
sessions.extend(session, user); |
|
|
|
switch (path) { |
|
case "/settings": |
|
return saveSettings(ex, session); |
|
} |
|
return notFound(ex); |
|
} |
|
|
|
private boolean provideSettings(HttpExchange ex, Session session) throws IOException { |
|
var optUser = users.load(session.userId()); |
|
if (optUser.isEmpty()) return invalidSessionUser(ex); |
|
if (!optUser.get().hasPermission(MANAGE_SMTP)) return sendEmptyResponse(HTTP_FORBIDDEN, ex); |
|
return sendContent(ex, mailConfig.map()); |
|
} |
|
|
|
private boolean saveSettings(HttpExchange ex, Session session) throws IOException { |
|
var optUser = users.load(session.userId()); |
|
if (optUser.isEmpty()) return invalidSessionUser(ex); |
|
if (!optUser.get().hasPermission(MANAGE_SMTP)) return sendEmptyResponse(HTTP_FORBIDDEN, ex); |
|
var data = json(ex); |
|
if (data.has(SMTP_HOST)) mailConfig.smtpHost(data.getString(SMTP_HOST)); |
|
if (data.has(SMTP_PORT)) mailConfig.smtpPort(data.getInt(SMTP_PORT)); |
|
if (data.has(SMTP_USER)) mailConfig.senderAddress(data.getString(SMTP_USER)); |
|
if (data.has(SMTP_PASSWORD)) mailConfig.senderPassword(data.getString(SMTP_PASSWORD)); |
|
if (data.has(SMTP_AUTH)) mailConfig.smtpAuth(data.getBoolean(SMTP_AUTH)); |
|
if (data.has(START_TLS)) mailConfig.startTls(data.getBoolean(START_TLS)); |
|
mailConfig.save(); |
|
return sendContent(ex, "saved"); |
|
} |
|
}
|
|
|