Java tutorial
/* * Copyright (C) 2015, 2016 WTFDYUM * * This file is part of the WTFDYUM project. * * 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 com.jeanchampemont.wtfdyum.web; import com.jeanchampemont.wtfdyum.dto.Event; import com.jeanchampemont.wtfdyum.dto.Principal; import com.jeanchampemont.wtfdyum.dto.type.EventType; import com.jeanchampemont.wtfdyum.service.AuthenticationService; import com.jeanchampemont.wtfdyum.service.PrincipalService; import com.jeanchampemont.wtfdyum.service.TwitterService; import com.jeanchampemont.wtfdyum.service.UserService; import com.jeanchampemont.wtfdyum.utils.WTFDYUMException; import com.jeanchampemont.wtfdyum.utils.WTFDYUMExceptionType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; 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.view.RedirectView; import twitter4j.auth.AccessToken; import twitter4j.auth.RequestToken; import javax.servlet.http.HttpServletRequest; /** * WTFDYUM Main controller. */ @Controller public class MainController { static final String SESSION_REQUEST_TOKEN = "requestToken"; @Autowired private TwitterService twitterService; @Autowired private PrincipalService principalService; @Autowired private AuthenticationService authenticationService; @Autowired private UserService userService; @Value("${wtfdyum.max-members}") private int maxMembers; @RequestMapping(value = "/", method = RequestMethod.GET) public String index() { return "index"; } @RequestMapping(value = "/signin", method = RequestMethod.GET) public RedirectView signin(final HttpServletRequest request) throws WTFDYUMException { if (authenticationService.isAuthenticated()) { return new RedirectView("/user", true); } if (maxMembers > 0 && principalService.countMembers() >= maxMembers) { throw new WTFDYUMException(WTFDYUMExceptionType.MEMBER_LIMIT_EXCEEDED); } final RequestToken requestToken = twitterService.signin("/signin/callback"); request.getSession().setAttribute(SESSION_REQUEST_TOKEN, requestToken); return new RedirectView(requestToken.getAuthenticationURL()); } @RequestMapping(value = "/signin/callback", method = RequestMethod.GET) public RedirectView signinCallback(@RequestParam("oauth_verifier") final String verifier, final HttpServletRequest request) throws WTFDYUMException { final RequestToken requestToken = (RequestToken) request.getSession().getAttribute(SESSION_REQUEST_TOKEN); request.getSession().removeAttribute(SESSION_REQUEST_TOKEN); final AccessToken accessToken = twitterService.completeSignin(requestToken, verifier); if (principalService.get(accessToken.getUserId()) == null) { userService.addEvent(accessToken.getUserId(), new Event(EventType.REGISTRATION, null)); } final Principal user = new Principal(accessToken.getUserId(), accessToken.getToken(), accessToken.getTokenSecret()); principalService.saveUpdate(user); authenticationService.authenticate(user); return new RedirectView("/user", true); } }