working on sending mails: prerequisite mail configuration in progress
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -18,6 +18,8 @@ dependencies {
|
||||
implementation project(':de.srsoftware.utils')
|
||||
implementation 'org.json:json:20240303'
|
||||
implementation 'org.bitbucket.b_c:jose4j:0.9.6'
|
||||
implementation 'com.sun.mail:jakarta.mail:2.0.1'
|
||||
|
||||
}
|
||||
|
||||
test {
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
/* © SRSoftware 2024 */
|
||||
package de.srsoftware.oidc.backend;
|
||||
|
||||
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.data.User;
|
||||
import java.io.IOException;
|
||||
|
||||
public class EmailController extends Controller {
|
||||
private final MailConfig mailConfig;
|
||||
|
||||
public EmailController(MailConfig mailConfig, SessionService sessionService) {
|
||||
super(sessionService);
|
||||
this.mailConfig = mailConfig;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doGet(String path, HttpExchange ex) throws IOException {
|
||||
var optSession = getSession(ex);
|
||||
if (optSession.isEmpty()) return sendEmptyResponse(HTTP_UNAUTHORIZED, ex);
|
||||
var user = optSession.get().user();
|
||||
switch (path) {
|
||||
case "/settings":
|
||||
return provideSettings(ex, user);
|
||||
}
|
||||
return notFound(ex);
|
||||
}
|
||||
|
||||
private boolean provideSettings(HttpExchange ex, User user) throws IOException {
|
||||
if (!user.hasPermission(MANAGE_SMTP)) return sendEmptyResponse(HTTP_FORBIDDEN, ex);
|
||||
return sendContent(ex, mailConfig.map());
|
||||
}
|
||||
}
|
||||
@@ -12,17 +12,28 @@ import de.srsoftware.http.SessionToken;
|
||||
import de.srsoftware.oidc.api.*;
|
||||
import de.srsoftware.oidc.api.data.Session;
|
||||
import de.srsoftware.oidc.api.data.User;
|
||||
import jakarta.mail.*;
|
||||
import jakarta.mail.internet.*;
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import org.json.JSONObject;
|
||||
|
||||
public class UserController extends Controller {
|
||||
private final UserService users;
|
||||
private final UserService users;
|
||||
private final MailConfig mailConfig;
|
||||
private final Authenticator auth;
|
||||
|
||||
public UserController(SessionService sessionService, UserService userService) {
|
||||
public UserController(MailConfig mailConfig, SessionService sessionService, UserService userService) {
|
||||
super(sessionService);
|
||||
users = userService;
|
||||
users = userService;
|
||||
this.mailConfig = mailConfig;
|
||||
auth = new Authenticator() {
|
||||
// override the getPasswordAuthentication method
|
||||
protected PasswordAuthentication getPasswordAuthentication() {
|
||||
return new PasswordAuthentication(mailConfig.senderAddress(), mailConfig.senderPassword());
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
private boolean addUser(HttpExchange ex, Session session) throws IOException {
|
||||
@@ -115,6 +126,29 @@ public class UserController extends Controller {
|
||||
|
||||
private void senPasswordLink(User user) {
|
||||
LOG.log(WARNING, "Sending password link to {0}", user.email());
|
||||
try {
|
||||
var session = jakarta.mail.Session.getDefaultInstance(mailConfig.props(), auth);
|
||||
Message message = new MimeMessage(session);
|
||||
message.setFrom(new InternetAddress(mailConfig.senderAddress()));
|
||||
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(user.email()));
|
||||
message.setSubject("Mail Subject");
|
||||
|
||||
String msg = "This is my first email using JavaMailer";
|
||||
|
||||
MimeBodyPart mimeBodyPart = new MimeBodyPart();
|
||||
mimeBodyPart.setContent(msg, "text/html; charset=utf-8");
|
||||
|
||||
Multipart multipart = new MimeMultipart();
|
||||
multipart.addBodyPart(mimeBodyPart);
|
||||
|
||||
message.setContent(multipart);
|
||||
|
||||
Transport.send(message);
|
||||
} catch (AddressException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (MessagingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean sendUserAndCookie(HttpExchange ex, Session session) throws IOException {
|
||||
|
||||
Reference in New Issue
Block a user