// Copyright (C) 2015 The Android Open Source 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.google.gerrit.gpg.server;

import com.google.gerrit.extensions.restapi.RestView;
import com.google.gerrit.server.IdentifiedUser;
import com.google.gerrit.server.account.AccountResource;
import com.google.inject.TypeLiteral;

import org.bouncycastle.openpgp.PGPPublicKeyRing;

public class GpgKey extends AccountResource {
  public static final TypeLiteral<RestView<GpgKey>> GPG_KEY_KIND =
      new TypeLiteral<RestView<GpgKey>>() {};

  private final PGPPublicKeyRing keyRing;

  public GpgKey(IdentifiedUser user, PGPPublicKeyRing keyRing) {
    super(user);
    this.keyRing = keyRing;
  }

  public PGPPublicKeyRing getKeyRing() {
    return keyRing;
  }
}
