aboutsummaryrefslogblamecommitdiff
path: root/src/main/java/com/juick/www/WebApp.java
blob: a7c5eb8be3d854d9141ff5489157eb33ca7032a3 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
  
                                 












                                                                           
                      
 









                               
                           
                               
                            
                                    


                                                         
 
                                            
                                                          
                                                                    
                                                         
 








                                                    
                                      
                                                 




                                                                          



























                                                                            
                                               




                                                                                                             



                                                          
 



























                                                                                                  
 
/*
 * Copyright (C) 2008-2020, Juick
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package com.juick.www;

import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Stream;

import javax.inject.Inject;

import com.juick.model.Message;
import com.juick.model.Tag;
import com.juick.model.User;
import com.juick.service.TagService;
import io.pebbletemplates.pebble.PebbleEngine;
import io.pebbletemplates.pebble.template.PebbleTemplate;

import jakarta.annotation.PostConstruct;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.resource.ResourceUrlProvider;
import org.springframework.web.util.UriComponentsBuilder;

/**
 *
 * @author Ugnich Anton
 */
@Component
public class WebApp {
    @Inject
    private TagService tagService;
    @Inject
    private ResourceUrlProvider resourceUrlProvider;
    @Inject
    private PebbleEngine pebbleEngine;
    @Value("${img_url:http://localhost:8080/i/}")
    private String baseImagesUri;
    UriComponentsBuilder avatarBuilder;

    @PostConstruct
    public void init() {
        avatarBuilder = UriComponentsBuilder.fromUriString(baseImagesUri);
    }

    public List<Tag> parseTags(String tagsStr) {
        List<Tag> tags = new ArrayList<>();
        if (tagsStr != null && !tagsStr.isEmpty()) {
            Stream<String> tagsList = Arrays.stream(tagsStr.split("[ \\,]"))
                    .distinct().map( t -> {
                if (t.startsWith("*")) {
                    t = t.substring(1);
                }
                if (t.length() > 64) {
                    t = t.substring(0, 64);
                }
                return t;
            });
            tags = tagService.getTags(tagsList, true);
            while (tags.size() > 5) {
                tags.remove(5);
            }
        }
        return tags;
    }

    public String getStyleUrl() {
        return resourceUrlProvider.getForLookupPath("/style.css");
    }

    public String getScriptsUrl() {
        return resourceUrlProvider.getForLookupPath("/scripts.js");
    }
    public String getAvatarWebPath(User user) {
        String avatarUri = resourceUrlProvider.getForLookupPath(String.format("/i/a/%d.png", user.getUid()));
        if (StringUtils.isNotEmpty(avatarUri)) {
            return avatarUri;
        }
        return resourceUrlProvider.getForLookupPath("/av-96.png");
    }

    public String getAvatarUrl(User user) {
        avatarBuilder.replacePath(getAvatarWebPath(user));
        return avatarBuilder.build().toUriString();
    }

    public Optional<String> renderPlaintext(String body, String messageUrl) {
        PebbleTemplate noteTemplate = pebbleEngine.getTemplate("email/plaintext");
        Map<String, Object> context = new HashMap<>();
        context.put("messageBody", body);
        context.put("messageUrl", messageUrl);
        try {
            Writer writer = new StringWriter();
            noteTemplate.evaluate(writer, context);
            return Optional.of(writer.toString());
        } catch (IOException e) {
            return Optional.empty();
        }
    }

    public Optional<String> renderHtml(String body, String messageUrl, Message msg, String hash) {
        PebbleTemplate noteTemplate = pebbleEngine.getTemplate("email/html");
        Map<String, Object> context = new HashMap<>();
        context.put("messageBody", body);
        context.put("messageUrl", messageUrl);
        context.put("msg", msg);
        context.put("hash", hash);
        try {
            Writer writer = new StringWriter();
            noteTemplate.evaluate(writer, context);
            return Optional.of(writer.toString());
        } catch (IOException e) {
            return Optional.empty();
        }
    }
}