Error 401 with Google contacts API on VB Net - vb.net

I made today a vb net application to fetch my contacts and it was working for one hour then when I try to use my app I get this error:
This is the code I´m using:
Imports System.Threading
Imports Google.Apis.Auth.OAuth2
Imports Google.Apis.Services
Imports Google.Apis.Util.Store
Imports Google.Contacts
Imports Google.GData.Contacts
Imports Google.GData.Client
Imports Google.GData.Extensions
Public Class Form1
Dim initializer = New BaseClientService.Initializer
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim Secrets = New ClientSecrets()
Secrets.ClientId = "MYCLIENTID"
Secrets.ClientSecret = "MYCLIENTSECRET"
Dim scopes As String() = New String() {"https://www.googleapis.com/auth/contacts.readonly"}
Try
Dim credential = GoogleWebAuthorizationBroker.AuthorizeAsync(Secrets, scopes, "email#email.com", CancellationToken.None, New FileDataStore("MYAPPNAME")).Result()
Dim parameters As New OAuth2Parameters()
parameters.AccessToken = credential.Token.AccessToken
parameters.RefreshToken = credential.Token.RefreshToken
Dim settings As New RequestSettings("MYAPPNAME", parameters)
Dim cr As New ContactsRequest(settings)
Dim f As Feed(Of Contact) = cr.GetContacts()
For Each c As Contact In f.Entries
MsgBox(c.Name.FullName)
Next
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
End Class
How can I solve this issue?
Why this is happening after a good performance?
Thanks

I solved it changing the form of this line:
Dim credential = GoogleWebAuthorizationBroker.AuthorizeAsync(Secrets, scopes,"email#email.com", CancellationToken.None, New FileDataStore("MYAPPNAME")).Result()
by this lines:
Dim credential As UserCredential = GoogleWebAuthorizationBroker.AuthorizeAsync(New ClientSecrets() With {
.ClientId = "MYCLIENTID",
.ClientSecret = "MYCLIENTSECRET"
}, scopes, "email#gmail.com", CancellationToken.None, New FileDataStore("MYAPPNAME")).Result
And taking out the secrets section.
Thank you all for your advices.

Related

Sharepoint connection fails (Winforms, VB.Net)

I did a small development where it is necessary to connect to a SharePoint list, the development works well with my user, but when testing with another user who has the same privileges on the site, it sends the following error message
"The sign-in name or password does not match one in the Microsoft Account System. "
I already tried with other users that the site are owners, but I get the same result.
Can you help me see what is the error in the above?
This is my code.
Imports Microsoft.SharePoint.Client
Imports Microsoft.SharePoint
Imports System.Security
Imports System.Net
Public Class Form4
Dim siteUrl As String = "https://example.sharepoint.com/site/SiteExample/"
Dim context As New ClientContext(siteUrl)
Dim web As Web
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Try
Dim userNameSP As String = TextBox1.Text
Dim password As String = TextBox2.Text
Dim secureString As SecureString = New NetworkCredential("", password).SecurePassword
Dim cred = New SharePointOnlineCredentials(userNameSP, secureString)
Dim clientContext As New ClientContext(siteUrl)
clientContext.Credentials = cred
Dim web As Web = clientContext.Web
Dim oWebsite As Web = clientContext.Web
Dim collList As ListCollection = oWebsite.Lists
Dim oList As List = collList.GetByTitle("Example Test")
clientContext.Load(oList)
clientContext.ExecuteQuery()
Dim query As CamlQuery = CamlQuery.CreateAllItemsQuery()
query.ViewXml = "<View Scope='RecursiveAll'><Query><ViewFields><FieldRef Name='Category/></ViewFields></Query></View>"
Dim AllItems As ListItemCollection = oList.GetItems(query)
clientContext.Load(AllItems)
clientContext.ExecuteQuery()
If AllItems.Count > 0 Then
... Do Something
end if
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
End Class
Thank you in advance.
Did the user account enable MFA Authentication ?
I tested the same code snippet with a normal user account without MFA, it's working as expected.
Please check MFA Status in this:
https://account.activedirectory.windowsazure.com/UserManagement/MultifactorVerification.aspx?BrandContextID=O365
If enabling the MFA, please disable it, as CSOM didn't support MFA currently.
This is the solution code to do log-in in a sharepoint.
Imports Microsoft.Office.Interop
Imports System.IO
Imports Microsoft.SharePoint.Client
Imports Microsoft.SharePoint
Imports System.Security
Imports System.Net
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim siteUrl As String = "https://example.sharepoint.com/sites/TRAINING/"
Dim authManager = New OfficeDevPnP.Core.AuthenticationManager()
Dim ctx As ClientContext = authManager.GetWebLoginClientContext(siteUrl)
Dim web As Web = ctx.Web
ctx.Load(web, Function(w) w.Title)
ctx.ExecuteQuery()
Console.WriteLine("You have connected to {0} site, with Multi Factor Authentication enabled!!", web.Title)
Try
Do Something...
Catch ex As Exception
MessageBox.Show("An error occurred:" & Environment.NewLine & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
Sorry for the delay.
Regards.

Creating Event in Googles Calendar using VB and Googles API

I'm having problems trying to write a VB program using VS2015 to create an event in Googles Calendar using their API, there seems a distinct lack of information regarding the API and VB. I've posted my entire code below and the problem I'm getting is on the line : -
Dim createdEvent As [Event] = request.Execute(), the error I get is
Insufficient Permission [403]
Errors [
Message[Insufficient Permission] Location[ - ] Reason[insufficientPermissions] Domain[global]
can anyone help please
Imports Google.Apis.Auth.OAuth2
Imports Google.Apis.Calendar.v3
Imports Google.Apis.Calendar.v3.Data
Imports Google.Apis.Services
Imports Google.Apis.Util.Store
Imports System
Imports System.Collections.Generic
Imports System.IO
Imports System.Linq
Imports System.Text
Imports System.Threading
Imports System.Threading.Tasks
Imports Google.Apis.Calendar.v3.EventsResource
Imports Google.Apis.Requests
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SurroundingSub()
End Sub
Private Sub SurroundingSub()
Dim service = Authenticate()
Dim newEvent As [Event] = New [Event]() With {
.Summary = "Google I/O 2015",
.Location = "800 Howard St., San Francisco, CA 94103",
.Description = "A chance to hear more about Google's developer products.",
.Start = New EventDateTime() With {
.DateTime = DateTime.Parse("2015-05-28T09:00:00-07:00"),
.TimeZone = "America/Los_Angeles"
},
.[End] = New EventDateTime() With {
.DateTime = DateTime.Parse("2015-05-28T17:00:00-07:00"),
.TimeZone = "America/Los_Angeles"
},
.Recurrence = New String() {"RRULE:FREQ=DAILY;COUNT=2"},
.Attendees = New EventAttendee() {New EventAttendee() With {
.Email = "mickburden#btinternet.com"
}, New EventAttendee() With {
.Email = "mickburden#btinternet.com"
}},
.Reminders = New [Event].RemindersData() With {
.UseDefault = False,
.[Overrides] = New EventReminder() {New EventReminder() With {
.Method = "email",
.Minutes = 24 * 60
}, New EventReminder() With {
.Method = "sms",
.Minutes = 10
}}
}
}
Dim calendarId As String = "primary"
Dim request As EventsResource.InsertRequest = service.Events.Insert(newEvent, calendarId)
Dim createdEvent As [Event] = request.Execute()
End Sub
Private Function Authenticate()
Dim scopes = New List(Of String)
scopes.Add(CalendarService.Scope.Calendar)
Dim credential As UserCredential
Using stream As New FileStream("credentials.json", FileMode.Open, FileAccess.Read)
' Using stream As New FileStream("client_secrets.json", FileMode.Open, FileAccess.Read)
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets, scopes, "user", CancellationToken.None,
New FileDataStore("Calendar.VB.Sample")).Result
End Using
Dim initializer As New BaseClientService.Initializer()
initializer.HttpClientInitializer = credential
initializer.ApplicationName = "VB.NET Calendar Sample"
Dim service
service = New CalendarService(initializer)
Return service
End Function
end class

vb.net 2017 unable to insert Calendar event

I have looked at all the examples I could find and hobbled together the code below. The first time I ran it a web page asked if I wanted to allow my user to update Google calendar and then it asked me to select an account. After that it just sat there and my windows application never finished painting the screen and displaying the simple button I had placed on a form from which to run the insert calendar event. Now when I run the code it comes up, a small gray window appears and it just sits there. What am I doing wrong?
Imports System.Collections.Generic
Imports System.IO
Imports System.Threading
Imports Google.Apis.Calendar.v3
Imports Google.Apis.Calendar.v3.Data
Imports Google.Apis.Calendar.v3.EventsResource
Imports Google.Apis.Services
Imports Google.Apis.Auth.OAuth2
Imports Google.Apis.Util.Store
Imports Google.Apis.Requests
Public Class Form1
Dim service As CalendarService
Dim GRPS As IList(Of String) = New List(Of String)()
Sub New()
Authenticate()
End Sub
Private Function Authenticate()
GRPS.Add(CalendarService.Scope.Calendar)
Dim credential As UserCredential
Using stream As New FileStream("client_secret.json", FileMode.Open,
FileAccess.Read)
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets, GRPS, "user",
CancellationToken.None, New
FileDataStore("Vanguard")).Result
End Using
' Create the calendar service using an initializer instance
Dim initializer As New BaseClientService.Initializer()
initializer.HttpClientInitializer = credential
initializer.ApplicationName = "Vanguard"
service = New CalendarService(initializer)
Return 0
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles
Button1.Click
InsertCalendar()
MessageBox.Show("Done")
Application.Exit()
End Sub
Public Sub InsertCalendar()
Dim CalendarEvent As New Data.Event
Dim SDT As New Data.EventDateTime
Dim A As Date = DateSerial(2017, 8, 11)
A = A.AddHours(10)
A = A.AddMinutes(30)
SDT.DateTime = A
Dim b As Date
b = A.AddHours(2)
Dim EDT As New Data.EventDateTime
EDT.DateTime = b
CalendarEvent.Start = SDT
CalendarEvent.End = EDT
CalendarEvent.Id = System.Guid.NewGuid.ToString
CalendarEvent.Description = "Test Event"
Dim list As IList(Of CalendarListEntry) =
service.CalendarList.List().Execute().Items()
service.Events.Insert(CalendarEvent, list(0).Id).Execute()
End Sub
End Class

How can I get the events for one day (Google calendar Api) using TimeMax and TimeMin in net?

I have a code for get a event list of calendar but retrieves ALL events. How can I get the events for just ONE day?
Here is the code that Im using:
Imports Google.Apis.Auth.OAuth2
Imports Google.Apis.Services
Imports System.Collections.Generic
Imports Google.Apis.Calendar.v3
Imports Google.Apis.Calendar.v3.Data
Imports Google.Apis.Calendar.v3.Data.Event
Imports Google.Apis.Util.Store
Imports Google.Apis.Calendar.v3.EventsResource
Imports System.Threading
Public Class Form1
Dim scopes As IList(Of String) = New List(Of String)
Dim service As CalendarService
Dim initializer = New BaseClientService.Initializer
Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click
Dim service As CalendarService
Try
scopes.Add(CalendarService.Scope.Calendar)
Dim Secrets = New ClientSecrets()
Secrets.ClientId = "CLIENT ID"
Secrets.ClientSecret = "CLIENT SECRET"
Dim scope = New List(Of String)
scope.Add(CalendarService.Scope.Calendar)
Dim credential = GoogleWebAuthorizationBroker.AuthorizeAsync(Secrets, scopes, "xxxxxxxxxxx#developer.gserviceaccount.com", CancellationToken.None).Result()
Dim initializer = New BaseClientService.Initializer
initializer.HttpClientInitializer = credential
initializer.ApplicationName = "APP NAME"
service = New CalendarService(initializer)
Dim list As IList(Of CalendarListEntry) = service.CalendarList.List().Execute().Items
Dim requeust As ListRequest = service.Events.List("MY EMAIL")
Me.DataGridView1.DataSource = requeust.Execute.Items
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
End Class
Try to add your searching range with these few lines of code
requeust.TimeMax = Now.ToString("yyyy-MM-dd'T'HH:mm:ss.fffK")
requeust.TimeMin = "2014-12-01T16:00:00" 'changing the time whenever you want
I think it's work :)

VB Net: How to call this Public Shared Function?

Can anybody help me with a couple of doubts?
How can I call this Public Shared Function from a button? and how can I show "result" (list of files) in a datagridview?
Thanks.
Imports System.Threading
Imports System.Threading.Tasks
Imports Google.Apis.Auth.OAuth2
Imports Google.Apis.Drive.v2
Imports Google.Apis.Drive.v2.Data
Imports Google.Apis.Services
Imports System.Net
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'?
End Sub
Public Shared Function retrieveAllFiles(service As DriveService) As List(Of File)
Dim Secrets = New ClientSecrets()
Secrets.ClientId = "CLIENT ID"
Secrets.ClientSecret = "CLIENT SECRET"
Dim scope = New List(Of String)
scope.Add(DriveService.Scope.Drive)
Dim credential = GoogleWebAuthorizationBroker.AuthorizeAsync(Secrets, scope, "USER", CancellationToken.None).Result()
Dim initializer = New BaseClientService.Initializer
initializer.HttpClientInitializer = credential
initializer.ApplicationName = "APPLICATION NAME"
Dim service = New DriveService(initializer)
Dim request As FilesResource.ListRequest = service.Files.List()
Dim result As New List(Of File)()
Dim request As FilesResource.ListRequest = service.Files.List()
Do
Try
Dim files As FileList = request.Execute()
result.AddRange(files.Items)
request.PageToken = files.NextPageToken
Catch e As Exception
Console.WriteLine("An error occurred: " + e.Message)
request.PageToken = Nothing
End Try
Loop While Not [String].IsNullOrEmpty(request.PageToken)
Return result
End Function
End Class
If it's in the same class, you can just call it by name, same as a non-shared function:
lst = retrieveAllFiles(service)
If it's in another class, you need to prefix it with class name:
lst = className.retrieveAllFiles(service)
Official reference:
Shared Members in Visual Basic