/**
* Copyright © ${project.inceptionYear} Instituto Superior Técnico
*
* This file is part of Fenix IST.
*
* Fenix IST is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Fenix IST 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Fenix IST. If not, see <http://www.gnu.org/licenses/>.
*/
package pt.ist.fenix.ui.spring.controller;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.http.HttpServletRequest;
import org.fenixedu.bennu.core.domain.User;
import org.fenixedu.bennu.core.groups.DynamicGroup;
import org.fenixedu.bennu.core.security.Authenticate;
import org.fenixedu.bennu.portal.servlet.PortalLayoutInjector;
import org.fenixedu.bennu.spring.I18NBean;
import org.fenixedu.bennu.spring.portal.SpringApplication;
import org.fenixedu.bennu.spring.portal.SpringFunctionality;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import pt.ist.fenixframework.Atomic;
import com.google.common.base.Charsets;
import com.google.common.hash.Hashing;
import com.google.common.io.ByteStreams;
@SpringApplication(group = "!#developers", path = "api-service-agreement", title = "api.service.agreement.title")
@SpringFunctionality(app = ApiServiceAgreementController.class, title = "api.service.agreement.title")
@Controller
@RequestMapping("/api-service-agreement")
public class ApiServiceAgreementController {
@Autowired
I18NBean i18nBean;
@RequestMapping(method = RequestMethod.GET)
public String home(Model model) {
model.addAttribute("serviceAgreement", getServiceAgreementHtml());
return "fenix-ist/public/agreeServiceAgreement";
}
@RequestMapping(method = RequestMethod.POST)
public String agree(Model model, @RequestParam Boolean agreedServiceAgreement) {
if (agreedServiceAgreement) {
addDeveloperRole(Authenticate.getUser());
return "redirect:/personal";
}
return "redirect:/api-service-agreement";
}
@Atomic
private void addDeveloperRole(User user) {
DynamicGroup.get("developers").mutator().grant(user);
}
@RequestMapping(method = RequestMethod.GET, value = "show")
public String showServiceAgreementHtml(Model model, HttpServletRequest request) {
String serviceAgreementHtml = getServiceAgreementHtml();
model.addAttribute("serviceAgreement", serviceAgreementHtml);
model.addAttribute("serviceAgreementChecksum", Hashing.md5().newHasher().putString(serviceAgreementHtml, Charsets.UTF_8)
.hash().toString());
PortalLayoutInjector.skipLayoutOn(request);
return "fenix-ist/public/showServiceAgreement";
}
private String getServiceAgreementHtml() {
final InputStream resourceAsStream = getClass().getResourceAsStream("/api/serviceAgreement.html");
if (resourceAsStream == null) {
return i18nBean.message("oauthapps.default.service.agreement");
}
try {
return new String(ByteStreams.toByteArray(resourceAsStream));
} catch (IOException e) {
return i18nBean.message("oauthapps.default.service.agreement");
}
}
}