001/*
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements.  See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership.  The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License.  You may obtain a copy of the License at
009 *
010 *   http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing,
013 * software distributed under the License is distributed on an
014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015 * KIND, either express or implied.  See the License for the
016 * specific language governing permissions and limitations
017 * under the License.
018 */
019package org.apache.hadoop.hdfs.web.oauth2;
020
021import org.apache.hadoop.classification.InterfaceAudience;
022import org.apache.hadoop.classification.InterfaceStability;
023import org.apache.hadoop.conf.Configurable;
024import org.apache.hadoop.conf.Configuration;
025
026import java.io.IOException;
027
028/**
029 * Provide an OAuth2 access token to be used to authenticate http calls in
030 * WebHDFS.
031 */
032@InterfaceAudience.Public
033@InterfaceStability.Evolving
034public abstract class AccessTokenProvider implements Configurable {
035  private Configuration conf;
036
037  /**
038   * Obtain the access token that should be added to http connection's header.
039   * Will be called for each connection, so implementations should be
040   * performant. Implementations are responsible for any refreshing of
041   * the token.
042   *
043   * @return Access token to be added to connection header.
044   */
045  public abstract String getAccessToken() throws IOException;
046
047  /**
048   * Return the conf.
049   *
050   * @return the conf.
051   */
052  @Override
053  public Configuration getConf() {
054    return conf;
055  }
056
057  /**
058   * Set the conf.
059   *
060   * @param configuration  New configuration.
061   */
062  @Override
063  public void setConf(Configuration configuration) {
064    this.conf = configuration;
065  }
066}