summaryrefslogblamecommitdiffstats
path: root/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/web/WebRpc.java
blob: 0e47994a1db287e3fe6553a83d9985fc4d81e88d (plain) (tree)
1
2
3
4
5
6
7
8
9
10

                                 
                                    

                           

                                         


                                                  
                         




                                                          

                                                             
                                                            
                                            
                                                           
                                                        
                                                        
                                                                    

                                                                     

                             
                               



                                        

                                                                               
                                                
                 


                                                  
                                                      

                                                  


                                                       


                                                         


                                            




                                                                                                               



                                                                               



















                                                                                                                     

         


                                                           



                                                                       
                                                                                                                         

         


                                               













                                                                        
                                                                                                    















                                                                                                                       






                                                                                                                

                                
                                    

                                                        
                                                                                                    







                                                                           
                                                                                                        
                 
                     

                                                                                                                           



                                                                                                        
         
 
package org.openslx.bwlp.sat.web;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.util.HashMap;
import java.util.Map;

import javax.security.auth.login.LoginException;

import org.apache.commons.io.output.ByteArrayOutputStream;
import org.openslx.bwlp.sat.database.mappers.DbConfiguration;
import org.openslx.bwlp.sat.mail.MailTemplate;
import org.openslx.bwlp.sat.mail.MailTemplatePlain.Template;
import org.openslx.bwlp.sat.mail.SmtpMailer;
import org.openslx.bwlp.sat.mail.SmtpMailer.EncryptionMode;
import org.openslx.bwlp.sat.maintenance.DeleteOldImages;
import org.openslx.bwlp.sat.maintenance.ImageValidCheck;
import org.openslx.bwlp.sat.maintenance.ImageValidCheck.CheckResult;
import org.openslx.bwlp.sat.maintenance.ImageValidCheck.SubmitResult;
import org.openslx.util.Json;
import org.openslx.util.Util;

import fi.iki.elonen.NanoHTTPD;
import fi.iki.elonen.NanoHTTPD.Response;

public class WebRpc {

	public static Response handle(String uri, Map<String, String> params) {
		if (uri.equals("mailtest")) {
			return mailTest(params);
		}
		if (uri.equals("delete-images")) {
			return deleteImages();
		}
		if (uri.equals("start-image-check")) {
			return checkImage(params);
		}
		if (uri.equals("query-image-check")) {
			return queryImageCheck(params);
		}
		if (uri.equals("reset-mail-templates")) {
			return resetMailTemplates();
		}
		return WebServer.notFound();
	}

	private static Response resetMailTemplates() {
		DbConfiguration.updateMailTemplates(true);
		return new NanoHTTPD.Response(NanoHTTPD.Response.Status.OK, "text/plain; charset=utf-8", "OK");
	}

	private static Response checkImage(Map<String, String> params) {
		String versionId = params.get("versionid");
		if (versionId == null)
			return WebServer.badRequest("Missing versionid param");
		versionId = versionId.toLowerCase();
		boolean checkHashes = Boolean.valueOf(params.get("hash"));
		boolean updateState = Boolean.valueOf(params.get("update"));
		SubmitResult res = ImageValidCheck.check(versionId, checkHashes, updateState);
		return new NanoHTTPD.Response(NanoHTTPD.Response.Status.OK, "text/plain; charset=utf-8", res.name());
	}

	private static Response queryImageCheck(Map<String, String> params) {
		String versionId = params.get("versionid");
		Map<String, CheckResult> result;
		if (versionId == null) {
			result = ImageValidCheck.getAll();
		} else {
			versionId = versionId.toLowerCase();
			CheckResult res = ImageValidCheck.getStatus(versionId);
			result = new HashMap<>();
			result.put(versionId, res);
		}
		return new NanoHTTPD.Response(NanoHTTPD.Response.Status.OK, "application/json; charset=utf-8",
				Json.serialize(result));
	}

	/**
	 * Delete all image versions marked as WANT_DELETE.
	 */
	private static Response deleteImages() {
		StringBuilder res = DeleteOldImages.hardDeleteImages();
		if (res == null)
			return WebServer.internalServerError();
		return new NanoHTTPD.Response(NanoHTTPD.Response.Status.OK, "text/plain; charset=utf-8", res.toString());
	}

	/**
	 * Send test mail to given SMTP config.
	 */
	private static Response mailTest(Map<String, String> params) {
		SmtpMailer smtpc;
		String recipient = params.get("recipient");
		String host = params.get("host");
		String senderAddress = params.get("senderAddress");
		String serverName = params.get("serverName");
		String replyTo = params.get("replyTo");
		String username = params.get("username");
		String password = params.get("password");
		int port = Util.parseInt(params.get("port"), 0);
		EncryptionMode ssl;
		try {
			ssl = EncryptionMode.valueOf(params.get("ssl"));
		} catch (Exception e) {
			return WebServer.badRequest("Invalid SSL mode '" + params.get("ssl") + "'");
		}
		// Validate
		if (port < 1 || port > 65535)
			return WebServer.badRequest("Invalid port");
		if (recipient == null)
			return WebServer.badRequest("Missing recipient");
		if (host == null)
			return WebServer.badRequest("Missing host");
		if (senderAddress == null)
			return WebServer.badRequest("Missing senderAddress");
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		try {
			smtpc = new SmtpMailer(host, port, ssl, senderAddress, serverName, replyTo, username, password,
					new PrintStream(baos));
		} catch (InvalidKeyException | LoginException | NoSuchAlgorithmException | InvalidKeySpecException
				| IOException e) {
			try {
				baos.write("Could not connect to mail server".getBytes(StandardCharsets.UTF_8));
				e.printStackTrace(new PrintWriter(baos));
			} catch (IOException e1) {
			}
			smtpc = null;
		}
				

		boolean ret = false;
		if (smtpc != null) {			

			MailTemplate template = DbConfiguration.getMailTemplate(Template.TEST_MAIL);
			Map<String, String> templateArgs = new HashMap<>();
			templateArgs.put("host", host);
			templateArgs.put("port", String.valueOf(port));
			templateArgs.put("ssl", ssl.toString());
			templateArgs.put("username", username);

			String msg = template.format(templateArgs);

			ret = smtpc.send(recipient, "bwLehrpool Mail Test", msg, "<sat.bwlehrpool.de>");
		}
		try {
			baos.write(("\n\n-----------------------------------------\nTestergebnis: " + (ret ? "" : "nicht ")
					+ "erfolgreich").getBytes(StandardCharsets.UTF_8));
		} catch (IOException e) {
		}
		return new NanoHTTPD.Response(NanoHTTPD.Response.Status.OK, "text/plain; charset=utf-8",
				new ByteArrayInputStream(baos.toByteArray()));
	}
}