001/*
002 * Stallion Core: A Modern Web Framework
003 *
004 * Copyright (C) 2015 - 2016 Stallion Software LLC.
005 *
006 * This program is free software: you can redistribute it and/or modify it under the terms of the
007 * GNU General Public License as published by the Free Software Foundation, either version 2 of
008 * the License, or (at your option) any later version. This program is distributed in the hope that
009 * it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
010 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
011 * License for more details. You should have received a copy of the GNU General Public License
012 * along with this program.  If not, see <http://www.gnu.org/licenses/gpl-2.0.html>.
013 *
014 *
015 *
016 */
017
018package io.stallion.forms;
019
020import com.hubspot.jinjava.interpret.JinjavaInterpreter;
021import com.hubspot.jinjava.lib.tag.Tag;
022import com.hubspot.jinjava.tree.Node;
023import com.hubspot.jinjava.tree.TagNode;
024import io.stallion.settings.Settings;
025import io.stallion.utils.Encrypter;
026import io.stallion.utils.GeneralUtils;
027
028import static io.stallion.utils.Literals.*;
029import static io.stallion.Context.*;
030
031
032public class SimpleFormTag implements Tag {
033
034    public String interpret(TagNode tagNode, JinjavaInterpreter jinjavaInterpreter) {
035        if (settings().getDisableFormSubmissions()) {
036            return "Form submissions have been disabled in settings. Form tag will not show up.";
037        }
038        StringBuilder builder = new StringBuilder();
039
040        String token = mils() + "|" + GeneralUtils.randomToken(16);
041        String encryptedToken = Encrypter.encryptString(Settings.instance().getAntiSpamSecret(), token);
042
043        builder.append("<form data-spam-token=\"" + encryptedToken
044                + "\" id=\"stallion-contact-form\" class=\"pure-form st-contacts-form\">");
045        for(Node node:tagNode.getChildren()) {
046            builder.append(node.render(jinjavaInterpreter));
047        }
048        builder.append("</form>");
049        return builder.toString();
050    }
051
052
053    public String getEndTagName() {
054        return "endform";
055    }
056
057
058    public String getName() {
059        return "simple_form";
060    }
061}
062