/*
* Copyright 1998-2014 Linux.org.ru
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package ru.org.linux.auth;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.ServletRequestUtils;
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.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;
import ru.org.linux.site.Template;
import ru.org.linux.user.User;
import ru.org.linux.user.UserErrorException;
import javax.servlet.http.HttpServletRequest;
import java.net.URLEncoder;
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Date;
@Controller
public class BanIPController {
private IPBlockDao ipBlockDao;
@Autowired
public void setIpBlockDao(IPBlockDao ipBlockDao) {
this.ipBlockDao = ipBlockDao;
}
@RequestMapping(value="/banip.jsp", method= RequestMethod.POST)
public ModelAndView banIP(
HttpServletRequest request,
@RequestParam("ip") String ip,
@RequestParam("reason") String reason,
@RequestParam("time") String time,
@RequestParam(value="allow_posting", required = false, defaultValue="false") boolean allowPosting,
@RequestParam(value="captcha_required", required = false, defaultValue="false") boolean captchaRequired
) throws Exception {
Template tmpl = Template.getTemplate(request);
if (!tmpl.isModeratorSession()) {
throw new IllegalAccessException("Not authorized");
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
if ("hour".equals(time)) {
calendar.add(Calendar.HOUR_OF_DAY, 1);
} else if ("day".equals(time)) {
calendar.add(Calendar.DAY_OF_MONTH, 1);
} else if ("month".equals(time)) {
calendar.add(Calendar.MONTH, 1);
} else if ("3month".equals(time)) {
calendar.add(Calendar.MONTH, 3);
} else if ("6month".equals(time)) {
calendar.add(Calendar.MONTH, 6);
} else if ("remove".equals(time)) {
} else if ("custom".equals(time)) {
int days = ServletRequestUtils.getRequiredIntParameter(request, "ban_days");
if (days <= 0 || days > 180) {
throw new UserErrorException("Invalid days count");
}
calendar.add(Calendar.DAY_OF_MONTH, days);
}
Timestamp ts;
if ("unlim".equals(time)) {
ts = null;
} else {
ts = new Timestamp(calendar.getTimeInMillis());
}
User user = tmpl.getCurrentUser();
user.checkCommit();
ipBlockDao.blockIP(ip, user, reason, ts, allowPosting, captchaRequired);
return new ModelAndView(new RedirectView("sameip.jsp?ip=" + URLEncoder.encode(ip, "UTF-8")));
}
}