mirror of
https://github.com/google/nomulus.git
synced 2025-05-02 04:57:51 +02:00
RemoteApiOption has a package-private method that takes a Stream representing the content of a JSON and use a GoogleCredential created from it as its credential. This CL uses reflection to change the access modifier of that method in order to supply a credential stream that is self-managed. This is obviously not ideal and prone to breakage in case the getGoogleCredentialStream method is changed. Unfortunately upstream is not willing to make it public citing the reason that GoogleCredential.fromStream() (which getGoogleCredentialStream uses) is a @Beta annotated function (see https://groups.google.com[]forum/#!searchin/domain-registry-eng/remoteapioptions%7Csort:date/domain-registry-eng/Flsah6skszQ/CySZv2XEBwAJ). However this function is introduced 5 years ago as a public function (b857184bfa
). I think at this point it is safe to assume that it is part of the widely used APIs and will not change without sufficient notice.
Note here that RemoteApiOptions creates its own copy of GoogleCredential to be used to call App Engine APIs locally, whereas communications to Nomulus endpoints use the Credential provided in AuthModule. Even though both credentials are created from the same client id, client secret and refresh token (the three elements needed to construct a GoogleCredential this way, see https://github.com/googleapis/google-api-java-client/blob/master/google-api-client/src/main/java/com/google/api/client/googleapis/auth/oauth2/GoogleCredential.java#L842), their refreshes cycles are independent of each other. I verified that refreshing one of the credential does not invalidate the access token of the other credential, as long as it is not expired yet.
-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=224156131
119 lines
4.8 KiB
Java
119 lines
4.8 KiB
Java
// Copyright 2017 The Nomulus Authors. All Rights Reserved.
|
|
//
|
|
// 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 google.registry.tools;
|
|
|
|
import com.google.common.base.Supplier;
|
|
import dagger.Component;
|
|
import google.registry.bigquery.BigqueryModule;
|
|
import google.registry.config.CredentialModule;
|
|
import google.registry.config.RegistryConfig.ConfigModule;
|
|
import google.registry.dns.writer.VoidDnsWriterModule;
|
|
import google.registry.dns.writer.clouddns.CloudDnsWriterModule;
|
|
import google.registry.dns.writer.dnsupdate.DnsUpdateWriterModule;
|
|
import google.registry.keyring.KeyringModule;
|
|
import google.registry.keyring.api.DummyKeyringModule;
|
|
import google.registry.keyring.api.KeyModule;
|
|
import google.registry.keyring.kms.KmsModule;
|
|
import google.registry.rde.RdeModule;
|
|
import google.registry.request.Modules.DatastoreServiceModule;
|
|
import google.registry.request.Modules.Jackson2Module;
|
|
import google.registry.request.Modules.URLFetchServiceModule;
|
|
import google.registry.request.Modules.UrlFetchTransportModule;
|
|
import google.registry.request.Modules.UserServiceModule;
|
|
import google.registry.tools.AuthModule.LocalCredentialStream;
|
|
import google.registry.util.AppEngineServiceUtilsImpl.AppEngineServiceUtilsModule;
|
|
import google.registry.util.SystemClock.SystemClockModule;
|
|
import google.registry.util.SystemSleeper.SystemSleeperModule;
|
|
import google.registry.whois.WhoisModule;
|
|
import java.io.InputStream;
|
|
import javax.inject.Singleton;
|
|
|
|
/**
|
|
* Dagger component for Registry Tool.
|
|
*
|
|
* <p>Any command class with {@code @Inject} fields <i>must</i> be listed as a method here.
|
|
* Otherwise {@link RegistryCli} will not be able to populate those fields after its instantiation.
|
|
*/
|
|
@Singleton
|
|
@Component(
|
|
modules = {
|
|
AppEngineAdminApiModule.class,
|
|
AppEngineServiceUtilsModule.class,
|
|
// TODO(b/36866706): Find a way to replace this with a command-line friendly version
|
|
AuthModule.class,
|
|
BigqueryModule.class,
|
|
ConfigModule.class,
|
|
CredentialModule.class,
|
|
DatastoreServiceModule.class,
|
|
DummyKeyringModule.class,
|
|
CloudDnsWriterModule.class,
|
|
DefaultRequestFactoryModule.class,
|
|
DefaultRequestFactoryModule.RequestFactoryModule.class,
|
|
DnsUpdateWriterModule.class,
|
|
Jackson2Module.class,
|
|
KeyModule.class,
|
|
KeyringModule.class,
|
|
KmsModule.class,
|
|
RdeModule.class,
|
|
SystemClockModule.class,
|
|
SystemSleeperModule.class,
|
|
URLFetchServiceModule.class,
|
|
UrlFetchTransportModule.class,
|
|
UserServiceModule.class,
|
|
VoidDnsWriterModule.class,
|
|
WhoisModule.class,
|
|
})
|
|
interface RegistryToolComponent {
|
|
void inject(CheckDomainClaimsCommand command);
|
|
void inject(CheckDomainCommand command);
|
|
void inject(CheckSnapshotCommand command);
|
|
void inject(CountDomainsCommand command);
|
|
void inject(CreateAnchorTenantCommand command);
|
|
void inject(CreateCdnsTld command);
|
|
void inject(CreateContactCommand command);
|
|
void inject(CreateDomainCommand command);
|
|
void inject(CreateTldCommand command);
|
|
void inject(DeployInvoicingPipelineCommand command);
|
|
void inject(DeploySpec11PipelineCommand command);
|
|
void inject(EncryptEscrowDepositCommand command);
|
|
void inject(GenerateAllocationTokensCommand command);
|
|
void inject(GenerateApplicationsReportCommand command);
|
|
void inject(GenerateDnsReportCommand command);
|
|
void inject(GenerateEscrowDepositCommand command);
|
|
void inject(GetKeyringSecretCommand command);
|
|
void inject(GhostrydeCommand command);
|
|
void inject(ListCursorsCommand command);
|
|
void inject(LoadSnapshotCommand command);
|
|
void inject(LockDomainCommand command);
|
|
void inject(LoginCommand command);
|
|
void inject(LogoutCommand command);
|
|
void inject(PendingEscrowCommand command);
|
|
void inject(RenewDomainCommand command);
|
|
void inject(SendEscrowReportToIcannCommand command);
|
|
void inject(SetNumInstancesCommand command);
|
|
void inject(SetupOteCommand command);
|
|
void inject(UnlockDomainCommand command);
|
|
void inject(UpdateCursorsCommand command);
|
|
void inject(UpdateDomainCommand command);
|
|
void inject(UpdateKmsKeyringCommand command);
|
|
void inject(UpdateTldCommand command);
|
|
void inject(ValidateEscrowDepositCommand command);
|
|
void inject(WhoisQueryCommand command);
|
|
|
|
AppEngineConnection appEngineConnection();
|
|
|
|
@LocalCredentialStream
|
|
Supplier<InputStream> googleCredentialStream();
|
|
}
|