package org.openslx.dozmod.gui.window; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import javax.xml.bind.DatatypeConverter; import org.apache.commons.io.IOUtils; import org.apache.log4j.Logger; import org.openslx.dozmod.Config; import org.openslx.dozmod.gui.helper.UiFeedback; import org.openslx.dozmod.util.ResourceLoader; /** * Window for showing the privacy notice. */ @SuppressWarnings("serial") public class PrivacyNoticeWindow extends GenericNoticeWindow implements UiFeedback { private final static Logger LOGGER = Logger.getLogger(PrivacyNoticeWindow.class); final PrivacyNoticeWindow me = this; private static String PRIVACY_NOTICE_MD5 = null; private static String PRIVACY_NOTICE_CONTENT = null; static { try (InputStream noticeStream = ResourceLoader.getStream("/txt/privacy_notice")) { MessageDigest md = MessageDigest.getInstance("MD5"); byte[] content = IOUtils.toByteArray(noticeStream); md.update(content); byte[] md5 = md.digest(); PRIVACY_NOTICE_CONTENT = new String(content, StandardCharsets.UTF_8); PRIVACY_NOTICE_MD5 = DatatypeConverter.printHexBinary(md5); } catch (IOException | NoSuchAlgorithmException e) { LOGGER.error("Failed to get hash of privacy_notice: ", e); } } public PrivacyNoticeWindow(Frame modalParent) { super(modalParent, shouldBeShown()); // Set the actual text setNoticeText(PRIVACY_NOTICE_CONTENT); // function for continue button btnContinue.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // save the agreement to config Config.setPrivacyAgreement(PRIVACY_NOTICE_MD5); me.dispose(); } }); } public static boolean shouldBeShown() { return !Config.getPrivacyAgreement().equals(PRIVACY_NOTICE_MD5); } public static void open(Frame modalParent) { new PrivacyNoticeWindow(modalParent).setVisible(true); } }