package com.sygnalist.api;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.firebase.auth.FirebaseAuthException;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.stream.JsonReader;
import com.sygnalist.api.models.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import java.util.concurrent.ExecutionException;
@RestController
@RequestMapping(path = "/utils/", headers = {"content-type=application/json"})
public class EmailController {
@GetMapping("/sendEmail")
EmailConstructor emailConstructor = new EmailConstructor();
Report report = ReportFetcher.FetchReport(hash);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "sygnalist.com");
props.put("mail.smtp.port", "587");
Session session
= Session.
getInstance(props,
new javax.
mail.
Authenticator() {
}
});
List<String> emails = report.getRecipientList();
Message msg = new MimeMessage(session);
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(email));
msg.setSubject("Zgłoszenie z aplikacji sygnalista");
msg.setContent("Zgłoszenie z aplikacji sygnalista", "text/html; charset=UTF-8");
msg.
setSentDate(new Date());
MimeBodyPart messageBodyPart = new MimeBodyPart();
MimeUtility.encodeText(emailConstructor.CreateSygnalistaEmail(report, email), "UTF-8", "B");
messageBodyPart.setContent(emailConstructor.CreateSygnalistaEmail(report, email), "text/html; charset=UTF-8");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
msg.setContent(multipart);
Transport.send(msg);
}
}
@GetMapping("/report")
ReportFetcher.FetchReport(hash);
}
@PostMapping("/sendEmailKids")
public void sendEmail(@RequestBody KidsReportEmail kidsReportEmail) {
ObjectMapper objectMapper = new ObjectMapper();
try {
objStr = objectMapper.writeValueAsString(kidsReportEmail);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
try {
System.
out.
println(kidsReportEmail.
toString());
sendmailkids(kidsReportEmail);
} catch (MessagingException e) {
e.printStackTrace();
e.printStackTrace();
}
}
@PostMapping("/sendEmailPaparazzi")
public void sendEmailPaparazzi(@RequestBody PaparazziEmail paparazziEmail) {
ObjectMapper objectMapper = new ObjectMapper();
try {
objStr = objectMapper.writeValueAsString(paparazziEmail);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
try {
System.
out.
println(paparazziEmail.
toString());
sendMailPaparazzi(paparazziEmail);
} catch (MessagingException e) {
e.printStackTrace();
e.printStackTrace();
}
}
private void sendmailkids
(KidsReportEmail reportEmail
) throws AddressException, MessagingException,
IOException {
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "malysygnalista.pl");
props.put("mail.smtp.port", "587");
Session session
= Session.
getInstance(props,
new javax.
mail.
Authenticator() {
}
});
Message msg = new MimeMessage(session);
//tutaj jest do kogo wysyłąne?
//ZMIANY 18.09.2019
InternetAddress[] emails = InternetAddress.parse(/*reportEmail.institution.email + "\n" + */(/*reportEmail.sendToMe ?*/ reportEmail.targetEmail/* : ""*/));
//GOTCH YA
msg.setRecipients(Message.RecipientType.TO, emails);
msg.setSubject("Zgłoszenie z aplikacji Mały Sygnalista");
msg.setContent("Zgłoszenie z aplikacji Mały Sygnalista", "text/html; charset=UTF-8");
msg.
setSentDate(new Date());
MimeBodyPart messageBodyPart = new MimeBodyPart();
MimeUtility.encodeText(createEmailContentForKids(reportEmail), "UTF-8", "B");
messageBodyPart.setContent(createEmailContentForKids(reportEmail), "text/html; charset=UTF-8");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
//MimeBodyPart attachPart = new MimeBodyPart();
//attachPart.attachFile("/var/tmp/image19.png");
//multipart.addBodyPart(attachPart);
msg.setContent(multipart);
Transport.send(msg);
}
private void sendMailPaparazzi
(PaparazziEmail paparazziEmail
) throws AddressException, MessagingException,
IOException {
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "malysygnalista.pl");
props.put("mail.smtp.port", "587");
Session session
= Session.
getInstance(props,
new javax.
mail.
Authenticator() {
}
});
Message msg = new MimeMessage(session);
InternetAddress[] emails = InternetAddress.parse(paparazziEmail.email);
msg.setRecipients(Message.RecipientType.TO, emails);
msg.setSubject("Zgłoszenie z aplikacji Paparazzi");
msg.setContent("Zgłoszenie z aplikacji Paparazzi", "text/html; charset=UTF-8");
msg.
setSentDate(new Date());
MimeBodyPart messageBodyPart = new MimeBodyPart();
MimeUtility.encodeText(createEmailContentPaparazzi(paparazziEmail), "UTF-8", "B");
messageBodyPart.setContent(createEmailContentPaparazzi(paparazziEmail), "text/html; charset=UTF-8");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
//MimeBodyPart attachPart = new MimeBodyPart();
//attachPart.attachFile("/var/tmp/image19.png");
//multipart.addBodyPart(attachPart);
msg.setContent(multipart);
Transport.send(msg);
}
private String createEmailContent
(ReportEmail reportEmail
) {
List<String> urls = reportEmail.urls;
System.
out.
println(reportEmail.
urls.
size());
int number = 1;
attachments = attachments + "<a href=\"" + url + "\"> " + url + " </a><br>";
number++;
}
System.
out.
println("attachments " + attachments
);
String email
= "<html lang=\"en\" dir=\"ltr\">\n" +
" <head>\n" +
" <meta charset=\"utf-8\">\n" +
" <meta http-equiv=\"Content-Type\" content=\"text/html charset=UTF-8\" />\n" +
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">" +
" \n" +
" </head>\n" +
" <body>\n" +
" <style>\n" +
" @import url('https://fonts.googleapis.com/css?family=Titillium+Web');\n" +
" </style>\n" +
" <div style=\"background: #EAEAEA; height: 100%; font-family: 'Titillium Web';\">\n" +
" <div id=\"main\" style=\"padding-top: 70px; padding-bottom: 70px;\">\n" +
" <div style=\"height: 15px; margin: 0px 4vw 0px 4vw; background: #fff; border-radius: 10px 10px 0px 0px;\"> <div style=\"padding-top: 30px; padding-right: 50px;\"><i><span style=\"float: right;\">" + dateFormat.format(date) + ", Zgłoszenie nr " + reportEmail.reportNumber + "</span></i></div></div>\n" +
" <div style=\"background: #fff; margin: 0px 4vw 0px 4vw; padding: 40px 0px 0px 0px; border-radius:0px 0px 10px 10px; \">\n" +
" \n" +
" <div style=\"padding: 20px 20px 20px 20px; margin: 25px 15px 20px 15px; background: #FAFAFA; border: solid 1px #EEEEEE;\">\n" +
" <span><b>Do:</b></span><span style=\"margin-left: 5px\"></span><br><br>\n" +
"<span><b>" + reportEmail.institution.getName() + "</b></span><br>"
+
((reportEmail.email != null && !reportEmail.email.isEmpty())
?
("<span>" + reportEmail.institution.getAddress() + "</span><br><span>" + reportEmail.institution.getCity() + "</span><br>")
:
("<span>" + reportEmail.institution.getEmail() + "</span><br>"))
+
" </div>\n" +
" <center><span style=\"padding: 4vw 4vw 0px 4vw; font-size: 150%; font-family: 'Titillium Web';\"><b>ZAWIADOMIENIE</b><span></span></span>" +
"<br><span style=\"padding: 4vw 4vw 0px 4vw; font-size: 100%; font-family: 'Titillium Web';\">" + reportEmail.problem + "\n" +
"</span></center>\n" +
" <div style=\"padding: 20px 20px 20px 20px; margin: 25px 15px 20px 15px; background: #FAFAFA; border: solid 1px #EEEEEE;\">\n" +
(!reportEmail.description.isEmpty() ? "<span style=\"font-family: 'Titillium Web';\">Ja niżej podpisany zawiadamiam o treści:</span><br>\n" +
" <span style=\"font-family: 'Titillium Web';\"> " + reportEmail.description + "</span>\n" : "") +
// " <br><span style=\"\"><b>Lokalizacja:</b></span><a href=\"" + "https://www.google.com/maps?q="+ reportEmail.lat +","+ reportEmail.lng +"\">" + "https://www.google.com/maps?q="+ reportEmail.lat +","+ reportEmail.lng + "</a><br><br>" +
" <br><span style=\"\"><b>Lokalizacja:</b></span><a href=\"" + "https://www.google.com/maps/search/" + reportEmail.fetchedAddress + "/@" + reportEmail.lat + "," + reportEmail.lng + ",13.5z\">" + "https://www.google.com/maps/search/" + reportEmail.fetchedAddress + "/@" + reportEmail.lat + "," + reportEmail.lng + ",13.5z" + "</a><br><br>" +
" <span style=\"\"><b>Załączniki:</b></span><br>\n" + attachments +
" </div>\n" +
" <div style=\"padding:20px 20px 20px 20px; margin: 25px 15px 20px 15px;\">\n" +
" <span><b>Dane osoby składającej zawiadomienie:</b></span><span style=\"margin-left: 5px\"></span><br>\n" +
((reportEmail.firstName == null || reportEmail.anonymously) ? ("<span> Anonimowy mały sygnalista</span><br>") :
(" <span>" + reportEmail.firstName + " " + reportEmail.lastName + "</span><br>\n" +
" <span>" + reportEmail.streetName + " " + reportEmail.flat + (!reportEmail.flatNumber.isEmpty() ? "/" + reportEmail.flatNumber : "") + " " + reportEmail.city + " " + reportEmail.postCode + "</span><br>\n" +
" <span>Tel: " + reportEmail.phoneNumber + "</span><br>\n" +
" </div>\n")) +
" </div>\n" +
"<div style=\"height:55px;padding: 20px 20px 20px 20px; margin: 25px 0px 0px 0px;background:linear-gradient(to left,#f45c43 0%,#eb3349 100%);border-radius:0px 0px 10px 10px\"><center><span style=\"font-family:'Titillium Web';color:white;font-size:80%;font-style:italic\">Zawiadomienie wysłane za pośrednictwem aplikacji mały sygnalista</span><br>\n" +
"<img style=\"height: 20px; width: 90; margin-top:10px;\" src=\"https://firebasestorage.googleapis.com/v0/b/sg-app-fe55c.appspot.com/o/logo_white_v1.png?alt=media&token=c5219959-3299-4df8-a483-950034c69fb4\">" +
"</center></div>" +
" </div>\n" +
" </body>\n" +
"</html>\n";
try {
encodedBody
= new String(email.
getBytes("UTF-8"),
"UTF-8");
e.printStackTrace();
}
return encodedBody;
}
private String createEmailContentForKids
(KidsReportEmail reportEmail
) {
List<String> urls = reportEmail.attachments;
System.
out.
println(reportEmail.
attachments.
size());
int number = 1;
attachments = attachments + "<a href=\"" + url + "\"> " + url + " </a><br>";
number++;
}
System.
out.
println("attachments " + attachments
);
String email
= "<html lang=\"en\" dir=\"ltr\">\n" +
" <head>\n" +
" <meta charset=\"utf-8\">\n" +
" <meta http-equiv=\"Content-Type\" content=\"text/html charset=UTF-8\" />\n" +
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">" +
" \n" +
" </head>\n" +
" <body>\n" +
" <style>\n" +
" @import url('https://fonts.googleapis.com/css?family=Titillium+Web');\n" +
" </style>\n" +
" <div style=\"background: #EAEAEA; height: 100%; font-family: 'Titillium Web';\">\n" +
" <div id=\"main\" style=\"padding-top: 70px; padding-bottom: 70px;\">\n" +
" <div style=\"height: 15px; margin: 0px 4vw 0px 4vw; background: #fff; border-radius: 10px 10px 0px 0px;\"> <div style=\"padding-top: 30px; padding-right: 50px;\"><i><span style=\"float: right;\">" + dateFormat.format(date) + ", Zgłoszenie nr " + reportEmail.reportNumber + "</span></i></div></div>\n" +
" <div style=\"background: #fff; margin: 0px 4vw 0px 4vw; padding: 40px 0px 0px 0px; border-radius:0px 0px 10px 10px; \">\n" +
" \n" +
" <div style=\"padding: 20px 20px 20px 20px; margin: 25px 15px 20px 15px; background: #FAFAFA; border: solid 1px #EEEEEE;\">\n" +
" <span><b>Do:</b></span><span style=\"margin-left: 5px\"></span><br><br>\n" +
"<span><b>" + reportEmail.targetName + "</b></span><br>"
+
((reportEmail.kidEmail != null && !reportEmail.kidEmail.isEmpty())
?
("<span>" + reportEmail.targetAddress + "</span><br><span>" + reportEmail.targetCity + "</span><br>")
:
("<span>" + reportEmail.targetEmail + "</span><br>"))
+
" </div>\n" +
" <center><span style=\"padding: 4vw 4vw 0px 4vw; font-size: 150%; font-family: 'Titillium Web';\"><b>ZAWIADOMIENIE</b><span></span></span>" +
"</center>\n" +
" <div style=\"padding: 20px 20px 20px 20px; margin: 25px 15px 20px 15px; background: #FAFAFA; border: solid 1px #EEEEEE;\">\n" +
(!reportEmail.description.isEmpty() ? "<span style=\"font-family: 'Titillium Web';\">Ja niżej podpisany zawiadamiam o:</span><br>\n" +
" <span style=\"font-family: 'Titillium Web';\"> " + reportEmail.description + "</span>\n" : "") +
// " <br><span style=\"\"><b>Lokalizacja:</b></span><a href=\"" + "https://www.google.com/maps?q="+ reportEmail.lat +","+ reportEmail.lng +"\">" + "https://www.google.com/maps?q="+ reportEmail.lat +","+ reportEmail.lng + "</a><br><br>" +
" <br><br><span style=\"\"><b>Lokalizacja:</b></span><a href=\"" + "https://www.google.com/maps/search/" + reportEmail.reportLocation + "/@" + reportEmail.reportLocationLat + "," + reportEmail.reportLocationLng + ",13.5z\">" + "https://www.google.com/maps/search/" + reportEmail.targetAddress + "/@" + reportEmail.reportLocationLat + "," + reportEmail.reportLocationLng + ",13.5z" + "</a><br><br>" +
" <span style=\"\"><b>Załączniki:</b></span><br>\n" + attachments +
" </div>\n" +
" <div style=\"padding:20px 20px 20px 20px; margin: 25px 15px 20px 15px;\">\n" +
"<span><b>Dane osoby składającej zawiadomienie:</b></span><span style=\"margin-left: 5px\"></span><br>\n" +
((reportEmail.anonymously) ? "Anonimowy sygnalista" : reportEmail.kidName) + "<br><br>" +
" <span><b>Dane opiekuna osoby składającej zawiadomienie:</b></span><span style=\"margin-left: 5px\"></span><br>\n" +
((reportEmail.parentName == null || reportEmail.parentName == " " || reportEmail.parentName == "" || reportEmail.anonymously) ? ("<span>Dane ukryte</span><br>") :
(" <span>" + reportEmail.parentName + "</span><br>\n" +
" <span>" + reportEmail.parentAddress + "\n" + reportEmail.parentCity + "</span><br>\n" +
" <span>Tel: " + reportEmail.targetPhoneNumber + "</span><br>\n" +
" </div>\n")) +
" </div>\n" +
"<div style=\"height:55px;padding: 20px 20px 20px 20px; margin: 25px 0px 0px 0px;background:linear-gradient(to left,#f45c43 0%,#eb3349 100%);border-radius:0px 0px 10px 10px\"><center><span style=\"font-family:'Titillium Web';color:white;font-size:80%;font-style:italic\">Zawiadomienie wysłane za pośrednictwem aplikacji sygnalista</span><br>\n" +
"<img style=\"height: 20px; width: 90; margin-top:10px;\" src=\"https://firebasestorage.googleapis.com/v0/b/sygnalistakids-41d56.appspot.com/o/logo.png?alt=media&token=040fd1f2-dff2-4a7d-811f-a0c348ff2e0d\">" +
"</center></div>" +
" </div>\n" +
" </body>\n" +
"</html>\n";
try {
encodedBody
= new String(email.
getBytes("UTF-8"),
"UTF-8");
e.printStackTrace();
}
return encodedBody;
}
private String createEmailContentPaparazzi
(PaparazziEmail paparazziEmail
) {
List<String> urls = paparazziEmail.attachments;
System.
out.
println(paparazziEmail.
attachments.
size());
int number = 1;
attachments = attachments + "<a href=\"" + url + "\"> " + url + " </a><br>";
number++;
}
System.
out.
println("attachments " + attachments
);
String email
= "<html lang=\"en\" dir=\"ltr\">\n" +
" <head>\n" +
" <meta charset=\"utf-8\">\n" +
" <meta http-equiv=\"Content-Type\" content=\"text/html charset=UTF-8\" />\n" +
" <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">" +
" \n" +
" </head>\n" +
" <body>\n" +
" <style>\n" +
" @import url('https://fonts.googleapis.com/css?family=Titillium+Web');\n" +
" </style>\n" +
" <div style=\"background: #EAEAEA; height: 100%; font-family: 'Titillium Web';\">\n" +
" <div id=\"main\" style=\"padding-top: 70px; padding-bottom: 70px;\">\n" +
" <div style=\"height: 15px; margin: 0px 4vw 0px 4vw; background: #fff; border-radius: 10px 10px 0px 0px;\"> <div style=\"padding-top: 30px; padding-right: 50px;\"><i><span style=\"float: right;\">" + dateFormat.format(date) + ", Materiał nr " + paparazziEmail.reportNumber + "</span></i></div></div>\n" +
" <div style=\"background: #fff; margin: 0px 4vw 0px 4vw; padding: 40px 0px 0px 0px; border-radius:0px 0px 10px 10px; \">\n" +
" <div style=\"padding: 20px 20px 20px 20px; margin: 25px 15px 20px 15px; background: #FAFAFA; border: solid 1px #EEEEEE;\">\n" +
" <span><b>Do:</b></span><span style=\"margin-left: 5px\"></span><br><br>\n" +
"<span><b>" + paparazziEmail.name + "</b></span><br>"
+
"<span>" + paparazziEmail.email + "</span><br><span>"
+
" </div>\n" +
" <div style=\"padding: 20px 20px 20px 20px; margin: 25px 15px 20px 15px; background: #FAFAFA; border: solid 1px #EEEEEE;\">\n" +
(!paparazziEmail.description.isEmpty() ? "<span style=\"font-family: 'Titillium Web';\">Opis materiału:</span><br>\n" +
" <span style=\"font-family: 'Titillium Web';\"> " + paparazziEmail.description + "</span>\n" : "") +
// " <br><span style=\"\"><b>Lokalizacja:</b></span><a href=\"" + "https://www.google.com/maps?q="+ reportEmail.lat +","+ reportEmail.lng +"\">" + "https://www.google.com/maps?q="+ reportEmail.lat +","+ reportEmail.lng + "</a><br><br>" +
" <br><span style=\"\"><b>Lokalizacja:</b></span><a href=\"" + "https://www.google.com/maps/search/" + paparazziEmail.address + "/@" + paparazziEmail.reportLocationLat + "," + paparazziEmail.reportLocationLng + ",13.5z\">" + "https://www.google.com/maps/search/" + paparazziEmail.address + "/@" + paparazziEmail.reportLocationLat + "," + paparazziEmail.reportLocationLng + ",13.5z" + "</a><br><br>" +
" <span style=\"\"><b>Załączniki:</b></span><br>\n" + attachments +
" </div>\n" +
" <div style=\"padding:20px 20px 20px 20px; margin: 25px 15px 20px 15px;\">\n" +
" <span><b>Dane osoby składającej materiał:</b></span><span style=\"margin-left: 5px\"></span><br>\n" +
((paparazziEmail.firstName == null || paparazziEmail.anonymously) ? ("<span>Użytkownik anonimowy</span><br>") :
(" <span>" + paparazziEmail.firstName + " " + paparazziEmail.lastName + "</span><br>\n" +
" <span>" + paparazziEmail.streetName + " " + paparazziEmail.homeNumber + (!paparazziEmail.flatNumber.isEmpty() ? "/" + paparazziEmail.flatNumber : "") + " " + paparazziEmail.city + " " + paparazziEmail.postCode + "</span><br>\n" +
" <span>Tel: " + paparazziEmail.phoneNumber + "</span><br>\n" +
"<br><br><span>Numer konta: " + paparazziEmail.bankAccount + "</span><br><br>" +
(paparazziEmail.publishing ? "<span>Wyrażono zgodę na publikację materiału</span><br>" : "<span>Nie wyrażono zgody na publikację materiału</span><br>") +
" </div>\n")) +
" </div>\n" +
"<div style=\"height:55px;padding: 20px 20px 20px 20px; margin: 25px 0px 0px 0px;background:#000;border-radius:0px 0px 10px 10px\"><center><span style=\"font-family:'Titillium Web';color:white;font-size:80%;font-style:italic\">Materiał wysłany za pośrednictwem aplikacji Paparazzi</span><br>\n" +
"<img style=\"height: 20px; width: 90; margin-top:10px;\" src=\"https://firebasestorage.googleapis.com/v0/b/paparazzi-e9d73.appspot.com/o/Path%2014.png?alt=media&token=45342157-dfbc-4238-9a23-83b68971ca11\">" +
"</center></div>" +
" </div>\n" +
" </body>\n" +
"</html>\n";
try {
encodedBody
= new String(email.
getBytes("UTF-8"),
"UTF-8");
e.printStackTrace();
}
return encodedBody;
}
private String determineReportType
(int type
) {
if (type == 2) {
return "Negatywne";
} else if (type == 1) {
return "Pozytywne";
}
return "";
}
}