diff options
Diffstat (limited to 'test/core/security/fetch_oauth2.cc')
-rw-r--r-- | test/core/security/fetch_oauth2.cc | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/test/core/security/fetch_oauth2.cc b/test/core/security/fetch_oauth2.cc new file mode 100644 index 0000000000..fa8036e581 --- /dev/null +++ b/test/core/security/fetch_oauth2.cc @@ -0,0 +1,104 @@ +/* + * + * Copyright 2015 gRPC authors. + * + * 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. + * + */ + +#include <stdio.h> +#include <string.h> + +#include <grpc/grpc.h> +#include <grpc/grpc_security.h> +#include <grpc/slice.h> +#include <grpc/support/alloc.h> +#include <grpc/support/cmdline.h> +#include <grpc/support/log.h> +#include <grpc/support/sync.h> + +#include "src/core/lib/iomgr/load_file.h" +#include "src/core/lib/security/credentials/credentials.h" +#include "test/core/security/oauth2_utils.h" + +static grpc_call_credentials* create_refresh_token_creds( + const char* json_refresh_token_file_path) { + grpc_slice refresh_token; + GPR_ASSERT(GRPC_LOG_IF_ERROR( + "load_file", + grpc_load_file(json_refresh_token_file_path, 1, &refresh_token))); + return grpc_google_refresh_token_credentials_create( + (const char*)GRPC_SLICE_START_PTR(refresh_token), NULL); +} + +int main(int argc, char** argv) { + grpc_call_credentials* creds = NULL; + char* json_key_file_path = NULL; + const char* json_refresh_token_file_path = NULL; + char* token = NULL; + int use_gce = 0; + char* scope = NULL; + gpr_cmdline* cl = gpr_cmdline_create("fetch_oauth2"); + gpr_cmdline_add_string(cl, "json_refresh_token", + "File path of the json refresh token.", + &json_refresh_token_file_path); + gpr_cmdline_add_flag( + cl, "gce", + "Get a token from the GCE metadata server (only works in GCE).", + &use_gce); + gpr_cmdline_parse(cl, argc, argv); + + grpc_init(); + + if (json_key_file_path != NULL && json_refresh_token_file_path != NULL) { + gpr_log(GPR_ERROR, + "--json_key and --json_refresh_token are mutually exclusive."); + exit(1); + } + + if (use_gce) { + if (json_key_file_path != NULL || scope != NULL) { + gpr_log(GPR_INFO, + "Ignoring json key and scope to get a token from the GCE " + "metadata server."); + } + creds = grpc_google_compute_engine_credentials_create(NULL); + if (creds == NULL) { + gpr_log(GPR_ERROR, "Could not create gce credentials."); + exit(1); + } + } else if (json_refresh_token_file_path != NULL) { + creds = create_refresh_token_creds(json_refresh_token_file_path); + if (creds == NULL) { + gpr_log(GPR_ERROR, + "Could not create refresh token creds. %s does probably not " + "contain a valid json refresh token.", + json_refresh_token_file_path); + exit(1); + } + } else { + gpr_log(GPR_ERROR, "Missing --gce or --json_refresh_token option."); + exit(1); + } + GPR_ASSERT(creds != NULL); + + token = grpc_test_fetch_oauth2_token_with_credentials(creds); + if (token != NULL) { + printf("Got token: %s.\n", token); + gpr_free(token); + } + grpc_call_credentials_release(creds); + gpr_cmdline_destroy(cl); + grpc_shutdown(); + return 0; +} |