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.Configuration;
024import org.apache.hadoop.util.Timer;
025
026import static org.apache.hadoop.hdfs.web.oauth2.Utils.notNull;
027
028/**
029 * Obtain an access token via a a credential (provided through the
030 * Configuration) using the
031 * <a href="https://tools.ietf.org/html/rfc6749#section-4.4">
032 *   Client Credentials Grant workflow</a>.
033 */
034@InterfaceAudience.Public
035@InterfaceStability.Evolving
036public class ConfCredentialBasedAccessTokenProvider
037    extends CredentialBasedAccessTokenProvider {
038  private String credential;
039
040  public ConfCredentialBasedAccessTokenProvider() {
041  }
042
043  public ConfCredentialBasedAccessTokenProvider(Timer timer) {
044    super(timer);
045  }
046
047  @Override
048  public void setConf(Configuration conf) {
049    super.setConf(conf);
050    credential = notNull(conf, OAUTH_CREDENTIAL_KEY);
051  }
052
053  @Override
054  public String getCredential() {
055    if(credential == null) {
056      throw new IllegalArgumentException("Credential has not been " +
057          "provided in configuration");
058    }
059
060    return credential;
061  }
062}