package de.passau.uni.sec.compose.id.rest.controller;
import java.util.Collection;
import java.util.LinkedList;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.util.UriComponentsBuilder;
import de.passau.uni.sec.compose.id.common.exception.IdManagementException;
import de.passau.uni.sec.compose.id.core.domain.IPrincipal;
import de.passau.uni.sec.compose.id.core.event.CreateUserEvent;
import de.passau.uni.sec.compose.id.core.event.DeleteUserEvent;
import de.passau.uni.sec.compose.id.core.event.UpdateUserEvent;
import de.passau.uni.sec.compose.id.core.service.UpdateReputation;
import de.passau.uni.sec.compose.id.core.service.UserService;
import de.passau.uni.sec.compose.id.core.service.security.RestAuthentication;
import de.passau.uni.sec.compose.id.rest.messages.UpdateReputationMessage;
import de.passau.uni.sec.compose.id.rest.messages.UserCreateMessage;
import de.passau.uni.sec.compose.id.rest.messages.UserResponseMessage;
@Controller
@RequestMapping("/idm/private/reputation")
@PropertySource("classpath:private-api.propertes")
public class ReputationCommandsController {
private static Logger LOG = LoggerFactory.getLogger(ReputationCommandsController.class);
@Autowired
private UpdateReputation reputation;
private String token = null;
@Resource
private Environment env;
/**
* Create a new user
* @param message containing the new user
* @return userCreatedMessage with the appropiate data or an error otherwise
*/
@RequestMapping(value = "/", method = RequestMethod.PUT, consumes = "application/json")
@ResponseBody
public ResponseEntity<Object> createUser( @RequestHeader("Authorization") String token,
@RequestBody UpdateReputationMessage[] updates,UriComponentsBuilder builder,HttpServletRequest req) {
HttpHeaders headers = new HttpHeaders();
try{
if(env.getProperty("private.api.token").equals(token)){
for(UpdateReputationMessage r: updates)
reputation.updateReputation(r.getEntity_type(), r.getId(),r.getReputation());
}
return new ResponseEntity<Object>( HttpStatus.OK);
}
catch(IdManagementException idm){
//since the creation of the exception generated the log entries for the stacktrace, we don't do it again here
return new ResponseEntity<Object>(idm.getErrorAsMap(), headers, HttpStatus.valueOf(idm.getHTTPErrorCode()));
}
catch(Exception e)
{
String s = IdManagementException.getStackTrace(e);
LOG.error(s);
return new ResponseEntity<Object>(null, headers, HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}