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); }
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); }
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); }