示例#1
0
        public void SetAccess(string userId)
        {
            using (JiveSdkContext db = new JiveSdkContext())
            {
                try
                {
                    //Retrieve the current user from the database
                    //Not recommended for production where it would be more efficient
                    //to user a caching mechanism to minimize sql queries
                    var _myUser = db.Users
                                  .Include("JiveInstance")
                                  .Where(u => u.UserId == userId);
                    User myUser = null;

                    if (_myUser.Count() > 0)
                    {
                        myUser = _myUser.First();

                        if (myUser.DisplayName != null)
                        {
                            ViewBag.ownerName = myUser.DisplayName;
                        }
                        else
                        {
                            ViewBag.ownerName = "Display name not set in DB";
                        }

                        ViewBag.ownerId = userId;
                        ViewBag.jiveUrl = myUser.JiveInstance.Url;
                        string culture = Thread.CurrentThread.CurrentCulture.ToString();
                    }
                    else
                    {
                        //This user is not registered in the database yet

                        string[] jiveInstanceTemp = userId.Split('@');
                        String   userJiveInstance = jiveInstanceTemp[1];



                        // Find the instance ID for the user
                        var _jiveInstanceForUser = db.JiveInstances
                                                   .Include("Users")
                                                   .Include("JiveInstanceSettings")
                                                   .Where(j => j.JiveInstanceId.Equals(userJiveInstance));

                        if (_jiveInstanceForUser.Count() == 0)
                        {
                            //The JiveInstance does not exist yet. This is a legacy setting for apps delivered via the Jive Apps market
                            isNewJiveInstance   = true;
                            jiveInstanceForUser = null;
                        }
                        else
                        {
                            isNewJiveInstance   = false;
                            jiveInstanceForUser = _jiveInstanceForUser.First();
                            if (jiveInstanceForUser.Users.Count() == 0)
                            {
                                jiveInstanceForUser.Users = new List <User>();
                            }
                        }



                        //Create a new JiveInstance if no one has installed the app on this system yet
                        //This is a legacy setting for apps delivered via the Jive Apps market
                        if (isNewJiveInstance == true)
                        {
                            JiveInstance jiveInstance = new JiveInstance();
                            jiveInstance.JiveInstanceId      = jiveInstanceTemp[1];
                            jiveInstance.DateCreated         = DateTime.Now;
                            jiveInstance.LastUpdated         = DateTime.Now;
                            jiveInstance.IsComplete          = false;
                            jiveInstance.Users               = new List <User>();
                            jiveInstance.IsLicensed          = true;
                            jiveInstance.IsInstalledViaAddon = true;
                            db.JiveInstances.Add(jiveInstance);
                            db.SaveChanges();
                            jiveInstanceForUser = jiveInstance;
                        }



                        User user = new User();
                        user.UserId          = userId;
                        user.JiveInstance    = jiveInstanceForUser;
                        user.DateCreated     = DateTime.Now;
                        user.LastUpdated     = DateTime.Now;
                        user.HasInstalledApp = true;

                        db.Users.Add(user);
                        db.SaveChanges();
                        jiveInstanceForUser.Users.Add(user);
                        db.SaveChanges();

                        ViewBag.jiveUrl   = user.JiveInstance.Url;
                        ViewBag.ownerName = "Display name not set in DB";
                        ViewBag.ownerId   = user.UserId;
                    }


                    //Setting some helper data into the viewbag, so we can efficiently build a page

                    //The baseUrl is the system on which our addon is hosted. We need this to set the base_href for our html pages correctly
                    string baseUrl = System.Configuration.ConfigurationManager.AppSettings["baseUrl"];
                    ViewBag.baseUrl = baseUrl;

                    //The appPath is the path of our application, e.g. https://myjiveaddon.azurewebsites.net/apps/app_path
                    //We might need this to build deep links to our application
                    string appPath = System.Configuration.ConfigurationManager.AppSettings["appPath"];
                    ViewBag.appPath = appPath;

                    //Version information for app and included resources. Due to the caching mechanisms in Jive
                    //we recommend to update this when you roll out new versions
                    string jsVersion = System.Configuration.ConfigurationManager.AppSettings["jsVersion"];
                    ViewBag.jsVersion = jsVersion;
                    string appJsVersion = System.Configuration.ConfigurationManager.AppSettings["appJsVersion"];
                    ViewBag.appJsVersion = appJsVersion;


                    ViewBag.jiveUrl = myUser.JiveInstance.Url;
                }
                catch (Exception ex)
                {
                    Trace.WriteLine(ex.Message);
                }
            }
        }
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            try
            {
                if (HttpContext.Current.Request.Headers["authorization"] != null)
                {
                    string authString = HttpContext.Current.Request.Headers["authorization"];
                    string userId     = HttpContext.Current.Request.Headers["x-jive-user-id"];

                    string[] authStringArray = authString.Split('&');
                    string   tenantId        = null;
                    string   jiveUrl         = null;
                    foreach (string authElement in authStringArray)
                    {
                        string[] keyValue = authElement.Split('=');
                        if (keyValue[0].Equals("tenant_id"))
                        {
                            tenantId = keyValue[1];
                        }

                        if (keyValue[0].Equals("jive_url"))
                        {
                            jiveUrl = HttpUtility.UrlDecode(keyValue[1]);
                        }
                    }
                    string ownerId = userId + "@" + tenantId;

                    using (JiveSdkContext db = new JiveSdkContext())
                    {
                        User myUser  = null;
                        var  _myUser = db.Users
                                       .Include("JiveInstance.Users")
                                       .Where(u => u.UserId.Equals(ownerId));
                        if (_myUser.Count() > 0)
                        {
                            myUser = _myUser.First();
                        }
                        else
                        {
                            if (myUser == null)
                            {
                                string[] jiveInstanceTemp = ownerId.Split('@');
                                String   userJiveInstance = jiveInstanceTemp[1];

                                JiveInstance jiveInstanceForUser = null;


                                // Find the instance ID for the user
                                var _jiveInstanceForUser = db.JiveInstances
                                                           .Include("Users")
                                                           .Where(j => j.JiveInstanceId.Equals(userJiveInstance));

                                jiveInstanceForUser = _jiveInstanceForUser.First();
                                if (jiveInstanceForUser.Users == null)
                                {
                                    jiveInstanceForUser.Users = new List <User>();
                                }


                                myUser                 = new User();
                                myUser.DateCreated     = DateTime.Now;
                                myUser.HasInstalledApp = true;
                                myUser.IsComplete      = false;
                                myUser.UserId          = ownerId;
                                myUser.LastUpdated     = DateTime.Now;
                                //
                                db.Users.Add(myUser);
                                myUser.JiveInstance = jiveInstanceForUser;
                                db.SaveChanges();
                                jiveInstanceForUser.Users.Add(myUser);



                                db.SaveChanges();
                            }
                        }

                        GenericIdentity MyIdentity = new GenericIdentity(ownerId);

                        String[]         MyStringArray = { "User" };
                        GenericPrincipal MyPrincipal   =
                            new GenericPrincipal(MyIdentity, MyStringArray);
                        Thread.CurrentPrincipal = MyPrincipal;
                        return(true);
                    }
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message);
                return(false);
            }
        }
示例#3
0
        public async Task <HttpResponseMessage> RegisterJiveInstance(JiveAddonRegistrationDto jiveRegistration)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    _response = await Request.Content.ReadAsStringAsync();

                    //Convert our Jive Addon registration from the Data Transfer Object into an internal object
                    //Example of an add-on registration request
                    //{
                    //    "tenantId": "b22e3911-28ef-480c-ae3b-ca791ba86952",
                    //    "jiveSignatureURL": "https://market.apps.jivesoftware.com/appsmarket/services/rest/jive/instance/validation/8ce5c231-fab8-46b1-b8b2-fc65ascesb5d",
                    //    "timestamp": "2014-02-17T14:07:09.135+0000",
                    //    "jiveUrl": "https://sandbox.jiveon.com",
                    //    "jiveSignature": "r3gMujBUIWLUyvAp81TK9YasdAdDaRtlsQ6x+Ig=",
                    //    "clientSecret": "bmdoprg381uypaffd7xrl123c9znb5fjsb.s",
                    //    "clientId": "mrymd1f8oziyamo0yxdasdw9yovigd9t.i"
                    //}

                    Mapper.CreateMap <JiveAddonRegistrationDto, JiveAddonRegistration>();
                    JiveAddonRegistration myJiveRegistration = Mapper.Map <JiveAddonRegistrationDto, JiveAddonRegistration>(jiveRegistration);

                    db.JiveRegistrations.Add(myJiveRegistration);
                    db.SaveChanges();

                    if (Convert.ToBoolean(jiveRegistration.uninstalled) != true)
                    {
                        //check if this is a valid Jive environment

                        StringBuilder validationPayload = new StringBuilder();
                        validationPayload.Append("clientId:");
                        validationPayload.Append(myJiveRegistration.ClientId + "\n");
                        validationPayload.Append("clientSecret:");

                        System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
                        byte[]     secret     = encoding.GetBytes(myJiveRegistration.ClientSecret);
                        HMACSHA256 hmacsha256 = new HMACSHA256();
                        hmacsha256.ComputeHash(secret);



                        foreach (byte b in hmacsha256.Hash)
                        {
                            validationPayload.AppendFormat("{0:x2}", b);
                        }
                        validationPayload.Append("\n" + "jiveSignatureURL:");
                        validationPayload.Append(myJiveRegistration.JiveSignatureURL + "\n");
                        validationPayload.Append("jiveUrl:");
                        validationPayload.Append(myJiveRegistration.JiveUrl + "\n");
                        validationPayload.Append("tenantId:");
                        validationPayload.Append(myJiveRegistration.TenantId + "\n");
                        validationPayload.Append("timestamp:");
                        validationPayload.Append(myJiveRegistration.Timestamp + "\n");
                        string validationPayloadString = validationPayload.ToString();
                        byte[] binaryPayload           = encoding.GetBytes(validationPayloadString);

                        //Validate with the Jive webservice that the request orininated from JIve
                        //Alternatively validate with your local environment in some form
                        //This method is not fully implemented in this example
                        using (WebClient wc = new WebClient())
                        {
                            wc.Headers.Set("X-Jive-MAC", myJiveRegistration.JiveSignature);
                            try
                            {
                                byte[] postResult = wc.UploadData(myJiveRegistration.JiveSignatureURL, binaryPayload);
                            }
                            catch (System.Net.WebException webEx)
                            {
                                Trace.WriteLine(webEx, "Error");
                            }
                        }
                    }
                    //Check if the Jive instance already exists, otherwise create it

                    JiveInstance myJiveInstance = db.JiveInstances.Find(myJiveRegistration.TenantId);



                    if (myJiveInstance == null)
                    {
                        //Jive instance not created yet. Let's build it

                        myJiveInstance                     = new JiveInstance();
                        myJiveInstance.DateCreated         = DateTime.Now;
                        myJiveInstance.IsComplete          = false;
                        myJiveInstance.JiveInstanceId      = myJiveRegistration.TenantId;
                        myJiveInstance.LastUpdated         = DateTime.Now;
                        myJiveInstance.Url                 = myJiveRegistration.JiveUrl;
                        myJiveInstance.IsComplete          = false;
                        myJiveInstance.IsLicensed          = true;
                        myJiveInstance.IsInstalledViaAddon = true;
                        db.JiveInstances.Add(myJiveInstance);

                        db.SaveChanges();

                        User newAdmin = new User();
                        newAdmin.DateCreated = DateTime.Now;
                    }
                    JiveAddon myJiveAddon;
                    if (Convert.ToBoolean(myJiveRegistration.Uninstalled) == true)
                    {
                        //Addon uninstalled
                        myJiveAddon = db.JiveAddons
                                      .Include("JiveInstance")
                                      .Where(a => a.JiveInstance.JiveInstanceId.Equals(myJiveRegistration.TenantId)).First();
                        myJiveAddon.Uninstalled = true;
                        db.SaveChanges();
                    }
                    else
                    {
                        //Addon is being installed
                        //Create a new add-on
                        var _jiveAddons = db.JiveAddons
                                          .Include("JiveInstance")
                                          .Where(a => a.JiveInstance.JiveInstanceId.Equals(myJiveRegistration.TenantId));


                        if (_jiveAddons.Count() == 0)
                        {
                            myJiveAddon           = new JiveAddon();
                            myJiveAddon.AddonType = "My wonderful app";
                            myJiveAddon.ClientId  = myJiveRegistration.ClientId;
                            string clientSecret = myJiveRegistration.ClientSecret;
                            if (clientSecret.EndsWith(".s"))
                            {
                                clientSecret = clientSecret.TrimEnd('s');
                                clientSecret = clientSecret.TrimEnd('.');
                            }
                            myJiveAddon.ClientSecret     = clientSecret;
                            myJiveAddon.DateCreated      = DateTime.Now;
                            myJiveAddon.JiveInstance     = myJiveInstance;
                            myJiveAddon.Code             = myJiveRegistration.Code;
                            myJiveAddon.Scope            = myJiveRegistration.Scope;
                            myJiveRegistration.Timestamp = myJiveRegistration.Timestamp;
                            myJiveAddon.Uninstalled      = false;
                            db.JiveAddons.Add(myJiveAddon);
                            db.SaveChanges();
                        }
                        else
                        {
                            //Update existing addon

                            myJiveAddon          = _jiveAddons.First();
                            myJiveAddon.ClientId = myJiveRegistration.ClientId;

                            string clientSecret = myJiveRegistration.ClientSecret;
                            if (clientSecret.EndsWith(".s"))
                            {
                                clientSecret = clientSecret.TrimEnd('s');
                                clientSecret = clientSecret.TrimEnd('.');
                            }
                            myJiveAddon.ClientSecret     = clientSecret;
                            myJiveAddon.Code             = myJiveRegistration.Code;
                            myJiveAddon.Scope            = myJiveRegistration.Scope;
                            myJiveRegistration.Timestamp = myJiveRegistration.Timestamp;
                            myJiveAddon.Uninstalled      = false;
                            db.SaveChanges();
                        }
                    }


                    HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, jiveRegistration);
                    return(response);
                }
                catch (Exception ex)
                {
                    Trace.WriteLine(ex, "Error");
                    HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.InternalServerError);
                    return(response);
                }
            }
            else
            {
                return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState));
            }
        }