/**
* Balero CMS Project: Proyecto 100% Mexicano de código libre.
* Página Oficial: http://www.balerocms.com
*
* @author Anibal Gomez <anibalgomez@icloud.com>
* @copyright Copyright (C) 2015 Neblina Software. Derechos reservados.
* @license Licencia BSD; vea LICENSE.txt
*/
package com.neblina.balero.web.authorized.admin;
import com.neblina.balero.domain.Media;
import com.neblina.balero.domain.Property;
import com.neblina.balero.domain.User;
import com.neblina.balero.service.PropertyService;
import com.neblina.balero.service.UserService;
import com.neblina.balero.util.MediaManager;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.security.access.annotation.Secured;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.List;
@RestController
@RequestMapping("/admin/api")
public class AdminAPIController {
@Autowired
private PropertyService propertyService;
@Autowired
private UserService userService;
private static final Logger log = LogManager.getLogger(AdminPageController.class.getName());
@Secured("ROLE_ADMIN")
@RequestMapping("/properties")
@ResponseBody
public Property getPropertiesJSON() {
return propertyService.findOneById(1L);
}
@Secured("ROLE_ADMIN")
@RequestMapping(value = "/properties", method = RequestMethod.POST)
@ResponseBody
public HttpStatus postPropertiesJSON(@RequestParam("offline") boolean offline,
@RequestParam("multiLanguage") boolean multiLanguage) {
propertyService.setOfflineStatus(offline);
propertyService.setMultiLanguage(multiLanguage);
return HttpStatus.OK;
}
@Secured("ROLE_ADMIN")
@RequestMapping(value = "/users", method = RequestMethod.GET)
@ResponseBody
public List<User> getUsersJSON() {
return userService.findAll();
}
@Secured("ROLE_ADMIN")
@RequestMapping(value = "/profile", method = RequestMethod.GET)
@ResponseBody
public User getAdminProfileInJSON() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String username = auth.getName(); //get logged in username
return userService.findOneByUsername(username);
}
@Secured("ROLE_ADMIN")
@RequestMapping(value = "/subscribe", method = RequestMethod.POST)
@ResponseBody
public HttpStatus saveAdminSubscribebStatusToJSON() {
userService.updateSubscribedStatus();
return HttpStatus.OK;
}
@Secured("ROLE_ADMIN")
@RequestMapping(value = "/uploads", method = RequestMethod.GET)
@ResponseBody
public List<Media> getUploadsJSON() throws IOException {
MediaManager mediaManager = new MediaManager();
List<Media> list = mediaManager.retrieveImageGalleryList();
return list;
}
/**
*
* @param data Is a JSON Object.
* It Needs to be deserialized to a Java Object
* @return
*/
@Secured("ROLE_ADMIN")
@RequestMapping(value = "/uploads", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public HttpStatus deleteUploadsJSON(@RequestBody List<Media> data) {
log.debug("POST /admin/api/uploads");
MediaManager mediaManager = new MediaManager();
for(int i = 0; i < data.size(); i++) {
String fileName = data.get(i).getFileName();
try {
if(fileName.equals("bsd_daemon.png")) {
throw new Exception("Can't Delete Unit Test File (bsd_daemon.png).");
}
mediaManager.deleteResourceFile(fileName);
} catch (Exception e) {
log.debug(e.getMessage());
}
log.debug("JSON Row: " + fileName);
}
return HttpStatus.OK;
}
}