/* ==================================================================
* UserAuthTokenController.java - Dec 12, 2012 11:51:19 AM
*
* Copyright 2007-2012 SolarNetwork.net Dev Team
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 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
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
* 02111-1307 USA
* ==================================================================
*/
package net.solarnetwork.central.reg.web;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import net.solarnetwork.central.domain.Aggregation;
import net.solarnetwork.central.security.BasicSecurityPolicy;
import net.solarnetwork.central.security.SecurityPolicy;
import net.solarnetwork.central.security.SecurityUser;
import net.solarnetwork.central.security.SecurityUtils;
import net.solarnetwork.central.user.biz.UserBiz;
import net.solarnetwork.central.user.domain.UserAuthToken;
import net.solarnetwork.central.user.domain.UserAuthTokenStatus;
import net.solarnetwork.central.user.domain.UserAuthTokenType;
import net.solarnetwork.web.domain.Response;
/**
* Controller for user authorization ticket management.
*
* @author matt
* @version 1.2
*/
@Controller
@RequestMapping("/sec/auth-tokens")
public class UserAuthTokenController extends ControllerSupport {
private final UserBiz userBiz;
@Autowired
public UserAuthTokenController(UserBiz userBiz) {
super();
this.userBiz = userBiz;
}
@ModelAttribute("policyAggregations")
public Set<Aggregation> policyAggregations() {
return EnumSet.of(Aggregation.FiveMinute, Aggregation.TenMinute, Aggregation.FifteenMinute,
Aggregation.ThirtyMinute, Aggregation.Hour, Aggregation.Day, Aggregation.Week,
Aggregation.Month, Aggregation.RunningTotal);
}
@RequestMapping(value = "", method = RequestMethod.GET)
public String view(Model model) {
final SecurityUser user = SecurityUtils.getCurrentUser();
List<UserAuthToken> tokens = userBiz.getAllUserAuthTokens(user.getUserId());
if ( tokens != null ) {
List<UserAuthToken> userTokens = new ArrayList<UserAuthToken>(tokens.size());
List<UserAuthToken> dataTokens = new ArrayList<UserAuthToken>(tokens.size());
for ( UserAuthToken token : tokens ) {
switch (token.getType()) {
case User:
userTokens.add(token);
break;
case ReadNodeData:
dataTokens.add(token);
break;
}
}
model.addAttribute("userAuthTokens", userTokens);
model.addAttribute("dataAuthTokens", dataTokens);
}
model.addAttribute("userNodes", userBiz.getUserNodes(user.getUserId()));
return "auth-tokens/view";
}
@RequestMapping(value = "/generateUser", method = RequestMethod.POST)
@ResponseBody
public Response<UserAuthToken> generateUserToken() {
final SecurityUser user = SecurityUtils.getCurrentUser();
UserAuthToken token = userBiz.generateUserAuthToken(user.getUserId(), UserAuthTokenType.User,
(SecurityPolicy) null);
return new Response<UserAuthToken>(token);
}
@RequestMapping(value = "/delete", method = RequestMethod.POST)
@ResponseBody
public Response<Object> deleteUserToken(@RequestParam("id") String tokenId) {
final SecurityUser user = SecurityUtils.getCurrentUser();
userBiz.deleteUserAuthToken(user.getUserId(), tokenId);
return new Response<Object>();
}
@RequestMapping(value = "/changeStatus", method = RequestMethod.POST)
@ResponseBody
public Response<Object> changeStatus(@RequestParam("id") String tokenId,
@RequestParam("status") UserAuthTokenStatus status) {
final SecurityUser user = SecurityUtils.getCurrentUser();
userBiz.updateUserAuthTokenStatus(user.getUserId(), tokenId, status);
return new Response<Object>();
}
@RequestMapping(value = "/generateData", method = RequestMethod.POST)
@ResponseBody
public Response<UserAuthToken> generateDataToken(
@RequestParam(value = "nodeId", required = false) Set<Long> nodeIds,
@RequestParam(value = "sourceId", required = false) Set<String> sourceIds,
@RequestParam(value = "minAggregation", required = false) Aggregation minAggregation,
@RequestParam(value = "nodeMetadataPath", required = false) Set<String> nodeMetadataPaths,
@RequestParam(value = "userMetadataPath", required = false) Set<String> userMetadataPaths) {
final SecurityUser user = SecurityUtils.getCurrentUser();
UserAuthToken token = userBiz.generateUserAuthToken(user.getUserId(),
UserAuthTokenType.ReadNodeData,
new BasicSecurityPolicy.Builder().withNodeIds(nodeIds).withSourceIds(sourceIds)
.withMinAggregation(minAggregation).withNodeMetadataPaths(nodeMetadataPaths)
.withUserMetadataPaths(userMetadataPaths).build());
return new Response<UserAuthToken>(token);
}
}