Flow metadata abstract class which contains the reference to the Google.Apis.Auth.OAuth2.FlowsIAuthorizationCodeFlow and method to get the user identifier.
 /// <summary>Constructs a new authorization code MVC app using the given controller and flow data.</summary>
 public AuthorizationCodeMvcApp(Controller controller, FlowMetadata flowData)
     : base(
     flowData.Flow,
     new Uri(controller.Request.Url.GetLeftPart(UriPartial.Authority) + flowData.AuthCallback).ToString(),
     controller.Request.Url.ToString())
 {
     this.controller = controller;
     this.flowData = flowData;
 }
 /// <summary>Constructs a new authorization code MVC app using the given controller and flow data.</summary>
 public AuthorizationCodeMvcApp(Controller controller, FlowMetadata flowData)
     : base(
         flowData.Flow,
         new Uri(controller.Request.Url.GetLeftPart(UriPartial.Authority) + flowData.AuthCallback).ToString(),
         controller.Request.Url.ToString())
 {
     this.controller = controller;
     this.flowData   = flowData;
 }
        public static async Task<DriveService> Connect(Controller controler, FlowMetadata flowMetadata, CancellationToken cancellationToken, string appName)
        {
            if (Service != null)
                return Service;

            var result = await new AuthorizationCodeMvcApp(controler, flowMetadata).AuthorizeAsync(cancellationToken);

            if (result.Credential == null)
                return null;

            Service = new DriveService(new BaseClientService.Initializer
            {
                HttpClientInitializer = result.Credential,
                ApplicationName = appName
            });

            return Service;
        }