Beispiel #1
0
        static void Main(string[] args)
        {
            var user_attributes = new Dictionary <string, string>();

            user_attributes["an_attribute_name"]   = "my_attribute_value";
            user_attributes["my_number_attribute"] = "1000.232";
            var config = new LookerEmbedConfiguration()
            {
                HostName = "your-hostname.looker.com",
                //HostPort = 9999,
                Secret               = "--- your secret here ---",
                ExternalUserId       = "57",
                UserFirstName        = "Embed",
                UserLastName         = "User",
                Permissions          = new string[] { "explore", "see_user_dashboards", "see_lookml_dashboards", "access_data", "see_looks", "download_with_limit" },
                Models               = new string[] { "imdb" },
                GroupIds             = new int[] { 4, 2 },
                ExternalGroupId      = "awesome_engineers",
                UserAttributeMapping = user_attributes
            };

            string url = GetLookerEmbedUrl("/embed/dashboards/1", config);

            Console.WriteLine(url);
            Console.ReadLine();
        }
Beispiel #2
0
        public static Uri GetLookerEmbedUrl(string targetPath, LookerEmbedConfiguration config)
        {
            var uri = new UriBuilder
            {
                Scheme = "https",
                Host   = config.HostName,
                Port   = config.HostPort,
                Path   = "/login/embed/"
            };

            var builder = new StringBuilder();

            builder.AppendFormat("{0}://{1}{2}{3}", uri.Scheme, uri.Uri.Authority, uri.Path,
                                 UrlEncodeForLooker(targetPath));

            var unixTime                   = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
            var time                       = unixTime.ToString();
            var json_nonce                 = JsonConvert.SerializeObject(config.Nonce);
            var json_external_user_id      = JsonConvert.SerializeObject(config.ExternalUserId);
            var json_permissions           = JsonConvert.SerializeObject(config.Permissions);
            var json_group_ids             = JsonConvert.SerializeObject(config.GroupIds);
            var json_external_group_id     = JsonConvert.SerializeObject(config.ExternalGroupId);
            var json_user_attribute_values = JsonConvert.SerializeObject(config.UserAttributeMapping);
            var json_models                = JsonConvert.SerializeObject(config.Models);
            var json_session_length        = ((long)config.SessionLength.TotalSeconds).ToString();

            // order of elements is important
            var stringToSign = String.Join("\n", new string[] {
                uri.Uri.Authority,
                "/login/embed/" + UrlEncodeForLooker(targetPath),
                json_nonce,
                time,
                json_session_length,
                json_external_user_id,
                json_permissions,
                json_models,
                json_group_ids,
                json_external_group_id,
                json_user_attribute_values,
                config.AccessFilters
            });

            var signature = EncodeString(stringToSign, config.Secret);

            var json_first_name         = JsonConvert.SerializeObject(config.UserFirstName);
            var json_last_name          = JsonConvert.SerializeObject(config.UserLastName);
            var json_force_logout_login = JsonConvert.SerializeObject(config.ForceLogoutLogin);

            var qparams = new Dictionary <string, string>()
            {
                { "nonce", json_nonce },
                { "time", time },
                { "session_length", json_session_length },
                { "external_user_id", json_external_user_id },
                { "permissions", json_permissions },
                { "models", json_models },
                { "group_ids", json_group_ids },
                { "external_group_id", json_external_group_id },
                { "user_attributes", json_user_attribute_values },
                { "access_filters", config.AccessFilters },
                { "first_name", json_first_name },
                { "last_name", json_last_name },
                { "force_logout_login", json_force_logout_login },
                { "signature", signature }
            };

            builder.Append("?");
            builder.Append(string.Join("&", qparams.Select(kvp => kvp.Key + "=" + (UrlEncodeForLooker(kvp.Value)))));

            return(builder.ToString());
        }