private YammerUser GetYammerUser(JToken user) { var yammerUser = new YammerUser(); yammerUser.Id = Convert.ToInt32(GetToken(user, "id")); yammerUser.UserName = GetToken(user, "name"); yammerUser.FirstName = GetToken(user, "first_name"); yammerUser.LastName = GetToken(user, "last_name"); yammerUser.FullName = GetToken(user, "full_name"); yammerUser.Email = GetToken(user, "email"); yammerUser.JobTitle = GetToken(user, "job_title"); yammerUser.Department = GetToken(user, "department"); yammerUser.Timezone = GetToken(user, "timezone"); yammerUser.NetworkId = Convert.ToInt32(GetToken(user, "network_id")); yammerUser.NetworkName = GetToken(user, "network_name"); yammerUser.Url = GetToken(user, "web_url"); var activatedAt = user["activated_at"]; yammerUser.ActivatedAt = activatedAt.Type == JTokenType.Null ? DateTime.MinValue : (DateTime)user["activated_at"]; var phoneNumbers = new List <string>(); var numbers = user["contact"]["phone_numbers"]; foreach (var number in numbers) { phoneNumbers.Add(number["number"].ToString()); } yammerUser.PhoneNumbers = phoneNumbers; return(yammerUser); }
private WebPartEntity CreateYammerWebPart(string feedType, YammerUser user, string yammerGroupName, string title) { YammerGroup group; string groupId; // Notice that in general we do not recommend of matching Yammer group for each site to avoid "group pollution" in Yammer if (feedType == "Group") { // Get Yammer Group - Creates if does not exist. Let's create these as public by default. group = YammerUtility.CreateYammerGroup(yammerGroupName, false, ConfigurationManager.AppSettings["YammerAccessToken"]); // Get Yammer web part return(YammerUtility.GetYammerGroupDiscussionPart(user.network_name, group.id, false, false)); } else { if (!string.IsNullOrEmpty(YammerExistingGroups.SelectedValue)) { group = YammerUtility.GetYammerGroupByName(YammerExistingGroups.SelectedValue, ConfigurationManager.AppSettings["YammerAccessToken"]); groupId = group.id.ToString(); } else { groupId = ""; } // Get OpenGrap object for using that as the discussion feed return(YammerUtility.GetYammerOpenGraphDiscussionPart(user.network_name, Request["SPHostUrl"] + "/" + txtUrl.Text, false, false, "SharePoint Site Feed - " + title, "", groupId)); } }
/// <summary> /// Actual sub site creation and modification logic. Calls Core component methods to make things work /// </summary> /// <param name="hostWeb"></param> /// <param name="url"></param> /// <param name="template"></param> /// <param name="title"></param> /// <param name="description"></param> /// <param name="feedType"></param> /// <param name="yammerGroupName"></param> /// <returns></returns> public void CreateSubSite(Web hostWeb, string url, string template, string title, string description, string feedType, string yammerGroupName) { // Create new sub site Web newWeb = hostWeb.CreateWeb(title, url, description, template, 1033); // Set theme for the site newWeb.SetThemeToSubWeb(hostWeb, "Orange"); //Remove the out of the box "NewsFeed" web part newWeb.DeleteWebPart("SitePages", "Site feed", "home.aspx"); // Let's first get the details on the Yammer network using the access token WebPartEntity wpYammer; YammerUser user = YammerUtility.GetYammerUser(ConfigurationManager.AppSettings["YammerAccessToken"]); // Created Yammer web part with needed configuration wpYammer = CreateYammerWebPart(feedType, user, yammerGroupName, title); // Add Yammer web part to the page newWeb.AddWebPartToWikiPage("SitePages", wpYammer, "home.aspx", 2, 1, false); // Add theme to the site and apply that ApplyThemeToSite(hostWeb, newWeb); }
/// <summary> /// Actual sub site creation and modification logic. Calls Core component methods to make things work /// </summary> /// <param name="hostWeb"></param> /// <param name="url"></param> /// <param name="template"></param> /// <param name="title"></param> /// <param name="description"></param> /// <param name="feedType"></param> /// <param name="yammerGroupName"></param> /// <returns></returns> public void CreateSubSite(Web hostWeb, string url, string template, string title, string description, string feedType, string yammerGroupName) { // Create new sub site Web newWeb = hostWeb.CreateSite(title, url, description, template, 1033); // Set theme for the site newWeb.SetThemeToSubWeb(hostWeb, "Orange"); //Remove the out of the box "NewsFeed" web part newWeb.DeleteWebPart("SitePages", "Site feed", "home.aspx"); // Let's first get the details on the Yammer network using the access token WebPartEntity wpYammer; YammerUser user = YammerUtility.GetYammerUser(ConfigurationManager.AppSettings["YammerAccessToken"]); // Notice that in general we do not recommend of matching Yammer group for each site to avoid "group pollution" in Yammer if (feedType == "Group") { // Get Yammer Group - Creates if does not exist. Let's create these as public by default. YammerGroup group = YammerUtility.CreateYammerGroup(yammerGroupName, false, ConfigurationManager.AppSettings["YammerAccessToken"]); // Get Yammer web part wpYammer = YammerUtility.GetYammerGroupDiscussionPart(user.network_name, group.id, false, false); } else { // Get OpenGrap object for using that as the discussion feed wpYammer = YammerUtility.GetYammerOpenGraphDiscussionPart(user.network_name, Request["SPHostUrl"] + "/" + txtUrl.Text, false, false, "SharePoint Site Feed - " + title); } // Add Yammer web part to the page newWeb.AddWebPartToWikiPage("SitePages", wpYammer, "home.aspx", 2, 1, false); }
/// <summary> /// Returns Yammer groups based on the access token. All groups are returned for registered apps. /// </summary> /// <param name="accessToken">accessToken will have all the required permissions to update or retrieve data to Yammer on behalf of the user</param> /// <returns>All groups in the network</returns> public static List <YammerGroup> GetYammerGroups(string accessToken) { // Get user YammerUser user = GetYammerUser(accessToken); //get the users groups to check for the group var response = GetYammerJson($"https://www.yammer.com/api/v1/groups/for_user/{user.id}.json", accessToken); List <YammerGroup> groups = JsonUtility.Deserialize <List <YammerGroup> >(response); // Updated network information to the group data foreach (var item in groups) { item.network_id = user.network_id; item.network_name = user.network_name; } return(groups); }
public void Publish(EarnedBadgeItemDTO earnedBadge) { //Get the user that earned the badge string userEmail = string.Format("{0}@magenic.com", earnedBadge.EmployeeADName); string userUrl = GetUserUrl(userEmail); try { var response = MakeGetRequest(userUrl, Token); YammerUser yammerUser = YammerUser.GetInstanceFromJson(response.Substring(1, response.Length - 2)); //let's post a message now to this group bool broadcastToAll = false; string msg = string.Format(YammerMessageText, yammerUser.UserID, earnedBadge.Name, broadcastToAll.ToString(), "https://badgeapplication.magenic.com/", earnedBadge.ImagePath, earnedBadge.Name, earnedBadge.Tagline); //try adding the message response = MakePostRequest(msg, MessageUrl, Token); if (!string.IsNullOrEmpty(response)) { YammerMessage newMsg = YammerMessage.GetInstanceFromJson(response); } } catch (WebException ex) { var httpResponse = ex.Response as HttpWebResponse; if (httpResponse != null && httpResponse.StatusCode == HttpStatusCode.NotFound) { Logger.Warn <YammerPublisher>(string.Format("Problem getting Yammer information for URL: {0}. Most likely cause is the user was not setup in Yammer, continuing to process.", userUrl)); } else { throw; } } }
static void Main(string[] args) { try { string yammerVerifiedAdminToken = "q0GDG1ayUuRat4Vp8H8LA"; string yammerClientId = "y6S4FgjV2faSL0zGigXSQ"; string yammerUserId = string.Empty; // = "1554119433"; string yammerTokenEndpoint = "https://www.yammer.com/api/v1/oauth/tokens.json"; string userEmail = "*****@*****.**"; // Get Yammer user by email string yammerUserEndpointByEmail = "https://www.yammer.com/api/v1/users/by_email.json"; string userInfo = MakeGetRequest(string.Format("{0}?email={1}", yammerUserEndpointByEmail, userEmail), yammerVerifiedAdminToken); List <YammerUser> users = JsonConvert.DeserializeObject <List <YammerUser> >(userInfo); if (users.Count > 0) { yammerUserId = users[0].UserID; } // Get Yammer user access token string tokenInfo = MakeGetRequest(string.Format("{0}?user_id={1}&consumer_key={2}", yammerTokenEndpoint, yammerUserId, yammerClientId), yammerVerifiedAdminToken); List <YammerToken> tokens = JsonConvert.DeserializeObject <List <YammerToken> >(tokenInfo); if (tokens.Count > 0) { string yammerUserAccessToken = tokens[0].AccessToken; string tokenInfoMsg = MakeGetRequest("https://www.yammer.com/api/v1/messages.json", yammerUserAccessToken); YammerMessages messages = JsonConvert.DeserializeObject <YammerMessages>(tokenInfoMsg); } } catch (Exception ex) { Console.WriteLine("An error occurred in Main: " + ex.Message); } return; try { const string CLIENT_ID = "lajdsfljdsaflkjdsaf"; const string CLIENT_SECRET = "alsjasdfljadslkjdsaf"; const string REDIR_URL = "http://sppdxwin8"; string userName = "******"; string pwd = "asdfasdfa"; string permUrl = "https://www.yammer.com/dialog/oauth?client_id=" + CLIENT_ID + "&redirect_uri=" + REDIR_URL; string authUrl1 = "https://www.yammer.com/session?client_id=" + CLIENT_ID; string authUrl2 = "https://www.yammer.com/contoso.com/oauth2/" + CLIENT_ID + "/authorize?client_id=" + CLIENT_ID + "&display=page&redirect_uri=" + HttpUtility.UrlEncode(REDIR_URL) + "&response_type=code"; string accTokenUrl = "https://www.yammer.com/oauth2/access_token.json?client_id=" + CLIENT_ID + "&client_secret=" + CLIENT_SECRET + "&code="; //********************************************************************************************** //APPLICATION ENDPOINTS string graphPostUrl = "https://www.yammer.com/api/v1/activity.json"; string messageUrl = "https://www.yammer.com/api/v1/messages"; string currentUserUrl = "https://www.yammer.com/api/v1/users/current.json"; string allUsersUrl = "https://www.yammer.com/api/v1/users.json"; string allGroupsUrl = "https://www.yammer.com/api/v1/groups.json"; string oneUserUrl = "https://www.yammer.com/api/v1/users/[:id].json"; //********************************************************************************************** //string activityUrl = "https://www.yammer.com/api/v1/streams/activities.json?access_token=adsfasdfasdf"; string qsCode = string.Empty; string accessToken = ""; string postResults = string.Empty; string response = string.Empty; if (string.IsNullOrEmpty(accessToken)) { while (string.IsNullOrEmpty(qsCode)) { response = MakeGetRequest(permUrl); //look for authenticity token string authToken = GetAuthenticityToken(response); if (!string.IsNullOrEmpty(authToken)) { //POST /session?client_id=zdpOzrUurBtvHhoTJ00wQ HTTP/1.1 //sample post body: //utf8=%E2%9C%93&authenticity_token=bP%2Bh0zNGkeL7z%2Bj5stJ%2FPsyZb1O75SPmS5RpkXfSFgo%3D&network_permalink=&[email protected]&password=asdfadsf&remember_me=on //string foo = System.Web.HttpUtility.UrlEncodeUnicode("bP+h0zNGkeL7z+j5stJ/PsyZb1O75SPmS5RpkXfSFgo="); //.net recommends UrlEncode //***************************************************** //need to abstract the post calls to a generic function //***************************************************** string postBody = "utf8=%E2%9C%93&authenticity_token=" + System.Web.HttpUtility.UrlEncode(authToken) + "&network_permalink=&login="******"&password="******"&remember_me=on"; //make the first post for code postResults = MakePostRequest(postBody, authUrl1); //get the next auth token that was returned and can be used to get an access code string preCodeToken = GetAuthenticityToken(postResults); //******************************************************************** //REMOVED 12/17/2013 TO REFLECT CHANGES YAMMER MADE IN AUTH PROCEDURE ////POST /contoso.com/oauth2/adsfasdfsadf/authorize?client_id=asdfasdfasdf&display=page&redirect_uri=http%3A%2F%2Fsppdxwin8&response_type=code HTTP/1.1 ////sample post body: ////authenticity_token=KBBgLyjZYGKzUs616hEV5BGqgX6N4D0ejJZ%2FG4zvDsI%3D&_method=post //postBody = "authenticity_token=" + preCodeToken + "&_method=post"; ////make the next post //postResults = MakePostRequest(postBody, authUrl2); //******************************************************************** //****************************************************************** //ADDED 12/17/2013 TO REFLECT CHANGES YAMMER MADE IN AUTH PROCEDURE response = MakeGetRequest(permUrl, string.Empty, true); //****************************************************************** } //now look for the query string qsCode = wResp.ResponseUri.Query; } if (qsCode.IndexOf("code") > -1) { string accessCode = qsCode.Substring(qsCode.IndexOf("=") + 1); response = MakeGetRequest(accTokenUrl + accessCode); if (!string.IsNullOrEmpty(response)) { YammerAccessToken jat = YammerAccessToken.GetInstanceFromJson(response); if (!string.IsNullOrEmpty(jat.TokenResponse.Token)) { accessToken = jat.TokenResponse.Token; } } } } YammerAction action = YammerAction.ReadAllMessages; if (!string.IsNullOrEmpty(accessToken)) { if (action == YammerAction.PostToApp) { #region Post To An App Page using Object Graph //create a new object to write to the graph YammerGraphObject go = new YammerGraphObject(); go.Activity.Action = "create"; go.Activity.Actor = new YammerActor("Steve Peschka", "*****@*****.**"); go.Activity.Message = "Hey can we finally get this crazy write stuff working??"; go.Activity.Users.Add(new YammerActor("Anne Wallace", "*****@*****.**")); go.Activity.Users.Add(new YammerActor("Garth Fort", "*****@*****.**")); YammerGraphObjectInstance jo = new YammerGraphObjectInstance(); jo.Url = "http://www.vbtoys.com"; jo.Title = "yammo objectola"; go.Activity.Object = jo; string postData = go.ToString(); #region Working Sample Post Data //test3 // postData = @"{ // ""activity"": { // ""actor"": { // ""name"": ""Steve Peschka"", // ""email"": ""*****@*****.**"" // }, // ""action"": ""create"", // ""object"": { // ""url"": ""http://*****:*****@contoso.com"",""name"":""Anne Wallace""},{""email"":""*****@*****.**"",""name"":""Garth Fort""}] // }"; #endregion response = MakePostRequest(postData, graphPostUrl, accessToken, "application/json"); #endregion } else if (action == YammerAction.ReadAllMessages) { #region Read All Messages response = MakeGetRequest(messageUrl + ".json", accessToken); YammerMessages yms = YammerMessages.GetInstanceFromJson(response); foreach (YammerMessage ym in yms.Messages) { if (!string.IsNullOrEmpty(ym.MessageContent.PlainText)) { Console.WriteLine("Message: " + ym.MessageContent.PlainText + Environment.NewLine); } else { Console.WriteLine("Message ID " + ym.ID + "had no message in the body."); } } #endregion } else if (action == YammerAction.PostMessage) { #region Post A New Message //get info about the current user so you can see the group memberships response = MakeGetRequest(currentUserUrl, accessToken); YammerUser yu = YammerUser.GetInstanceFromJson(response); //get only the groups out of there var groups = from YammerGroupsAndFeeds y in yu.SettingsAndFeedsAndGroups.GroupsAndFeeds where y.Type == "group" select y; List <YammerGroupsAndFeeds> myGroups = groups.ToList <YammerGroupsAndFeeds>(); //enumerate all the groups //foreach (YammerGroupsAndFeeds y in myGroups) //{ // Console.WriteLine(y.GroupID); //} //just as an example, getting the IT Support group var itGroup = from YammerGroupsAndFeeds yg in myGroups where yg.Name == "IT Support" select yg; YammerGroupsAndFeeds it = itGroup.First <YammerGroupsAndFeeds>(); if (it != null) { //let's post a message now to this group bool broadcastToAll = false; //form POST - these are the variables: //body - The text of the message body. //group_id - The ID of the group to which the message should be posted. //replied_to_id - The message ID this message is in reply to. //direct_to_id - Send a private message directly to the user indicated. //broadcast=true - This message should be broadcast to all users. The access token should belong to a verified admin user in paid Yammer networks. //topicn - Topics to apply to the message. Can use topic1 through topic20. //Console.WriteLine("Type in the message you want posted to the Yammer IT Group then press enter:"); //string myMessage = Console.ReadLine(); //string msg = "body=" + myMessage + "&group_id=" + // it.GroupID + "&broadcast=" + broadcastToAll.ToString(); string msg = "body=Thanks [[user:1504829560]] for your big sale!" + "&group_id=3095986" + "&broadcast=" + broadcastToAll.ToString(); //try adding the message response = MakePostRequest(msg, messageUrl + ".json", accessToken); if (!string.IsNullOrEmpty(response)) { YammerMessages newMsg = YammerMessages.GetInstanceFromJson(response); Console.WriteLine("message sent: " + newMsg.Messages[0].MessageContent.PlainText); } } #endregion } else if (action == YammerAction.GetAllUsers) { #region Get All Users ////get info about the current user so you can see the group memberships //response = MakeGetRequest(allUsersUrl, accessToken); //List<YammerUser> users = JsonConvert.DeserializeObject<List<YammerUser>>(response); List <YammerUser> users = GetPagedData <YammerUser>(allUsersUrl, accessToken); //you could take each user though and emit Xml where //you have email, UserID, JobTitle, FullName, FirstName, Lastname, Department and //a semi-colon delimited list of group and feed IDs //when they authenticate, you could lookup into Xml based on their email claim (identity claim) //and get JobTitle, Department and list of group IDs, and then lookup each group in the Xml //and add a role claim //the JobTitle and Department are probably useful claims for granting rights, but the //email, FullName, FirstName and LastName probably just good for finding a person, and //then you grant rights to the associated email address ////returns null //YammerUser steve = users.Where(e => // e.ContactInfo.EmailAddresses.Contains( // new YammerEmailAddresses("*****@*****.**", "primary"))).FirstOrDefault<YammerUser>(); //foreach (YammerUser user in users) //{ // Console.WriteLine(user.FullName); //} #endregion } else if (action == YammerAction.GetAllGroups) { #region Get All Groups //Stopwatch sw = new Stopwatch(); //sw.Start(); //total groups: 18616 List <YammerGroup> groups = GetPagedData <YammerGroup>(allGroupsUrl, accessToken); //total public groups: 9791 List <YammerGroup> publicGroups = groups.Where(p => p.PrivacyLevel == "public").ToList <YammerGroup>(); //time to filter in where loop: 509184 ms //time to filter once after data's returned: 509205 ms //total time approx 8.48 minutes //sw.Stop(); //Debug.WriteLine(sw.ElapsedMilliseconds); #endregion } else if (action == YammerAction.GetOnePerson) { #region Get One User //1504829560 - anne wallace //get info about the current user so you can see the group memberships response = MakeGetRequest(oneUserUrl.Replace("[:id]", "1504829560"), accessToken); YammerUser yu = YammerUser.GetInstanceFromJson(response); #endregion } } else { Console.WriteLine("Failed to get access token!"); } //close our response object wResp.Close(); } catch (Exception ex) { Console.WriteLine("An error occurred in Main: " + ex.Message); } }