view src/nabble/view/web/embed/EmbedOptions.java @ 19:18cf4872fd7f

remove anonymous posting
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 29 May 2020 22:58:25 -0600
parents 7ecd1a4ef557
children
line wrap: on
line source


package nabble.view.web.embed;

import fschmidt.util.servlet.AuthorizingServlet;
import nabble.model.ModelHome;
import nabble.model.Node;
import nabble.model.User;
import nabble.model.Site;
import nabble.view.lib.EmbedUtils;
import nabble.view.lib.Jtp;
import nabble.view.lib.Shared;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

	
public class EmbedOptions extends HttpServlet implements AuthorizingServlet {

	public String getAuthorizationKey(HttpServletRequest request) throws ServletException {
		Site site = Jtp.getSite(request);
		return site==null ? null : Jtp.getReadAuthorizationKey( site.getNode(Jtp.getLong(request,"node")) );
	}

	public boolean authorize(String key,HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
		return Jtp.authorizeForRead(key,request,response); 
	}

	protected void service(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException
	{
		PrintWriter out = response.getWriter();
		String context = request.getContextPath();
		Site site = Jtp.getSite(request);
		if( site == null )
			return;
		String nodeId = request.getParameter("node");
		if( nodeId == null )
			return;
		Node node = site.getNode(Long.valueOf(nodeId));
		if (node == null)
			return;

		boolean isForum = node.getKind() == Node.Kind.APP;

		User visitor = Jtp.getUser(request);

		boolean allowed = Jtp.canBeEditedBy(node,visitor);
		if (!allowed && isForum) {
			Jtp.login("Only administrators can proceed in this area.", request, response);
			return;
		}

		String action = request.getParameter("action");
		if ("save".equals(action) && "POST".equals(request.getMethod())) {
			String url = request.getParameter("url");
			String option = request.getParameter("option");
			String value = "this".equals(option)? url : null;
			node.setEmbeddingUrl(value);
			if (value != null)
				response.sendRedirect(Jtp.path(node));
			else
				Shared.javascriptRedirect(request, response, Jtp.path(node), null, true);
		}
		
		out.print( "\r\n<html>\r\n	<head>\r\n		<meta name=\"robots\" content=\"noindex,nofollow\"/>\r\n		" );
 Shared.title(request, response, "Embedding Options"); 
		out.print( "\r\n	</head>\r\n	<body>\r\n		" );
 Shared.minHeader(request,response, node); 
		out.print( "\r\n		" );
 Shared.editHeader(node.getSubjectHtml(), "Embedding Options", out); 
		out.print( "\r\n\r\n		<div class=\"second-font field-title\">Javascript Code</div>\r\n		<div class=\"weak-color\" style=\"margin-left:1.5em\">\r\n			To add this " );
		out.print( (isForum? Jtp.viewName(node).toLowerCase() : "topic") );
		out.print( " to your website, copy and paste the following code on your HTML page:<br/>\r\n			<textarea style=\"height:3.5em;width:85%;margin:.3em .3em .3em 0;font-size:80%\" readonly=\"true\" onClick=\"this.focus();this.select();\">" );
		out.print( (isForum? EmbedUtils.getForumSnippet(request, node) : EmbedUtils.getTopicSnippet(request, node)) );
		out.print( "</textarea>\r\n			<br>You can embed this " );
		out.print( (isForum? Jtp.viewName(node).toLowerCase():"topic") );
		out.print( " in more than one website.\r\n			<br>We suggest that you use a custom domain name to avoid third-party cookie problems.\r\n			<br>Please check the <a href=\"" );
		out.print( (context) );
		out.print( "/help/Answer.jtp?id=36\">Nabble Help</a> for more information.\r\n		</div>\r\n\r\n		" );
 if (isForum) { 
		out.print( "\r\n		<div class=\"second-font field-title\">Redirect Users</div>\r\n		<div id=\"more\" class=\"weak-color\" style=\"margin-left:1.5em\">\r\n			Redirect options are available only when the " );
		out.print( (Jtp.viewName(node).toLowerCase()) );
		out.print( " is embedded.\r\n		</div>\r\n\r\n		<form id=\"settings\" method=\"post\" action=\"/embed/EmbedOptions.jtp\" accept-charset=\"UTF-8\" style=\"display:none\">\r\n			<input type=\"hidden\" name=\"action\" value=\"save\" />\r\n			<input type=\"hidden\" name=\"node\" value=\"" );
		out.print( (node.getId()) );
		out.print( "\" />\r\n			<input type=\"hidden\" id=\"url\" name=\"url\" value=\"\" />\r\n\r\n			<div class=\"weak-color\" style=\"margin:0 0 1em 1.5em\">\r\n				Your embedded " );
		out.print( (Jtp.viewName(node).toLowerCase()) );
		out.print( " is hosted on Nabble at this URL: <b>" );
		out.print( (Jtp.url(node)) );
		out.print( "</b><br>\r\n\r\n				<input type=\"radio\" id=\"o1\" name=\"option\" value=\"nabble\"></input>\r\n				<label for=\"o1\">Allow users to view this " );
		out.print( (Jtp.viewName(node).toLowerCase()) );
		out.print( " without embedding.</label><br/>\r\n\r\n				<input type=\"radio\" id=\"o2\" name=\"option\" value=\"this\"></input>\r\n				<label for=\"o2\">Redirect them to: <span id=\"embedding-url\" style=\"font-weight:bold\"></span>.</label><br/>\r\n\r\n				<span id=\"radio3\" style=\"display:none\">\r\n					<input type=\"radio\" id=\"o3\" name=\"option\" value=\"that\"></input>\r\n					<label for=\"o3\" title=\"\">Redirect them to: <span id=\"default-url\" style=\"font-weight:bold\"></span>.</label><br/>\r\n				</span>\r\n			</div>\r\n			<a href=\"" );
		out.print( (context) );
		out.print( "/help/Answer.jtp?id=40\">Learn More</a>\r\n			<div style=\"margin-top:1.4em\">\r\n				<input type=\"submit\" value=\"Save Changes\" /> or <a href=\"" );
		out.print( (Jtp.path(node)) );
		out.print( "\">Go back to the " );
		out.print( (Jtp.viewName(node).toLowerCase()) );
		out.print( "</a>\r\n			</div>\r\n		</form>\r\n		" );
 } 
		out.print( "\r\n		\r\n		" );
 String embedDefaultUrl = node.getEmbeddingUrl(); 
		out.print( "\r\n		<script type=\"text/javascript\">\r\n			var defaultUrl = \"" );
		out.print( (Jtp.hideNull(embedDefaultUrl)) );
		out.print( "\";\r\n			$(document).ready(function() {\r\n				if (Nabble.isEmbedded) {\r\n					$('#settings').show();\r\n					$('#more').hide();\r\n					\r\n					$('#url').val(Nabble.embeddingUrl);\r\n					$('#embedding-url').html(Nabble.embeddingUrl);\r\n\r\n					if (defaultUrl == \"\") {\r\n						$('#o1').attr('checked', 'y');\r\n					} else if (Nabble.embeddingUrl == defaultUrl) {\r\n						$('#o2').attr('checked', 'y');\r\n					} else {\r\n						$('#radio3').show();\r\n						$('#default-url').html(defaultUrl);\r\n						$('#o3').attr('checked', 'y');								\r\n					}\r\n				}\r\n			});\r\n		</script>\r\n\r\n		" );
 Shared.footer(request, response); 
		out.print( "\r\n		" );
 Shared.analytics(request,response); 
		out.print( "\r\n	</body>\r\n</html>\r\n" );

	}
}