com.pepaproch.gtswsdlclient.auth.AuthTokenProviderImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.pepaproch.gtswsdlclient.auth.AuthTokenProviderImpl.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.pepaproch.gtswsdlclient.auth;

import com.pepaproch.gtswsdlclient.model.gts.AuthRequest;
import com.pepaproch.gtswsdlclient.model.gts.AuthResponse;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.client.RestTemplate;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author pepa Class responsible for retriving and caching auth token for gts
 * web service
 */
public class AuthTokenProviderImpl implements AuthTokenProvider, AuthTokenRevokedListener {

    public static final String AUTH_PATH = "/v1/auth";
    private final String baseUrl;
    private final RestTemplate restTemplate;
    private final AuthRequest authorisation;
    private final Integer validSeconds;
    private volatile AuthToken authToken;

    /**
     *
     * @param baseUrl
     * @param user
     * @param password
     * @param restTemplate
     * @param validSeconds
     */
    public AuthTokenProviderImpl(String baseUrl, String user, String password, RestTemplate restTemplate,
            Integer validSeconds) {
        this.baseUrl = baseUrl;
        this.restTemplate = restTemplate;
        List<HttpMessageConverter<?>> list = new ArrayList<>();
        list.add(new MappingJackson2HttpMessageConverter());
        restTemplate.setMessageConverters(list);
        authorisation = new AuthRequest(user, password);
        authToken = new AuthToken();
        this.validSeconds = validSeconds;
    }

    private AuthResponse getAuthResponse() {
        System.out.println("POST FOR OBJECT:");
        return restTemplate.postForObject(baseUrl + AUTH_PATH, authorisation, AuthResponse.class);

    }

    @Override
    public AuthToken getAuthorisationToken() {
        if (!this.authToken.isValid()) {
            System.out.println("TOKEN: " + this.authToken.getToken() + " RENEWING TOKEN");
            renewToken();
        }
        return this.authToken;

    }

    private void renewToken() {
        AuthResponse response = getAuthResponse();
        AuthToken newToken = new AuthToken(response.getAccessToken(), validSeconds);
        this.authToken = newToken;
        System.out.println("NEW TOKEN: " + this.authToken.getToken());
    }

    @Override
    public synchronized void revoked(AuthToken authToken) {
        if (this.authToken.getToken().equals(authToken.getToken())) {
            this.authToken.setRevoked(Boolean.TRUE);
        }
    }
}