fi.hsl.parkandride.front.UserController.java Source code

Java tutorial

Introduction

Here is the source code for fi.hsl.parkandride.front.UserController.java

Source

// Copyright  2015 HSL <https://www.hsl.fi>
// This program is dual-licensed under the EUPL v1.2 and AGPLv3 licenses.

package fi.hsl.parkandride.front;

import fi.hsl.parkandride.core.domain.*;
import fi.hsl.parkandride.core.service.AuthenticationService;
import fi.hsl.parkandride.core.service.UserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.util.UriComponentsBuilder;

import javax.annotation.Resource;

import static fi.hsl.parkandride.front.UrlSchema.*;
import static org.springframework.http.HttpStatus.CREATED;
import static org.springframework.http.HttpStatus.OK;
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
import static org.springframework.web.bind.annotation.RequestMethod.*;

@RestController
public class UserController {

    private final Logger log = LoggerFactory.getLogger(UserController.class);

    @Resource
    AuthenticationService authenticationService;

    @Resource
    UserService userService;

    @RequestMapping(method = POST, value = LOGIN, produces = APPLICATION_JSON_VALUE)
    public Login login(@RequestBody Credentials credentials) {
        log.info("login({})", urlEncode(credentials.getUsername()));
        return authenticationService.login(credentials.username, credentials.password);
    }

    @RequestMapping(method = GET, value = USERS, produces = APPLICATION_JSON_VALUE)
    public ResponseEntity<SearchResults<User>> findUsers(User actor) {
        log.info("findUsers");
        UserSearch search = new UserSearch();
        search.setOperatorId(actor.operatorId);
        SearchResults<User> results = userService.findUsers(search, actor);
        return new ResponseEntity<>(results, OK);
    }

    @RequestMapping(method = POST, value = USERS, produces = APPLICATION_JSON_VALUE)
    public ResponseEntity<User> createUser(@RequestBody NewUser newUser, User actor, UriComponentsBuilder builder) {
        log.info("createUser({}, {}, {})", newUser.role, urlEncode(newUser.username), newUser.operatorId);
        User createdUser = userService.createUser(newUser, actor);
        log.info("createUser({})", createdUser.id);

        HttpHeaders headers = new HttpHeaders();
        headers.setLocation(builder.path(USER).buildAndExpand(createdUser.id).toUri());
        return new ResponseEntity<>(createdUser, headers, CREATED);
    }

    @RequestMapping(method = PUT, value = TOKEN, produces = APPLICATION_JSON_VALUE)
    public ResponseEntity<ValueHolder<String>> resetToken(@PathVariable(USER_ID) long userId, User actor) {
        log.info("resetToken({})", userId);
        String token = userService.resetToken(userId, actor);
        return new ResponseEntity<>(ValueHolder.of(token), OK);
    }

    @RequestMapping(method = PUT, value = PASSWORD, produces = APPLICATION_JSON_VALUE)
    public void updatePassword(@PathVariable(USER_ID) long userId, @RequestBody ValueHolder<String> newPassword,
            User actor) {
        log.info("updatePassword({})", userId);
        userService.updatePassword(userId, newPassword.value, actor);
    }

    @RequestMapping(method = DELETE, value = USER, produces = APPLICATION_JSON_VALUE)
    public void deleteUser(@PathVariable(USER_ID) long userId, User actor) {
        log.info("deleteUser({})", userId);
        userService.deleteUser(userId, actor);
    }
}