Esempio n. 1
0
        public static async Task BeginLogin(Microsoft.AspNetCore.Http.HttpContext e, Oauth.E_RPWS_User user, Entities.WebPebbleProject non_proj)
        {
            //Redirect the user to the RPWS oauth screen.
            string returnUri = "https://api.webpebble.get-rpws.com/complete_login";

            if (e.Request.Query.ContainsKey("return"))
            {
                returnUri += $"?return={System.Web.HttpUtility.UrlEncode(e.Request.Query["return"])}";
            }
            else
            {
                returnUri += $"?return={System.Web.HttpUtility.UrlEncode("https://webpebble.get-rpws.com/")}";
            }

            string redir = $"https://blue.api.get-rpws.com/v1/oauth2/?returnuri={System.Web.HttpUtility.UrlEncode(returnUri)}&permissions=1-3-4&name=WebPebble+Web+IDE";

            e.Response.Headers.Add("Location", redir);
            await Program.QuickWriteToDoc(e, $"You should've been redirected to {redir}.", "text/html", 302);
        }
Esempio n. 2
0
        public static async Task FinishLogin(Microsoft.AspNetCore.Http.HttpContext e, Oauth.E_RPWS_User user, Entities.WebPebbleProject non_proj)
        {
            //Called when the user finishes the RPWS oauth. Get the token from the endpoint.
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(e.Request.Query["endpoint"]);

            request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;

            string payload;

            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                using (Stream stream = response.GetResponseStream())
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        payload = reader.ReadToEnd();
                    }

            //Decode payload
            RpwsPayload p = JsonConvert.DeserializeObject <RpwsPayload>(payload);

            if (p.ok == false)
            {
                throw new Exception($"Failed to authenticate with RPWS; {p.message}");
            }

            //Get the token and set it as a cookie. We'll worry about csrf before release.
            string token = p.access_token;

            e.Response.Cookies.Append("access-token", token, new Microsoft.AspNetCore.Http.CookieOptions
            {
                Expires     = new DateTimeOffset(DateTime.UtcNow.AddYears(8), TimeSpan.Zero),
                IsEssential = true,
                Path        = "/"
            });

            //Redirect to the redirect path.
            string redir = e.Request.Query["return"];

            e.Response.Headers.Add("Location", redir);
            await Program.QuickWriteToDoc(e, $"You should've been redirected to {redir}.", "text/html", 302);
        }
Esempio n. 3
0
        public static async Task PollUserData(Microsoft.AspNetCore.Http.HttpContext e, Oauth.E_RPWS_User user, Entities.WebPebbleProject non_proj)
        {
            //Write out user settings and projects
            OutputData output = new OutputData();

            //Get the projects list from this user.
            var collect  = Program.database.GetCollection <Entities.WebPebbleProject>("projects");
            var projects = collect.Find(x => x.authorId == user.uuid).ToArray();

            //Convert this to a smaller format.
            output.projects = new ProjectsListFormat[projects.Length];
            //Convert
            for (int i = 0; i < output.projects.Length; i++)
            {
                ProjectsListFormat f = new ProjectsListFormat();
                var proj             = projects[i];
                f.href             = "https://webpebble.get-rpws.com/project/" + proj.projectId + "/manage/";
                f.icon             = "";
                f.id               = proj.projectId;
                f.name             = proj.name;
                output.projects[i] = f;
            }

            //Now, copy settings.
            output.settings = new OutputDataSettings
            {
                theme = user.webpebble_data.theme
            };

            //Write this
            await Program.QuickWriteJsonToDoc(e, output);
        }