/* * Copyright (C) 2014 Google Inc. * * 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.cloud.genomics.dataflow.utils; import com.google.cloud.dataflow.sdk.options.Default; import com.google.cloud.dataflow.sdk.options.Description; import com.google.cloud.dataflow.sdk.options.GcsOptions; import com.google.cloud.dataflow.sdk.runners.DirectPipelineRunner; import com.google.cloud.genomics.utils.OfflineAuth; import java.util.Scanner; /** * Contains pipeline options relevant to the creation of Genomics API clients. */ public interface GenomicsOptions extends GcsOptions { public static class Methods { public static OfflineAuth getGenomicsAuth(GenomicsOptions options) { if (DirectPipelineRunner.class != options.getRunner() && null != options.getSecretsFile() && options.getWarnUserCredential()) { requestConfirmation("This pipeline will run on GCE VMs and your user credential will" + " be used by all Dataflow worker instances. Your credentials may be visible to" + " others with access to the VMs."); } if (null != options.getSecretsFile()) { // User credential will be available on all Dataflow workers. return new OfflineAuth(options.getGcpCredential()); } // This "empty" OfflineAuth will default to the Application // Default Credential available from whereever it is // accessed (e.g., locally or on GCE). return new OfflineAuth(); } /** * Print the passed message and ask the user whether to proceed. If * the user's response is not affirmative, exit. * * @param message The message requiring confirmation. */ public static void requestConfirmation(final String message) { System.out.println("\n" + message); System.out.println("Do you want to continue (Y/n)?"); Scanner kbd = new Scanner(System.in); String decision; decision = kbd.nextLine(); kbd.close(); switch(decision) { case "yes": case "Yes": case "YES": case "y": case "Y": break; default: System.exit(0); } } } @Description("Set this option to 'false' to disable the yes/no prompt when running" + " the pipeline with a user credential.") @Default.Boolean(true) boolean getWarnUserCredential(); void setWarnUserCredential(boolean warnUserCredential); }