// // GoogleHelpers.cs // // Author: // Paul Schneider // // Copyright (c) 2015 GNU GPL // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with this program. If not, see . using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNet.Identity; namespace Yavsc.Helpers { using Models.Auth; using Models.Google.Messaging; using Models.Messaging; using Models; /// /// Google helpers. /// public static class GoogleHelpers { /* WAZA /// /// Notifies the event. /// /// The event. /// Evpub. public static async Task NotifyEvent (this HttpClient channel, GoogleAuthSettings googleSettings, CircleEvent evpub) { // ASSERT ModelState.IsValid implies evpub.Circles != null //send a MessageWithPayload to circle members // receive MessageWithPayloadResponse // "https://gcm-http.googleapis.com/gcm/send" var regids = new List(); foreach (var c in evpub.Circles) foreach (var u in c.Members) { regids.AddRange(u.Member.Devices.Select(d => d.GCMRegistrationId)); } if (regids.Count > 0) return null; var request = new HttpRequestMessage(HttpMethod.Get, Constants.GCMNotificationUrl); request.Headers.Authorization = new AuthenticationHeaderValue("key", googleSettings.ApiKey); var msg = new MessageWithPayload() { notification = new Notification() { title = evpub.Title, body = evpub.Description, icon = "icon" }, data = evpub, registration_ids = regids.ToArray() }; var response = await channel.SendAsync(request); var payload = JObject.Parse(await response.Content.ReadAsStringAsync()); return payload.Value(); } */ public static MessageWithPayloadResponse NotifyEvent (this GoogleAuthSettings googleSettings, IEnumerable regids, Event ev) where Event : IEvent { var msg = new MessageWithPayload() { notification = new Notification() { title = ev.Topic+" "+ev.Sender, body = ev.Message, icon = "icon" }, data = ev, registration_ids = regids.ToArray() }; if (regids == null) throw new NotImplementedException("Notify & No GCM reg ids"); using (var m = new SimpleJsonPostMethod("https://gcm-http.googleapis.com/gcm/send",$"key={googleSettings.ApiKey}")) { return m.Invoke(msg); } } public static async Task GetCredentialForGoogleApiAsync(this UserManager userManager, ApplicationDbContext context, string uid) { var user = await userManager.FindByIdAsync(uid); var googleId = context.UserLogins.FirstOrDefault( x => x.UserId == uid ).ProviderKey; if (string.IsNullOrEmpty(googleId)) throw new InvalidOperationException("No Google login"); var token = await context.GetTokensAsync(googleId); return new UserCredential(uid, token); } } }