Exemple #1
0
/*
 *      public static async Task<EmbedConfig> GetEmbedConfig()
 *      {
 *          EmbedToken embedToken = await Client.Reports.GenerateTokenInGroupAsync(SampleGroupId, SampleReportId, new GenerateTokenRequest(accessLevel: "view", datasetId: "[DATASET ID]"));
 *          Report report = await Client.Reports.GetReportAsync(SampleGroupId, SampleReportId);
 *
 *          var result = new EmbedConfig()
 *          {
 *              Id = report.Id,
 *              EmbedToken = embedToken,
 *              EmbedUrl = report.EmbedUrl
 *          };
 *
 *          return result;
 *      }
 */
        public void NETGetEmbedTokenExample()
        {
            EmbedToken embedToken = ClientService.Client.Reports.GenerateTokenInGroup(PBIConfig.SampleGroupId, PBIConfig.SampleReportId, new GenerateTokenRequest(accessLevel: "view", datasetId: "[DATASET ID]"));
            Report     report     = ClientService.Client.Reports.GetReport(PBIConfig.SampleGroupId, PBIConfig.SampleReportId);

            Console.BackgroundColor = ConsoleColor.White;
            Console.ForegroundColor = ConsoleColor.Black;
            Console.WriteLine("*** EMBETD TOKEN ***");
            Console.BackgroundColor = ConsoleColor.Black;
            Console.ForegroundColor = ConsoleColor.White;
            Console.WriteLine("Token: " + embedToken.Token);
            Console.WriteLine("Expiration: " + embedToken.Expiration.Value.ToString());


            Console.WriteLine("");

            Console.BackgroundColor = ConsoleColor.White;
            Console.ForegroundColor = ConsoleColor.Black;
            Console.WriteLine("*** REPORT ID ***");
            Console.BackgroundColor = ConsoleColor.Black;
            Console.ForegroundColor = ConsoleColor.White;
            Console.WriteLine(PBIConfig.SampleReportId);

            Console.WriteLine("");

            Console.BackgroundColor = ConsoleColor.White;
            Console.ForegroundColor = ConsoleColor.Black;
            Console.WriteLine("*** REPORT EMBED URL ***");
            Console.BackgroundColor = ConsoleColor.Black;
            Console.ForegroundColor = ConsoleColor.White;
            Console.WriteLine(report.EmbedUrl);
        }
Exemple #2
0
        public static EmbeddedReportConfig GenerateReport(string token, Guid groupId, Guid reportId, string reportPageNameForMobile)
        {
            EmbeddedReportConfig config = null;
            var tokenCredentials        = new TokenCredentials(token, "Bearer");

            // Create a Power BI Client object. It will be used to call Power BI APIs.
            using (var client = new PowerBIClient(new Uri("https://api.powerbi.com"), tokenCredentials))
            {
                Microsoft.PowerBI.Api.V2.Models.Report report = client.Reports.GetReportInGroup(groupId, reportId);
                if (report != null)
                {
                    var requestParameters = new GenerateTokenRequest();
                    requestParameters.AccessLevel = "View";

                    // Generate EmbedToken This function sends the POST message
                    //with all parameters and returns the token
                    EmbedToken embedtoken = client.Reports.GenerateTokenInGroupAsync(
                        groupId,
                        reportId,
                        requestParameters).GetAwaiter().GetResult();

                    config            = new EmbeddedReportConfig();
                    config.EmbedURL   = report.EmbedUrl;
                    config.GroupID    = groupId.ToString();
                    config.ReportID   = reportId.ToString();
                    config.Token      = embedtoken?.Token;
                    config.TokenID    = embedtoken?.TokenId.ToString();
                    config.Expiration = embedtoken?.Expiration;
                    config.PageName   = reportPageNameForMobile;
                }
            }
            return(config);
        }
Exemple #3
0
        //public IActionResult TimeConsuming()
        //{
        //    var uniqueName = HttpContext.User.Claims.First(claim => claim.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name").Value;

        //    UsageTelemetry.Track(uniqueName, ArdaUsage.Report_Show);

        //    return View();
        //}

        public async Task <IActionResult> TimeConsuming()
        {
            string userObjectID = HttpContext.User.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
            var    tokenCache   = new NaiveSessionCache(userObjectID, NaiveSessionCacheResource.PowerBi, _cache);
            //ClientCredential credential = new ClientCredential(Startup.ClientId, Startup.ClientSecret);

            AuthenticationContext authContext = new AuthenticationContext(Startup.Authority, tokenCache);

            var authenticationResult = await authContext.AcquireTokenSilentAsync(Startup.PowerBIResourceId, Startup.ClientId);

            var tokenCredentials = new TokenCredentials(authenticationResult.AccessToken, "Bearer");

            using (var client = new PowerBIClient(new Uri(Startup.PowerBIApiUrl), tokenCredentials))
            {
                // You will need to provide the GroupID where the dashboard resides.
                ODataResponseListReport reports = await client.Reports.GetReportsInGroupAsync(Startup.PowerBIGroupId);

                // Get the first report in the group.
                Report report = reports.Value.FirstOrDefault();

                // Generate Embed Token.
                var        generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: "view");
                EmbedToken tokenResponse = client.Reports.GenerateTokenInGroup(Startup.PowerBIGroupId, report.Id, generateTokenRequestParameters);

                // Generate Embed Configuration.
                var embedConfig = new EmbedConfig()
                {
                    EmbedToken = tokenResponse,
                    EmbedUrl   = report.EmbedUrl,
                    Id         = report.Id
                };

                return(View("PowerBI", embedConfig));
            }
        }
        private async Task <EmbedToken> GetEmbedTokenForReportsAsync(IEnumerable <PBIReport> pbiReports)
        {
            var tokenForMultipleReports = this.powerBIOptions.TokenForMultipleReports;
            var embedToken = this.groupEmbedToken;

            if (!tokenForMultipleReports)
            {
                var pbiReport = pbiReports.FirstOrDefault();
                var reportId  = pbiReport.Report.Id.ToString();
                embedToken = this.embedTokentDict.ContainsKey(reportId) ? this.embedTokentDict[reportId] : null;
            }

            if (this.EmbedTokenHasExpired(embedToken))
            {
                var request     = this.CreateTokenRequestForReports(pbiReports);
                var forceUpdate = embedToken != null;
                var accessToken = await this.azureADService.GetAccessTokenAsync(forceUpdate);

                var client = this.CreatePowerBIClient(accessToken);
                embedToken = await client.EmbedToken.GenerateTokenAsync(request);

                if (tokenForMultipleReports)
                {
                    this.groupEmbedToken = embedToken;
                }
            }

            return(embedToken);
        }
        public Token GetTokenAccess()
        {
            try
            {
                AuthorityUrl = ConfigurationManager.AppSettings["authorityUrl"];
                ResourceUrl  = ConfigurationManager.AppSettings["resourceUrl"];
                ApiUrl       = ConfigurationManager.AppSettings["apiUrl"];
                Username     = ConfigurationManager.AppSettings["username"];

                Credential = new UserPasswordCredential(Username, Secrets.Password);
                Authorize().Wait();

                using (var client = new PowerBIClient(new Uri(ApiUrl), TokenCredentials))
                {
                    EmbedToken embedToken = client.Reports.GenerateTokenInGroup(groupId: GroupId, reportKey: ReportId, requestParameters: new GenerateTokenRequest(accessLevel: AccessLevel, datasetId: DatasetId));
                    Report     report     = client.Reports.GetReportInGroup(groupId: GroupId, reportKey: ReportId);

                    return(new Token {
                        EmbedUrl = report.EmbedUrl, EmbedToken = embedToken, Id = embedToken.TokenId
                    });
                }
            }
            catch (Exception ex)
            {
                return(new Token {
                    ErrorMessage = ex.InnerException.ToString()
                });
            }
        }
        private bool EmbedTokenHasExpired(EmbedToken token)
        {
            var safetyInterval  = this.powerBIOptions.SafetyIntervalInMinutes;
            var tokenExpiration = token?.Expiration.AddMinutes(-safetyInterval);
            var now             = DateTime.UtcNow;

            return(token == null || tokenExpiration <= now);
        }
Exemple #7
0
 private EmbedReport ConvertEmbedReport(Report report, EmbedToken embedToken)
 {
     return(new EmbedReport()
     {
         Id = new ReportId(report.Id),
         EmbedToken = embedToken,
         EmbedUrl = report.EmbedUrl
     });
 }
Exemple #8
0
 /// <summary>
 /// Gets the hash code
 /// </summary>
 /// <returns>Hash code</returns>
 public override int GetHashCode()
 {
     unchecked // Overflow is fine, just wrap
     {
         var hashCode = 41;
         // Suitable nullity checks etc, of course :)
         if (Description != null)
         {
             hashCode = hashCode * 59 + Description.GetHashCode();
         }
         if (Photos != null)
         {
             hashCode = hashCode * 59 + Photos.GetHashCode();
         }
         if (Gear != null)
         {
             hashCode = hashCode * 59 + Gear.GetHashCode();
         }
         if (Calories != null)
         {
             hashCode = hashCode * 59 + Calories.GetHashCode();
         }
         if (SegmentEfforts != null)
         {
             hashCode = hashCode * 59 + SegmentEfforts.GetHashCode();
         }
         if (DeviceName != null)
         {
             hashCode = hashCode * 59 + DeviceName.GetHashCode();
         }
         if (EmbedToken != null)
         {
             hashCode = hashCode * 59 + EmbedToken.GetHashCode();
         }
         if (SplitsMetric != null)
         {
             hashCode = hashCode * 59 + SplitsMetric.GetHashCode();
         }
         if (SplitsStandard != null)
         {
             hashCode = hashCode * 59 + SplitsStandard.GetHashCode();
         }
         if (Laps != null)
         {
             hashCode = hashCode * 59 + Laps.GetHashCode();
         }
         if (BestEfforts != null)
         {
             hashCode = hashCode * 59 + BestEfforts.GetHashCode();
         }
         return(hashCode);
     }
 }
Exemple #9
0
 public HttpResponseMessage GetAccessTokenForCreate(string workspaceId, string datasetId)
 {
     try
     {
         HttpResponseMessage response;
         var accessToken = ((string[])Request.Headers.GetValues("Authorization"))[0];//Request.Headers.GetValues("Authorization").ToString();
         using (var client = new PowerBIClient(new Uri("https://api.powerbi.com"), new TokenCredentials(accessToken, "Bearer")))
         {
             GenerateTokenRequest generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: TokenAccessLevel.Create, datasetId: datasetId, allowSaveAs: true);
             EmbedToken           tokenResponse = client.Reports.GenerateTokenForCreateInGroup(workspaceId, generateTokenRequestParameters);
             //return tokenResponse;
             var jsonResult = JsonConvert.SerializeObject(tokenResponse, Formatting.Indented);
             response = Request.CreateResponse(HttpStatusCode.OK, jsonResult);
             return(response);
         }
     }
     catch (Exception ex)
     {
         return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex.Message));
     }
 }
        private async void GenerateEmbedToken()
        {
            try
            {
                tokenCredentials = await PowerBIService.GetAccessTokenSecretAsync();

                using (var client = new PowerBIClient(new Uri(Constants.ApiUrl), tokenCredentials))
                {
                    var TokenCached = App.EmbedTokenB.GetByGroupIDAndReportID(EmbedConfig.GroupID, EmbedConfig.Id);

                    if (TokenCached == null)
                    {
                        //IList<Guid> ds = new List<Guid>();
                        //ds.Add(Guid.Parse(EmbedConfig.GroupID));
                        EmbedToken tokenResponse = client.Reports.GenerateToken(Guid.Parse(EmbedConfig.GroupID), Guid.Parse(EmbedConfig.Id), new GenerateTokenRequest(accessLevel: "view"));

                        EmbedConfig.EmbedToken = tokenResponse;

                        App.EmbedTokenB.Create(new Data.Models.EmbedTokenDTO()
                        {
                            Expiration = tokenResponse.Expiration, Token = tokenResponse.Token, GroupID = EmbedConfig.GroupID, Id = EmbedConfig.Id, TokenId = tokenResponse.TokenId.ToString()
                        });


                        ConfigureReportViewer();
                    }
                    else
                    {
                        EmbedConfig.EmbedToken = new EmbedToken(TokenCached.Token, Guid.Parse(TokenCached.TokenId), TokenCached.Expiration.Value);

                        ConfigureReportViewer();
                    }
                }
            }
            catch (HttpOperationException ex)
            {
                var content = ex.Response.Content;
                Alerts.ShowAlert(string.Empty, "Error al mostrar el reporte.");
            }
        }
        public async Task <EmbedToken> GetToken(string groupId, string type, string id)
        {
            try
            {
                string   secretValue = KeyValutHelper.GetSecret(CommonConfig.PbiSecretUri);
                string[] splitValue  = secretValue.Split(new String[] { Constants.PbiSecretSplit }, StringSplitOptions.None);
                string   userName    = splitValue[0];
                string   password    = splitValue[1];

                string token = await GetTokenAsync(userName, password);

                var tokenCredentials = new TokenCredentials(token, Constants.PbiTokenType);

                // Create a Power BI Client object. It will be used to call Power BI APIs.
                using (var client = new PowerBIClient(new Uri(CommonConfig.PbiApiUrl), tokenCredentials))
                {
                    // Generate Embed Token.
                    var generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: Constants.PbiDefaultAccessLevel);

                    EmbedToken tokenResponse = null;

                    if (Constants.PbiTypeReport.Equals(type, StringComparison.OrdinalIgnoreCase))
                    {
                        tokenResponse = await client.Reports.GenerateTokenInGroupAsync(groupId, id, generateTokenRequestParameters);
                    }
                    else if (Constants.PbiTypeDashboard.Equals(type, StringComparison.OrdinalIgnoreCase))
                    {
                        tokenResponse = await client.Dashboards.GenerateTokenInGroupAsync(groupId, id, generateTokenRequestParameters);
                    }

                    return(tokenResponse);
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.HandleServiceException(ex);
                return(null);
            }
        }
Exemple #12
0
        public static async Task <EmbeddedReportSettings> GetEmbeddedReportSettings(string workspaceId, string reportId)
        {
            using (PowerBIClient client = await CreateClient())
            {
                // get report details
                Report report = await client.Reports.GetReportInGroupAsync(workspaceId, reportId);

                // Generate Embed Token.
                var        generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: "view");
                EmbedToken tokenResponse = await client.Reports.GenerateTokenInGroupAsync(workspaceId, reportId, generateTokenRequestParameters);

                // Generate Embed Configuration.
                var embedConfig = new EmbeddedReportSettings()
                {
                    Token    = tokenResponse,
                    URL      = report.EmbedUrl,
                    ReportId = report.Id
                };

                return(embedConfig);
            }
        }
        static void Main(string[] args)
        {
            try
            {
                // Create a user password cradentials.
                credential = new UserPasswordCredential(username, Secrets.Password);

                // Authenticate using created credentials
                Authorize().Wait();

                using (var client = new PowerBIClient(new Uri(apiUrl), tokenCredentials))
                {
                    EmbedToken embedToken = client.Reports.GenerateTokenInGroup(groupId, "<REPORT ID>", new GenerateTokenRequest(accessLevel: "View", datasetId: "<DATASET ID>"));

                    Report report = client.Reports.GetReportInGroup(groupId, "<REPORT ID>");

                    #region Output Embed Token
                    Console.WriteLine("\r*** EMBED TOKEN ***\r");

                    Console.Write("Report Id: ");

                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.WriteLine("<REPORT ID>");
                    Console.ResetColor();

                    Console.Write("Report Embed Url: ");

                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.WriteLine(report.EmbedUrl);
                    Console.ResetColor();

                    Console.WriteLine("Embed Token Expiration: ");

                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.WriteLine(embedToken.Expiration.Value.ToString());
                    Console.ResetColor();


                    Console.WriteLine("Report Embed Token: ");
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine(embedToken.Token);
                    Console.ResetColor();
                    #endregion

                    #region Output Datasets
                    Console.WriteLine("\r*** DATASETS ***\r");

                    // List of Datasets
                    // This method calls for items in a Group/App Workspace. To get a list of items within your "My Workspace"
                    // call GetDatasets()
                    ODataResponseListDataset datasetList = client.Datasets.GetDatasetsInGroup(groupId);

                    foreach (Dataset ds in datasetList.Value)
                    {
                        Console.WriteLine(ds.Id + " | " + ds.Name);
                    }
                    #endregion

                    #region Output Reports
                    Console.WriteLine("\r*** REPORTS ***\r");

                    // List of reports
                    // This method calls for items in a Group/App Workspace. To get a list of items within your "My Workspace"
                    // call GetReports()
                    ODataResponseListReport reportList = client.Reports.GetReportsInGroup(groupId);

                    foreach (Report rpt in reportList.Value)
                    {
                        Console.WriteLine(rpt.Id + " | " + rpt.Name + " | DatasetID = " + rpt.DatasetId);
                    }
                    #endregion

                    #region Output Dashboards
                    Console.WriteLine("\r*** DASHBOARDS ***\r");

                    // List of reports
                    // This method calls for items in a Group/App Workspace. To get a list of items within your "My Workspace"
                    // call GetReports()
                    ODataResponseListDashboard dashboards = client.Dashboards.GetDashboardsInGroup(groupId);

                    foreach (Dashboard db in dashboards.Value)
                    {
                        Console.WriteLine(db.Id + " | " + db.DisplayName);
                    }
                    #endregion

                    #region Output Gateways
                    Console.WriteLine("\r*** Gateways ***\r");

                    ODataResponseListGateway gateways = client.Gateways.GetGateways();

                    Console.WriteLine(gateways.Value[0].Name);

                    //foreach (Gateway g in gateways)
                    //{
                    //    Console.WriteLine(g.Name + " | " + g.GatewayStatus);
                    //}
                    #endregion
                }
            }
            catch (Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(ex.ToString());
                Console.ResetColor();
            }
        }
        public async Task <ActionResult> Index()
        {
            Singleton PatronSingleton = Singleton.Instance;


            string MensajeError   = String.Empty;
            var    cacheKey       = "TokenCredencials";
            var    cacheReportKey = "ReportName";
            var    cTime          = DateTime.Now.AddMinutes(Convert.ToInt32(TokenTimeExpiration));
            var    cExp           = System.Web.Caching.Cache.NoSlidingExpiration;
            var    cPri           = System.Web.Caching.CacheItemPriority.NotRemovable;
            var    foo            = System.Web.HttpContext.Current.Cache[cacheKey];

            string key      = ConfigurationManager.AppSettings["key"];
            string Username = ConfigurationManager.AppSettings["pbiUsername"];
            string Password = ConfigurationManager.AppSettings["pbiPassword"];

            //Desencriptar los valores
            Username = encriptar.Rijndael.Decrypt(Username, key);
            Username = Username + "@corpmaresa.com.ec";
            Password = encriptar.Rijndael.Decrypt(Password, key);
            //Username = "******";


            List <string> ListLogs       = new List <string>();
            string        FiltroTabla    = String.Empty;
            string        FiltroColumna  = String.Empty;
            string        TipoDato       = String.Empty;
            List <string> ValueFilter    = new List <string>();
            List <string> FiltrosTabla   = new List <string>();
            List <string> FiltrosColumna = new List <string>();
            List <string> ValuesFilter   = new List <string>();
            List <string> TiposDato      = new List <string>();
            var           resultReport   = (EmbedConfig)System.Web.HttpContext.Current.Cache[cacheReportKey];


            if (resultReport == null)
            {
                //Buscar WorkSpaceId and ReportId
                string NameReport = String.Empty;

                //Valida que este presente el Nombre del reporte y los Filtros
                int respuestaError = ValidarValoresInicio();
                if (respuestaError == 1)
                {
                    return(View("~/Views/Home/Error.cshtml"));
                }
                NameReport = TempData["NameReport"].ToString();
                TempData.Keep("NameReport");


                List <Models.Filter> DataValueFilter = (List <Models.Filter>)TempData["ValuesFilter"];
                TempData.Keep("ValuesFilter");



                foreach (var item in DataValueFilter)
                {
                    FiltroTabla   = item.FiltroTabla;
                    FiltroColumna = item.FiltroColumna;
                    string ValueFilterItem = item.ValueFilter[0].ToString();
                    TipoDato    = item.TipoDato;
                    WorkspaceId = item.WorkSpaceId;
                    ReportId    = item.ReportId;
                    FiltrosTabla.Add(FiltroTabla);
                    FiltrosColumna.Add(FiltroColumna);
                    ValuesFilter.Add(ValueFilterItem);
                    TiposDato.Add(TipoDato);
                }

                //FiltroTabla = "MSI_WCD_POL";
                //FiltroColumna = "Concesionario";
                //string ValueFilterItem = "IMPARTES S.A.-LANZOTY C.A.-MAREAUTO S.A.-AUTOFENIX S. A.-ECUAMOTORS S.A.-AUTOMOTORES ANDINA-MANUFACTURAS ARMADURIAS Y REPUESTOS ECUATORIANOS S.A. MARESA-IOMOTORS S. A.-OROAUTO S.A.-COMERCIAL HIDROBO S.A.-AMBANDINE S.A.-AMBAMAZDA S.A.-MARESA CENTER-MARESA CENTER DIST.-AUTOSHARECORP S.A.-AUTOSDELSUR  S.A-MARESA CENTER GBM-AUTOMAXFIVE-GALARMOBIL-MORACOSTA-SUPERDEALER-CUENCAUTO-MEGAUTOLOJA-IMPORTADORA GUZMAN-ITALCAUCHOS CIA. LTDA.-EQUINORTE S.A.-EQUINORTE S.A.-AUTO DELTA CIA.LTDA-SERVICIOS AUTOMOTRICES SERAUTOTALS.A.-S.A. IMPORTADORA ANDINA S.A.I.A.-INDUAUTO";
                //TipoDato = "S";
                //WorkspaceId = "e467de32-64dc-4d5d-933c-915a65547a3b";
                //ReportId = "14adbe76-e266-4e15-8391-dab89ed5abb8";
                //FiltrosTabla.Add(FiltroTabla);
                //FiltrosColumna.Add(FiltroColumna);
                //ValuesFilter.Add(ValueFilterItem);
                //TiposDato.Add(TipoDato);
            }
            else
            {
                WorkspaceId = resultReport.WorkspaceId;
                ReportId    = resultReport.ReportId;
            }

            tokenCredentials = null;
            var reportName = "report_" + ReportId;

            try
            {
                var tokenCredentialsAAD = System.Web.HttpContext.Current.Session["tokenCredentialsAAD"];
                var tokenResponse       = System.Web.HttpContext.Current.Session["tokenResponse"];

                string username = String.Empty;
                string roles    = String.Empty;

                var result = new EmbedConfig();


                try
                {
                    /*Obtener datos usuario*/

                    List <string> datos = (List <string>)TempData["sessionUser"];
                    TempData.Keep("sessionUser");
                    username = datos[0] == null ? "": datos[0];


                    /*Fin Obtener datos usuario*/

                    if (resultReport != null)
                    {
                        //Validar Token Credencial
                        tokenCredentialsAAD = tokenCredentialsAAD == null ? "": tokenCredentialsAAD;

                        if (!String.IsNullOrEmpty(tokenCredentialsAAD.ToString()))
                        {
                            tokenCredentialsAAD = await GetNewTokenCredencial(Username, Password);

                            System.Web.HttpContext.Current.Session["tokenCredentialsAAD"] = tokenCredentialsAAD;
                            if (tokenCredentialsAAD == null)
                            {
                                if (TempData["sessionUser"] != null)
                                {
                                    ListLogs.Clear();
                                    ListLogs.Add("Inicio EmbeddedReport Controller. Token del Credencial no existe");
                                    ListLogs.Add("ERROR");
                                    //AddLogDataBase(ListLogs, TempData["sessionUser"]);
                                }
                                ViewBag.Error = "Token de Credencial no existe";
                                return(View("~/Views/Home/Error.cshtml"));
                            }
                        }
                        //Validar Token Response
                        tokenResponse = tokenResponse == null ? "" : tokenResponse;

                        if (!String.IsNullOrEmpty(tokenResponse.ToString()))
                        {
                            var FechaActual = System.Web.HttpContext.Current.Session["tokenResponseExp"];
                            int respuesta   = ValidarToken(FechaActual.ToString(), 1);
                            if (respuesta == 1)
                            {
                                tokenCredentialsAAD = System.Web.HttpContext.Current.Session["tokenCredentialsAAD"];
                                EmbedToken TokenReponse = await GetNewTokenResponse(WorkspaceId, ReportId, tokenCredentialsAAD);

                                System.Web.HttpContext.Current.Session["tokenResponse"] = TokenReponse;
                                //Validar Tiempo del Token
                                EmbedToken jwtOri   = (EmbedToken)tokenResponse;
                                DateTime   DateExp  = Convert.ToDateTime(jwtOri.Expiration);
                                var        timeEpox = ConvertToUnixTime(DateExp);
                                System.Web.HttpContext.Current.Session["tokenResponseExp"] = timeEpox;

                                if (TokenReponse == null)
                                {
                                    if (TempData["sessionUser"] != null)
                                    {
                                        ListLogs.Clear();
                                        ListLogs.Add("Inicio EmbeddedReport Controller. Token Power Bi Reponse. TokenReponse no existe");
                                        ListLogs.Add("ERROR");
                                        //AddLogDataBase(ListLogs, TempData["sessionUser"]);
                                    }
                                    ViewBag.Error = "Token Power Bi Reponse. TokenReponse no existe";
                                    return(View("~/Views/Home/Error.cshtml"));
                                }
                                resultReport.EmbedToken = TokenReponse;
                            }
                        }

                        return(View(resultReport));
                    }


                    //Aqui uno la lista de los valores, esta lista de valores fue almacenada en HomeController,
                    //esto comprende, el campo FiltroTabla, FiltroColumna y los valores de cada uno de ellos.
                    List <EmbedConfig> resulList = new List <EmbedConfig>();

                    result = new EmbedConfig {
                        Username = username, Roles = roles, FiltroTabla = FiltrosTabla, FiltroColumna = FiltrosColumna, ValoresFiltro = ValuesFilter, TiposDato = TiposDato, WorkspaceId = WorkspaceId, ReportId = ReportId
                    };

                    // Create a user token access.
                    if (tokenCredentialsAAD != null)
                    {
                        //TODO: VALIDAR TIEMPO DE EXPIRACIÓN
                        tokenCredentials = (TokenCredentials)tokenCredentialsAAD;
                    }
                    else
                    {
                        var credential = new UserPasswordCredential(Username, Password);

                        // Authenticate using created credentials
                        var authenticationContext = new AuthenticationContext(AuthorityUrl);
                        var authenticationResult  = await authenticationContext.AcquireTokenAsync(ResourceUrl, ApplicationId, credential);

                        if (authenticationResult == null)
                        {
                            result.ErrorMessage = "Authentication Failed.";
                            return(View(result));
                        }

                        tokenCredentials = new TokenCredentials(authenticationResult.AccessToken, "Bearer");
                        System.Web.HttpContext.Current.Session["tokenCredentialsAAD"] = tokenCredentials;
                        System.Web.HttpContext.Current.Cache.Insert(cacheKey, tokenCredentials, null, cTime, cExp, cPri, null);
                    }

                    // Create a Power BI Client object. It will be used to call Power BI APIs.
                    using (var client = new PowerBIClient(new Uri(ApiUrl), tokenCredentials))
                    {
                        // Get a list of reports.
                        var reportsFromWorkspace = System.Web.HttpContext.Current.Session["reportsFromWorkspace"];
                        ODataResponseListReport reports;

                        if (reportsFromWorkspace != null)
                        {
                            reports = (ODataResponseListReport)reportsFromWorkspace;
                        }
                        else
                        {
                            reports = await client.Reports.GetReportsInGroupAsync(WorkspaceId);

                            System.Web.HttpContext.Current.Session["reportsFromWorkspace"] = reports;
                        }

                        // No reports retrieved for the given workspace.
                        if (reports.Value.Count() == 0)
                        {
                            result.ErrorMessage = "No reports were found in the workspace";
                            return(View(result));
                        }

                        Report report;
                        if (string.IsNullOrWhiteSpace(ReportId))
                        {
                            // Get the first report in the workspace.
                            report = reports.Value.FirstOrDefault();
                        }
                        else
                        {
                            report = reports.Value.FirstOrDefault(r => r.Id == ReportId);
                        }

                        if (report == null)
                        {
                            result.ErrorMessage = "No report with the given ID was found in the workspace. Make sure ReportId is valid.";
                            return(View(result));
                        }

                        //GenerateTokenRequest generateTokenRequestParameters;
                        //var generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: "view");
                        var generateTokenRequestParameters = new GenerateTokenRequest();
                        tokenResponse = await client.Reports.GenerateTokenInGroupAsync(WorkspaceId, report.Id, generateTokenRequestParameters);

                        if (tokenResponse == null)
                        {
                            if (TempData["sessionUser"] != null)
                            {
                                ListLogs.Clear();
                                ListLogs.Add("Inicio EmbeddedReport Controller. Failed to generate embed token");
                                ListLogs.Add("ERROR");

                                AddLogDataBase(ListLogs, TempData["sessionUser"]);
                            }
                            result.ErrorMessage = "Failed to generate embed token.";
                            return(View(result));
                        }
                        else
                        {
                            System.Web.HttpContext.Current.Session["tokenResponse"] = tokenResponse;
                        }
                        if (System.Web.HttpContext.Current.Session["tokenResponseExp"] == null)
                        {
                            EmbedToken jwtOri   = (EmbedToken)tokenResponse;
                            DateTime   DateExp  = Convert.ToDateTime(jwtOri.Expiration);
                            var        timeEpox = ConvertToUnixTime(DateExp);
                            System.Web.HttpContext.Current.Session["tokenResponseExp"] = timeEpox;
                        }
                        // Generate Embed Configuration.
                        result.EmbedToken = (EmbedToken)tokenResponse;
                        result.EmbedUrl   = report.EmbedUrl;
                        result.Id         = report.Id;
                        //cli y emp, deben ser reemplazados por la lista de valores.

                        System.Web.HttpContext.Current.Session[reportName] = result;
                        System.Web.HttpContext.Current.Cache.Insert(cacheReportKey, result, null, cTime, cExp, cPri, null);

                        if (TempData["sessionUser"] != null)
                        {
                            ListLogs.Clear();
                            ListLogs.Add("Inicio EmbeddedReport Controller. Token Nuevo");
                            ListLogs.Add("INFO");
                            AddLogDataBase(ListLogs, TempData["sessionUser"]);
                        }
                        return(View(result));
                    }
                }
                catch (HttpOperationException exc)
                {
                    int Linea = GetLineNumber(exc);
                    result.ErrorMessage = Linea.ToString();
                }
                catch (Exception exc)
                {
                    int Linea = GetLineNumber(exc);
                    result.ErrorMessage = "Error:" + exc + " .Línea de Error: " + Linea.ToString();
                }

                return(View(result));
            }
            catch (Exception ex)
            {
                int Linea = GetLineNumber(ex);
                if (TempData["sessionUser"] != null)
                {
                    ListLogs.Clear();
                    ListLogs.Add("Inicio EmbeddedReport Controller. Error. " + ex.Message + " .Línea de Error:" + Linea);
                    ListLogs.Add("INFO");
                    AddLogDataBase(ListLogs, TempData["sessionUser"]);
                }
                return(PartialView("Error" + ex.Message + " .Línea de Error:" + Linea));
            }
        }
 public PowerBIModel(EmbedToken embedToken, string embedUrl)
 {
     EmbedToken = embedToken;
     EmbedUrl   = embedUrl;
 }
        public async Task <ActionResult> EmbedReport(string username, string roles)
        {
            var result = new EmbedConfig();

            try
            {
                result = new EmbedConfig {
                    Username = username, Roles = roles
                };
                var error = GetWebConfigErrors();
                if (error != null)
                {
                    result.ErrorMessage = error;
                    return(View(result));
                }

                // Create a user password cradentials.
                var credential = new UserPasswordCredential(Username, Password);

                // Authenticate using created credentials
                var authenticationContext = new AuthenticationContext(AuthorityUrl);
                var authenticationResult  = await authenticationContext.AcquireTokenAsync(ResourceUrl, ClientId, credential);

                if (authenticationResult == null)
                {
                    result.ErrorMessage = "Authentication Failed.";
                    return(View(result));
                }

                var tokenCredentials = new TokenCredentials(authenticationResult.AccessToken, "Bearer");

                // Create a Power BI Client object. It will be used to call Power BI APIs.
                using (var client = new PowerBIClient(new Uri(ApiUrl), tokenCredentials))
                {
                    var reports = await client.Reports.GetReportsInGroupAsync(GroupId);

                    Report report;
                    if (string.IsNullOrEmpty(ReportId))
                    {
                        // Get the first report in the group.
                        report = reports.Value.FirstOrDefault();
                    }
                    else
                    {
                        report = reports.Value.FirstOrDefault(r => r.Id == ReportId);
                    }

                    if (report == null)
                    {
                        result.ErrorMessage = "Group has no reports.";
                        return(View(result));
                    }


                    var et = new EmbedToken(authenticationResult.AccessToken, null, null);

                    // Generate Embed Configuration.
                    result.EmbedToken = authenticationResult.AccessToken;
                    result.EmbedUrl   = report.EmbedUrl;
                    result.Id         = report.Id;

                    return(View(result));
                }
            }
            catch (HttpOperationException exc)
            {
                result.ErrorMessage = string.Format("Status: {0} ({1})\r\nResponse: {2}\r\nRequestId: {3}", exc.Response.StatusCode, (int)exc.Response.StatusCode, exc.Response.Content, exc.Response.Headers["RequestId"].FirstOrDefault());
            }
            catch (Exception exc)
            {
                result.ErrorMessage = exc.ToString();
            }

            return(View(result));
        }
Exemple #17
0
        static void Main(string[] args)
        {
            try
            {
                // Create a user password cradentials.
                credential = new ClientCredential(Secrets.ClientID, Secrets.ClientSecret);

                // Authenticate using created credentials
                Authorize().Wait();

                using (var client = new PowerBIClient(new Uri(apiUrl), tokenCredentials))
                {
                    #region Embed Token
                    EmbedToken embedToken = null;


                    if (useEmbedToken && !useRLS)
                    {
                        // **** Without RLS ****
                        embedToken = client.Reports.GenerateTokenInGroup(groupId, reportId,
                                                                         new GenerateTokenRequest(accessLevel: "View", datasetId: datasetId.ToString()));
                    }
                    else if (useEmbedToken && useRLS)
                    {
                        // **** With RLS ****

                        // Documentation: https://docs.microsoft.com/power-bi/developer/embedded/embedded-row-level-security
                        // Example:
                        //
                        // Define Embed Token request:
                        //var generateTokenRequestParameters = new GenerateTokenRequest("View", null,
                        //    identities: new List<EffectiveIdentity> { new EffectiveIdentity(username: "******",
                        //        roles: new List<string> { "roleA", "roleB" },
                        //        datasets: new List<string> { "datasetId" }) });
                        //
                        // Generate Embed Token:
                        //var tokenResponse = await client.Reports.GenerateTokenInGroupAsync("groupId", "reportId",
                        //    generateTokenRequestParameters);

                        var rls = new EffectiveIdentity(username: "******", new List <string> {
                            datasetId.ToString()
                        });

                        var rolesList = new List <string>();
                        rolesList.Add("<ENTER ROLE>");
                        rls.Roles = rolesList;

                        embedToken = client.Reports.GenerateTokenInGroup(groupId, reportId,
                                                                         new GenerateTokenRequest(accessLevel: "View", datasetId: datasetId.ToString(), rls));
                    }
                    #endregion

                    #region Output Embed Token

                    if (useEmbedToken)
                    {
                        // Get a single report used for embedding
                        Report report = client.Reports.GetReportInGroup(groupId, reportId);

                        Console.WriteLine("\r*** EMBED TOKEN ***\r");

                        Console.Write("Report Id: ");

                        Console.ForegroundColor = ConsoleColor.Cyan;
                        Console.WriteLine(reportId);
                        Console.ResetColor();

                        Console.Write("Report Embed Url: ");

                        Console.ForegroundColor = ConsoleColor.Cyan;
                        Console.WriteLine(report.EmbedUrl);
                        Console.ResetColor();

                        Console.WriteLine("Embed Token Expiration: ");

                        Console.ForegroundColor = ConsoleColor.Cyan;
                        Console.WriteLine(embedToken.Expiration.ToString());
                        Console.ResetColor();


                        Console.WriteLine("Report Embed Token: ");
                        Console.ForegroundColor = ConsoleColor.Yellow;
                        Console.WriteLine(embedToken.Token);
                        Console.ResetColor();
                    }
                    #endregion

                    #region Output Datasets
                    Console.WriteLine("\r*** DATASETS ***\r");

                    try
                    {
                        // List of Datasets
                        // This method calls for items in a Group/App Workspace. To get a list of items within your "My Workspace"
                        // call GetDatasets()
                        var datasetList = client.Datasets.GetDatasetsInGroup(groupId);

                        foreach (Dataset ds in datasetList.Value)
                        {
                            Console.WriteLine(ds.Id + " | " + ds.Name);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("Error fetching datasets: " + ex.Message);
                        Console.ResetColor();
                    }
                    #endregion

                    #region Output Reports
                    Console.WriteLine("\r*** REPORTS ***\r");

                    try
                    {
                        // List of reports
                        // This method calls for items in a Group/App Workspace. To get a list of items within your "My Workspace"
                        // call GetReports()
                        var reportList = client.Reports.GetReportsInGroup(groupId);

                        foreach (Report rpt in reportList.Value)
                        {
                            Console.WriteLine(rpt.Id + " | " + rpt.Name + " | DatasetID = " + rpt.DatasetId);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("Error fetching reports: " + ex.Message);
                        Console.ResetColor();
                    }
                    #endregion

                    #region Output Dashboards
                    Console.WriteLine("\r*** DASHBOARDS ***\r");

                    try
                    {
                        // List of reports
                        // This method calls for items in a Group/App Workspace. To get a list of items within your "My Workspace"
                        // call GetReports()
                        var dashboards = client.Dashboards.GetDashboardsInGroup(groupId);

                        foreach (Dashboard db in dashboards.Value)
                        {
                            Console.WriteLine(db.Id + " | " + db.DisplayName);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("Error fetching dashboards: " + ex.Message);
                        Console.ResetColor();
                    }
                    #endregion

                    #region Output Gateways
                    Console.WriteLine("\r*** Gateways ***\r");

                    try
                    {
                        var gateways = client.Gateways.GetGateways();

                        Console.WriteLine(gateways.Value[0].Name);

                        //foreach (Gateway g in gateways)
                        //{
                        //    Console.WriteLine(g.Name + " | " + g.GatewayStatus);
                        //}
                    }
                    catch (Exception ex)
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("Error fetching gateways: " + ex.Message);
                        Console.ResetColor();
                    }
                    #endregion
                }
            }
            catch (Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(ex.ToString());
                Console.ResetColor();
            }
        }
Exemple #18
0
        /// <summary>
        /// Returns true if DetailedActivity instances are equal
        /// </summary>
        /// <param name="other">Instance of DetailedActivity to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(DetailedActivity other)
        {
            if (ReferenceEquals(null, other))
            {
                return(false);
            }
            if (ReferenceEquals(this, other))
            {
                return(true);
            }

            return
                ((
                     Description == other.Description ||
                     Description != null &&
                     Description.Equals(other.Description)
                     ) &&
                 (
                     Photos == other.Photos ||
                     Photos != null &&
                     Photos.Equals(other.Photos)
                 ) &&
                 (
                     Gear == other.Gear ||
                     Gear != null &&
                     Gear.Equals(other.Gear)
                 ) &&
                 (
                     Calories == other.Calories ||
                     Calories != null &&
                     Calories.Equals(other.Calories)
                 ) &&
                 (
                     SegmentEfforts == other.SegmentEfforts ||
                     SegmentEfforts != null &&
                     SegmentEfforts.SequenceEqual(other.SegmentEfforts)
                 ) &&
                 (
                     DeviceName == other.DeviceName ||
                     DeviceName != null &&
                     DeviceName.Equals(other.DeviceName)
                 ) &&
                 (
                     EmbedToken == other.EmbedToken ||
                     EmbedToken != null &&
                     EmbedToken.Equals(other.EmbedToken)
                 ) &&
                 (
                     SplitsMetric == other.SplitsMetric ||
                     SplitsMetric != null &&
                     SplitsMetric.SequenceEqual(other.SplitsMetric)
                 ) &&
                 (
                     SplitsStandard == other.SplitsStandard ||
                     SplitsStandard != null &&
                     SplitsStandard.SequenceEqual(other.SplitsStandard)
                 ) &&
                 (
                     Laps == other.Laps ||
                     Laps != null &&
                     Laps.SequenceEqual(other.Laps)
                 ) &&
                 (
                     BestEfforts == other.BestEfforts ||
                     BestEfforts != null &&
                     BestEfforts.SequenceEqual(other.BestEfforts)
                 ));
        }