package tv.dyndns.kishibe.qmaclone.server; import java.io.UnsupportedEncodingException; import java.util.Date; import java.util.List; import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import tv.dyndns.kishibe.qmaclone.client.packet.PacketThemeModeEditor; import tv.dyndns.kishibe.qmaclone.client.packet.PacketThemeModeEditor.ThemeModeEditorStatus; import tv.dyndns.kishibe.qmaclone.client.packet.PacketUserData; import tv.dyndns.kishibe.qmaclone.server.database.Database; import tv.dyndns.kishibe.qmaclone.server.database.DatabaseException; import com.google.common.base.Preconditions; import com.google.common.base.Throwables; import com.google.inject.Inject; public class ThemeModeEditorManager { private static final Logger logger = Logger.getLogger(ThemeModeEditorManager.class.toString()); private static final String MAIL_USER_NAME = "nodchip@gmail.com"; private static final String MAIL_PASSWORD_KEY = "mail.nodchip.gmail.com"; private final Database database; @Inject public ThemeModeEditorManager(Database database) { this.database = Preconditions.checkNotNull(database); } public boolean isThemeModeEditor(int userCode) throws DatabaseException { return database.getThemeModeEditorsStatus(userCode) == ThemeModeEditorStatus.Accepted; } public void applyThemeModeEditor(int userCode, String text) throws DatabaseException, MessagingException { database.updateThemeModeEdtorsStatus(userCode, ThemeModeEditorStatus.Applying); // メール送信 PacketUserData userData = database.getUserData(userCode); Properties properties = System.getProperties(); properties.setProperty("mail.smtp.host", "smtp.gmail.com"); properties.setProperty("mail.smtp.socketFactory.port", "465"); properties.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); properties.setProperty("mail.smtp.auth", "true"); properties.setProperty("mail.smtp.port", "465"); Session session = Session.getInstance(properties, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { try { return new PasswordAuthentication(MAIL_USER_NAME, database .getPassword(MAIL_PASSWORD_KEY)); } catch (DatabaseException e) { logger.log(Level.WARNING, "メールパスワードの読み込みに失敗しました", e); return null; } } }); MimeMessage mimeMessage = new MimeMessage(session); try { mimeMessage.setFrom(new InternetAddress("nodchip@gmail.com", "QMAClone.ThemeModeEditorManager", "iso-2022-jp")); } catch (UnsupportedEncodingException e) { logger.log(Level.WARNING, "サポートされていないエンコーディングです", e); throw Throwables.propagate(e); } mimeMessage.setRecipients(Message.RecipientType.TO, "nodchip@gmail.com"); mimeMessage.setSubject("[QMAClone] テーマモード編集権限申請 " + userData.playerName, "iso-2022-jp"); StringBuilder sb = new StringBuilder(); sb.append("QMAClone管理者様:\n\n"); sb.append("テーマモード編集権限の申請がありました。\n"); sb.append("プレイヤーコード : ").append(userData.userCode).append("\n"); sb.append("プレイヤー名 : ").append(userData.playerName).append("\n"); sb.append("プレイ回数 : ").append(userData.playCount).append("\n"); sb.append("レーティング : ").append(userData.rating).append("\n"); sb.append("一言 : ").append(text).append("\n"); sb.append("以上、よろしくお願いいたします。\n\n"); sb.append("http://kishibe.dyndns.tv/QMAClone/#administratormode\n"); mimeMessage.setText(sb.toString(), "iso-2022-jp"); mimeMessage.setHeader("Content-Type", "text/plain"); mimeMessage.setSentDate(new Date()); Transport.send(mimeMessage); } public void acceptThemeModeEditor(int userCode) throws DatabaseException { database.updateThemeModeEdtorsStatus(userCode, ThemeModeEditorStatus.Accepted); } public void rejectThemeModeEditor(int userCode) throws DatabaseException { database.updateThemeModeEdtorsStatus(userCode, ThemeModeEditorStatus.Refected); } public List<PacketThemeModeEditor> getThemeModeEditors() throws DatabaseException { return database.getThemeModeEditors(); } public boolean isApplyingThemeModeEditor(int userCode) throws DatabaseException { return database.getThemeModeEditorsStatus(userCode) == ThemeModeEditorStatus.Applying; } // public static void main(String[] args) throws DatabaseException, MessagingException { // Guice.createInjector(new // QMACloneModule()).getInstance(ThemeModeEditorManager.class).applyThemeModeEditor(12345678, // "hoge"); // } }