Как получить доступ к секретному файлу клиента календаря Google - PullRequest
0 голосов
/ 28 августа 2018

Я хочу получить доступ к файлу client_secret календаря Google и использовать его для добавления события в мой календарь.

Я создаю чат-бота в c # и в тот момент, когда я использую путь моего компьютера (когда я пытаюсь получить доступ к файлу client_secret моего проекта на моем компьютере), работает с товарами.

Когда я публикую проект в Интернете и пытаюсь получить доступ к файлу, я не могу.

Мой код:

 string path =  @"C:\Project\Test\Bot\V3\client_secret.json";

 string pathi = @"{
 'installed': {
'client_id': '1111111- 
  21432423.apps.googleusercontent.com',
'project_id': '111',
'auth_uri': 'https://accounts.google.com/o/oauth2/auth',
'token_uri': 'https://www.googleapis.com/oauth2/v3/token',
'auth_provider_x509_cert_url': 'https://www.googleapis.com/oauth2/v1/certs',
'client_secret': '22222222222222',
'redirect_uris': [ 'urn:ietf:wg:oauth:2.0:oob', 'http:dev.ai.com/BotTest/' ]
      }
  }";


            UserCredential credential;
            string[] Scopes = { CalendarService.Scope.Calendar };
            string credPath = System.Environment.GetFolderPath(
               System.Environment.SpecialFolder.Personal);

            using (var stream =
           new FileStream(pathi, FileMode.Open, FileAccess.Read))
                credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
               GoogleClientSecrets.Load(stream).Secrets,
               Scopes,
               "user",
               CancellationToken.None,
               new FileDataStore(credPath, true)).Result;
            string ApplicationName = "Google Calendar API .NET Quickstart";

            var service = new CalendarService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName = ApplicationName,
            });


            Event newEvent = new Event()
            {

                Summary = "Event",
                Location = "",
                Description = "Event is scheduled for:  " + 
        eventi.Date.ToString("dd-MM-yyyy") + "  " + 
       eventi.Time.ToShortTimeString(),
                Start = new EventDateTime()
                {

                    // DateTime = eventi.Date,
                    DateTime = new DateTime(eventi.Date.Year, 
         eventi.Date.Month, eventi.Date.Day, eventi.Time.Hour, 
            eventi.Time.Minute, 0),
                    TimeZone = "Europe/Brussels",


                },
                End = new EventDateTime()
                {

                    DateTime = eventi.Date.AddMinutes(60),
                    // DateTime = new DateTime(eventi.Date.Year, 
                 eventi.Date.Month, eventi.Date.Day, eventi.Time.Hour, 
                        eventi.Time.Hour +1 ,0),
                    TimeZone = "Europe/Brussels",
                },
                Recurrence = new String[] { "RRULE:FREQ=DAILY;COUNT=1" },
                Attendees = new EventAttendee[] {
                new EventAttendee() { Email = "eeee@gmail.com" },

            },

                ///////////////////////////////////////////



                ///////////////////////////////////////////

                Reminders = new Event.RemindersData()
                {
                    UseDefault = false,
                    Overrides = new EventReminder[] {
                    new EventReminder() { Method = "email", Minutes = 1 * 60 },
                    new EventReminder() { Method = "sms", Minutes = 10 },
                }
                }
            };
            String calendarId = "primary";
            EventsResource.InsertRequest request1 = 
          service.Events.Insert(newEvent, calendarId);
            Event createdEvent = request1.Execute();
            Console.WriteLine("Event created: {0}", createdEvent.HtmlLink);

            // Define parameters of request.
            EventsResource.ListRequest request = service.Events.List("primary");
            request.TimeMin = eventi.Time;
            request.ShowDeleted = false;
            request.SingleEvents = true;
            request.MaxResults = 10;
            request.OrderBy = EventsResource.ListRequest.OrderByEnum.StartTime;


            // List events.
            Events events = request.Execute();
            Console.WriteLine("Upcoming events:");
            if (events.Items != null && events.Items.Count > 0)
            {
                foreach (var eventItem in events.Items)
                {
                    string when = eventItem.Start.Date;
                    if (String.IsNullOrEmpty(when))
                    {
                        when = eventItem.Start.Date;
                    }
                    Console.WriteLine("{0} ({1})", eventItem.Summary, when);
                }
            }
            else
            {
                Console.WriteLine("No upcoming events found.");
            }
            //Console.Read();
            //   context.Wait(this.MessageReceived);
        }
        context.Wait(this.MessageReceived);
    }

Когда я использую путь и в этой части кода я добавляю путь работы:

    using (var stream =
           new FileStream(path, FileMode.Open, FileAccess.Read))
                credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
               GoogleClientSecrets.Load(stream).Secrets,
               Scopes,
               "user",
               CancellationToken.None,
               new FileDataStore(credPath, true)).Result;

Когда я помещаю корень файла в сеть, он не работает, то же самое, когда я помещаю весь скрипт файла в путь строки:

string path = @"http://dev.aaaa.com/bot/client_secret.json"

Я пытаюсь указать только имя файла, но все равно не работает:

 using (var stream =
           new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
                credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
               GoogleClientSecrets.Load(stream).Secrets,
               Scopes,
               "user",
               CancellationToken.None,
               new FileDataStore(credPath, true)).Result;

Можете ли вы помочь мне, пожалуйста, как получить доступ к этому файлу?

1 Ответ

0 голосов
/ 29 августа 2018

Скопируйте credentials.json в папки bin \ debug и bin \ release и, если ваш клиент является консольным приложением, выполните следующие действия:

UserCredential credential;
            string credPath = System.Environment.GetFolderPath(
               System.Environment.SpecialFolder.Personal);

            using (var stream = new FileStream("credentials.json", FileMode.Open, FileAccess.Read))
            {
                credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                   new[] { CalendarService.Scope.CalendarReadonly },
                    "user", CancellationToken.None, new FileDataStore(credPath));
            }

Для веб-приложения client_secret.json будет выглядеть так и содержит перенаправления URI и т. Д.

{"web":{"client_id":" ","project_id":" ","auth_uri":" ","token_uri":" ","auth_provider_x509_cert_url":" ","client_secret":" ","redirect_uris":[]}}

Также не разглашайте свои идентификаторы и секреты.

...