Ejemplo n.º 1
0
        // Enter a new shard - i.e. an empty database - to the shard map, allocate a first tenant to it
        // and kick off EF intialization of the database to deploy schema
        // public void RegisterNewShard(string server, string database, string user, string pwd, string appname, int key)
        public void RegisterNewShard(string server, string database, string connstr, string key)
        {
            Shard         shard;
            ShardLocation shardLocation = new ShardLocation(server, database);

            if (!this.ShardMap.TryGetShard(shardLocation, out shard))
            {
                shard = this.ShardMap.CreateShard(shardLocation);
            }

            SqlConnectionStringBuilder connStrBldr = new SqlConnectionStringBuilder(connstr);

            connStrBldr.DataSource     = server;
            connStrBldr.InitialCatalog = database;

            // Go into a DbContext to trigger migrations and schema deployment for the new shard.
            // This requires an un-opened connection.
            using (var db = new mpbdmContext <Guid>(connStrBldr.ConnectionString))
            {
                // Run a query to engage EF migrations
                (from b in db.Companies
                 select b).Count();
            }

            // Register the mapping of the tenant to the shard in the shard map.
            // After this step, DDR on the shard map can be used
            PointMapping <Guid> mapping;

            if (!this.ShardMap.TryGetMappingForKey(new Guid(key), out mapping))
            {
                this.ShardMap.CreatePointMapping(new Guid(key), shard);
            }
        }
        // POST api/CustomLogin
        public HttpResponseMessage Post(ChangePassRequest changeRequest)
        {
            string shardKey = Sharding.FindShard(User);
            // NEED TO RECHECK CONTEXT MUST DETERMINE COMPANY -> MUST FIND CORRECT DataBase
            mpbdmContext <Guid> context = new mpbdmContext <Guid>(WebApiConfig.ShardingObj.ShardMap, new Guid(shardKey), WebApiConfig.ShardingObj.connstring);
            Account             account = context.Accounts.Include("User").Where(a => a.User.Email == changeRequest.email).SingleOrDefault();

            if (account != null)
            {
                byte[] incoming = CustomLoginProviderUtils.hash(changeRequest.oldpass, account.Salt);

                if (CustomLoginProviderUtils.slowEquals(incoming, account.SaltedAndHashedPassword))
                {
                    if (changeRequest.password == changeRequest.repass)
                    {
                        byte[] newpass = CustomLoginProviderUtils.hash(changeRequest.password, account.Salt);
                        account.SaltedAndHashedPassword = newpass;
                        context.SaveChanges();
                        return(this.Request.CreateResponse(HttpStatusCode.Created));
                    }
                    return(this.Request.CreateResponse(HttpStatusCode.BadRequest, "Passes don't match"));
                }
            }
            return(this.Request.CreateResponse(HttpStatusCode.Unauthorized, "Invalid email or password"));
        }
Ejemplo n.º 3
0
        /*
         * Dont be misleading it get the shardKey we need on each request
         * BUT sets the DomainManager's context to look at the correct shard
         */
        private string getShardKey()
        {
            string shardKey = Sharding.FindShard(User);

            db = new mpbdmContext <Guid>(WebApiConfig.ShardingObj.ShardMap, new Guid(shardKey), WebApiConfig.ShardingObj.connstring);
            ((EntityDomainManager <Companies>)DomainManager).Context = db;
            return(shardKey);
        }
Ejemplo n.º 4
0
        private string getShardKey()
        {
            string shardKey = Sharding.FindShard(User);

            db = new mpbdmContext <Guid>(WebApiConfig.ShardingObj.ShardMap, new Guid(shardKey), WebApiConfig.ShardingObj.connstring);
            ((FavoritesDomainManager)DomainManager).setContext(db);
            ((FavoritesDomainManager)DomainManager).User = User;
            return(shardKey);
        }
Ejemplo n.º 5
0
        // POST api/CustomLogin
        public HttpResponseMessage Post(LoginRequest loginRequest)
        {
            Guid shardKey;

            // SEND A QUERY TO ALL SHARD TO DETECT OUR SHARD!!!!
            // SAVE companiesId to shardKey!
            using (MultiShardConnection conn = new MultiShardConnection(WebApiConfig.ShardingObj.ShardMap.GetShards(), WebApiConfig.ShardingObj.connstring))
            {
                using (MultiShardCommand cmd = conn.CreateCommand())
                {
                    // CHECK SCHEMA
                    // SQL INJECTION SECURITY ISSUE
                    cmd.CommandText      = "SELECT CompaniesID FROM [mpbdm].[Accounts] JOIN [mpbdm].[Users] ON [mpbdm].[Users].Id = [mpbdm].[Accounts].User_Id WHERE email='" + loginRequest.email + "'";
                    cmd.CommandType      = CommandType.Text;
                    cmd.ExecutionOptions = MultiShardExecutionOptions.IncludeShardNameColumn;
                    cmd.ExecutionPolicy  = MultiShardExecutionPolicy.PartialResults;
                    // Async
                    using (MultiShardDataReader sdr = cmd.ExecuteReader())
                    {
                        bool res = sdr.Read();
                        if (res != false)
                        {
                            shardKey = new Guid(sdr.GetString(0));
                        }
                        else
                        {
                            return(this.Request.CreateResponse(HttpStatusCode.Unauthorized, "Account doesn't exist!"));
                        }
                    }
                }
            }
            // Connect with entity framework to the specific shard
            mpbdmContext <Guid> context = new mpbdmContext <Guid>(WebApiConfig.ShardingObj.ShardMap, shardKey, WebApiConfig.ShardingObj.connstring);
            Account             account = context.Accounts.Include("User").Where(a => a.User.Email == loginRequest.email).SingleOrDefault();

            if (account != null)
            {
                byte[] incoming = CustomLoginProviderUtils.hash(loginRequest.password, account.Salt);

                if (CustomLoginProviderUtils.slowEquals(incoming, account.SaltedAndHashedPassword))
                {
                    ClaimsIdentity claimsIdentity = new ClaimsIdentity();
                    claimsIdentity.AddClaim(new Claim(ClaimTypes.NameIdentifier, account.User.Email));
                    // Custom Claim must be added to CustomLoginProvider too !!
                    claimsIdentity.AddClaim(new Claim("shardKey", account.User.CompaniesID));
                    var               customLoginProvider = new CustomLoginProvider(handler);
                    LoginResult       loginResult         = customLoginProvider.CreateLoginResult(claimsIdentity, Services.Settings.MasterKey);
                    MobileLoginResult res = new MobileLoginResult(account, loginResult);
                    return(this.Request.CreateResponse(HttpStatusCode.OK, res));
                }
            }
            return(this.Request.CreateResponse(HttpStatusCode.Unauthorized, "Invalid username or password"));
        }
Ejemplo n.º 6
0
        private void initDd(string database)
        {
            Shard temp;

            if (!this.ShardMap.TryGetShard(new ShardLocation(server, database), out temp))
            {
                temp = this.ShardMap.CreateShard(new ShardLocation(server, database));
            }

            string connstr = ConfigurationManager.ConnectionStrings["ElasticConnectionString"].ConnectionString;
            SqlConnectionStringBuilder connStrBldr = new SqlConnectionStringBuilder(connstr);

            connStrBldr.DataSource     = server;
            connStrBldr.InitialCatalog = database;

            // Go into a DbContext to trigger migrations and schema deployment for the new shard.
            // This requires an un-opened connection.
            using (var db = new mpbdmContext <Guid>(connStrBldr.ConnectionString))
            {
                // Run a query to engage EF migrations
                (from b in db.Companies
                 select b).Count();
            }
        }
Ejemplo n.º 7
0
 public FavoritesDomainManager(mpbdmContext <Guid> context, HttpRequestMessage request, ApiServices services, IPrincipal User)
     : base(context, request, services, true)
 {
     this.User     = User;
     domainManager = new EntityDomainManager <Favorites>(context, request, services, true);
 }
Ejemplo n.º 8
0
 internal void setContext(mpbdmContext <Guid> db)
 {
     this.Context = db;
     this.domainManager.Context = db;
 }
Ejemplo n.º 9
0
        public async Task <HttpResponseMessage> Post(string contactId)
        {
            string shardKey        = Sharding.FindShard(User);
            mpbdmContext <Guid> db = new mpbdmContext <Guid>(WebApiConfig.ShardingObj.ShardMap, new Guid(shardKey), WebApiConfig.ShardingObj.connstring);
            // Security issue check company
            Contacts contact = db.Set <Contacts>().Include("Groups").Where(s => s.Id == contactId && s.Groups.CompaniesID == shardKey).FirstOrDefault();

            if (contact == null)
            {
                this.Request.CreateResponse(HttpStatusCode.BadRequest, "Contact doesnt't exist!");
            }

            CloudStorageAccount acc            = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["Azure"].ConnectionString);
            CloudBlobClient     blobClient     = acc.CreateCloudBlobClient();
            CloudBlobContainer  photoContainer = blobClient.GetContainerReference("images");

            await photoContainer.CreateIfNotExistsAsync();

            var provider = new AzureBlobMultipartFormDataStreamProvider(photoContainer);

            await this.Request.Content.ReadAsMultipartAsync(provider);

            foreach (var file in provider.FileData)
            {
                //the LocalFileName is going to be the absolute Uri of the blob (see GetStream)
                //use it to get the blob info to return to the client
                var blob = await photoContainer.GetBlobReferenceFromServerAsync(file.LocalFileName);

                var fileNameGuid = Guid.NewGuid().ToString();
                // Copy to get new URL
                ICloudBlob newBlob = null;
                if (blob is CloudBlockBlob)
                {
                    newBlob = photoContainer.GetBlockBlobReference(fileNameGuid);
                }
                else
                {
                    newBlob = photoContainer.GetPageBlobReference(fileNameGuid);
                }
                //Initiate blob copy
                await newBlob.StartCopyFromBlobAsync(blob.Uri);

                ////Now wait in the loop for the copy operation to finish
                //while (true)
                //{
                //    newBlob.FetchAttributes();
                //    if (newBlob.CopyState.Status != CopyStatus.Pending)
                //    {
                //        break;
                //    }
                //    //Sleep for a second may be
                //    System.Threading.Thread.Sleep(1000);
                //}
                blob.Delete();

                await newBlob.FetchAttributesAsync();

                string url = newBlob.Uri.ToString();
                //// DELETING ANY OLD BLOBS
                //if (contact.ImageUrl != null)
                //{
                //    var oldBlob = photoContainer.GetBlobReferenceFromServer(contact.ImageUrl);
                //    oldBlob.Delete();
                //}
                ////////////////////////////
                //contact.ImageUrl = url;
                contact.ImageUrl = newBlob.Name.ToString();

                try
                {
                    db.SaveChanges();
                }
                catch (Exception ex)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, "CannotSaveChanges!"));
                }
            }
            return(Request.CreateResponse(HttpStatusCode.OK));
        }
Ejemplo n.º 10
0
        public async Task <HttpResponseMessage> Post()
        {
            string shardKey        = Sharding.FindShard(User);
            mpbdmContext <Guid> db = new mpbdmContext <Guid>(WebApiConfig.ShardingObj.ShardMap, new Guid(shardKey), WebApiConfig.ShardingObj.connstring);
            // Security issue check company
            var   user       = User as ServiceUser;
            Users userEntity = db.Set <Users>().Where(s => s.Id == user.Id).FirstOrDefault();

            if (userEntity == null)
            {
                this.Request.CreateResponse(HttpStatusCode.BadRequest, "User doesnt't exist!");
            }

            CloudStorageAccount acc            = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["Azure"].ConnectionString);
            CloudBlobClient     blobClient     = acc.CreateCloudBlobClient();
            CloudBlobContainer  photoContainer = blobClient.GetContainerReference("images");
            await photoContainer.CreateIfNotExistsAsync();

            var provider = new AzureBlobMultipartFormDataStreamProvider(photoContainer);

            await this.Request.Content.ReadAsMultipartAsync(provider);

            foreach (var file in provider.FileData)
            {
                var blob = await photoContainer.GetBlobReferenceFromServerAsync(file.LocalFileName);

                var        fileNameGuid = Guid.NewGuid().ToString();
                ICloudBlob newBlob      = null;
                if (blob is CloudBlockBlob)
                {
                    newBlob = photoContainer.GetBlockBlobReference(fileNameGuid);
                }
                else
                {
                    newBlob = photoContainer.GetPageBlobReference(fileNameGuid);
                }
                await newBlob.StartCopyFromBlobAsync(blob.Uri);

                blob.Delete();
                await newBlob.FetchAttributesAsync();

                string url = newBlob.Uri.ToString();

                //// DELETING ANY OLD BLOBS
                //if (userEntity.ImageUrl != null)
                //{
                //    var oldBlob = photoContainer.GetBlobReferenceFromServer(userEntity.ImageUrl);
                //    oldBlob.Delete();
                //}
                ////////////////////////////
                // UPDATE imageUrl of user
                //userEntity.ImageUrl = url;
                userEntity.ImageUrl = newBlob.Name.ToString();

                try
                {
                    db.SaveChanges();
                }
                catch (Exception ex)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, "CannotSaveChanges!"));
                }
            }
            return(Request.CreateResponse(HttpStatusCode.OK));
        }
Ejemplo n.º 11
0
 public void setContext(mpbdmContext <Guid> context)
 {
     this.Context          = context;
     domainManager.Context = context;
 }
Ejemplo n.º 12
0
 protected override void Initialize(HttpControllerContext controllerContext)
 {
     base.Initialize(controllerContext);
     db            = new mpbdmContext <Guid>();
     DomainManager = new FavoritesDomainManager(db, Request, Services, User);
 }
Ejemplo n.º 13
0
        protected override void Seed(mpbdmContext <Guid> context)
        {
            /*
             * COMPANIES
             */
            string[]         companiesArray  = new string[2];
            int              count_companies = 0;
            List <Companies> companies       = new List <Companies>
            {
                new Companies {
                    Id = "2c8c7462-d6ca-429c-9021-21203bea780d", Name = "Sieben", Address = "Αθήνα", Email = "*****@*****.**"
                },
                new Companies {
                    Id = "48344df7-4837-4144-b1c8-6470aeb9dae4", Name = "Coca-Cola", Address = "Αθήνα", Email = "*****@*****.**"
                },
            };

            foreach (Companies company in companies)
            {
                companiesArray[count_companies] = company.Id;
                context.Set <Companies>().Add(company);
                count_companies++;
            }


            /*
             * USERS
             */
            Users[]      usersArray  = new Users[5];
            int          count_users = 0;
            List <Users> users       = new List <Users>
            {
                new Users {
                    Id = "Google:105535740556221909032", FirstName = "Στέφανος", LastName = "Λιγνός", Email = "*****@*****.**", CompaniesID = companiesArray[0]
                },
                new Users {
                    Id = "Google:108551266495594343585", FirstName = "Μάνος", LastName = "Ψαράκης", Email = "*****@*****.**", CompaniesID = companiesArray[1]
                },
                new Users {
                    Id = "Facebook:762253580534078", FirstName = "Nikos", LastName = "Atlas", Email = "*****@*****.**", CompaniesID = companiesArray[0]
                },
                new Users {
                    Id = "custom:nikatlas", FirstName = "Nikatlas", LastName = "Atlas", Email = "*****@*****.**", CompaniesID = companiesArray[0]
                },
                new Users {
                    Id = "custom:steflignos", FirstName = "Stefanos", LastName = "Lignos", Email = "*****@*****.**", CompaniesID = companiesArray[0]
                },
            };

            foreach (Users user in users)
            {
                usersArray[count_users] = user;
                context.Set <Users>().Add(user);
                count_users++;
            }

            byte[]  salt = CustomLoginProviderUtils.generateSalt();
            Account nik  = new Account
            {
                Id       = Guid.NewGuid().ToString(),
                Username = "******",
                Salt     = salt,
                SaltedAndHashedPassword = CustomLoginProviderUtils.hash("123321qwe", salt),
                User = usersArray[3]
            };
            Account stef = new Account
            {
                Id       = Guid.NewGuid().ToString(),
                Username = "******",
                Salt     = salt,
                SaltedAndHashedPassword = CustomLoginProviderUtils.hash("123321qwe", salt),
                User = usersArray[4]
            };

            List <Account> accs = new List <Account>
            {
                nik, stef
            };

            foreach (Account acc in accs)
            {
                context.Set <Account>().Add(acc);
            }

            /*
             * GROUPS
             */
            string[]      groupsArray  = new string[8];
            int           count_groups = 0;
            List <Groups> groups       = new List <Groups>
            {
                new Groups {
                    Id = Guid.NewGuid().ToString(), Name = "Research & development", Address = "Αθήνα", Visible = true, CompaniesID = companiesArray[0]
                },
                new Groups {
                    Id = Guid.NewGuid().ToString(), Name = "Digital Marketing", Address = "Αθήνα", Visible = true, CompaniesID = companiesArray[0]
                },
                new Groups {
                    Id = Guid.NewGuid().ToString(), Name = "Human Resources", Address = "Αθήνα", Visible = true, CompaniesID = companiesArray[0]
                },
                new Groups {
                    Id = Guid.NewGuid().ToString(), Name = "Sales & Marketing", Address = "Αθήνα", Visible = true, CompaniesID = companiesArray[0]
                },
                new Groups {
                    Id = Guid.NewGuid().ToString(), Name = "Other", Address = "Στο Πουθενά", Visible = true, CompaniesID = companiesArray[0]
                },
                new Groups {
                    Id = Guid.NewGuid().ToString(), Name = "Human Resources", Address = "Αθήνα", Visible = true, CompaniesID = companiesArray[1]
                },
                new Groups {
                    Id = Guid.NewGuid().ToString(), Name = "Sales & Marketing", Address = "Αθήνα", Visible = true, CompaniesID = companiesArray[1]
                },
                new Groups {
                    Id = Guid.NewGuid().ToString(), Name = "None", Address = "Στο Πουθενά", Visible = true, CompaniesID = companiesArray[1]
                },
            };

            foreach (Groups group in groups)
            {
                groupsArray[count_groups] = group.Id;
                context.Set <Groups>().Add(group);
                count_groups++;
            }


            /*
             * CONTACTS
             */
            string[]        contactsArray  = new string[22];
            int             count_contacts = 0;
            List <Contacts> contacts       = new List <Contacts>
            {
                new Contacts {
                    Id = Guid.NewGuid().ToString(), FirstName = "Μαρία", LastName = "Κουνάκη", Phone = "6974767832", Email = "*****@*****.**", Visible = true, GroupsID = groupsArray[1]
                },
                new Contacts {
                    Id = Guid.NewGuid().ToString(), FirstName = "Φίλιππος", LastName = "Κολέτσης", Phone = "6973245684", Email = "*****@*****.**", Visible = true, GroupsID = groupsArray[1]
                },
                new Contacts {
                    Id = Guid.NewGuid().ToString(), FirstName = "Γιώργος", LastName = "Αργυράκης", Phone = "6974532123", Email = "*****@*****.**", Visible = true, GroupsID = groupsArray[1]
                },
                new Contacts {
                    Id = Guid.NewGuid().ToString(), FirstName = "Μάρα", LastName = "Κυμπιζη", Phone = "6932456789", Email = "*****@*****.**", Visible = true, GroupsID = groupsArray[1]
                },
                new Contacts {
                    Id = Guid.NewGuid().ToString(), FirstName = "Κωνσταντίνος", LastName = "Τζαβάρας", Phone = "697356745", Email = "*****@*****.**", Visible = true, GroupsID = groupsArray[3]
                },
                new Contacts {
                    Id = Guid.NewGuid().ToString(), FirstName = "Αντωνία", LastName = "Ρεμούνδου", Phone = "6975634251", Email = "*****@*****.**", Visible = true, GroupsID = groupsArray[3]
                },
                new Contacts {
                    Id = Guid.NewGuid().ToString(), FirstName = "Ολγα", LastName = "Ζούμπου", Phone = "6934567324", Email = "*****@*****.**", Visible = true, GroupsID = groupsArray[3]
                },
                new Contacts {
                    Id = Guid.NewGuid().ToString(), FirstName = "Νικόλ", LastName = "Μπουζούκου", Phone = "6943245622", Email = "*****@*****.**", Visible = true, GroupsID = groupsArray[2]
                },
                new Contacts {
                    Id = Guid.NewGuid().ToString(), FirstName = "Στέφανος", LastName = "Λιγνός", Phone = "6974053682", Email = "*****@*****.**", Visible = true, GroupsID = groupsArray[0]
                },
                new Contacts {
                    Id = Guid.NewGuid().ToString(), FirstName = "Νίκος", LastName = "Καλαβρουζιώτης", Phone = "6982108999", Email = "*****@*****.**", Visible = true, GroupsID = groupsArray[0]
                },
                new Contacts {
                    Id = Guid.NewGuid().ToString(), FirstName = "Φοίβος", LastName = "Σταμόπουλος", Phone = "6945849202", Email = "*****@*****.**", Visible = true, GroupsID = groupsArray[0]
                },
                new Contacts {
                    Id = Guid.NewGuid().ToString(), FirstName = "Μάνος", LastName = "Ψαράκης", Phone = "6942466270", Email = "*****@*****.**", Visible = true, GroupsID = groupsArray[7]
                },
                new Contacts {
                    Id = Guid.NewGuid().ToString(), FirstName = "Βασιλική", LastName = "Τραχάνη", Phone = "6938627519", Email = "*****@*****.**", Visible = true, GroupsID = groupsArray[0]
                },
                new Contacts {
                    Id = Guid.NewGuid().ToString(), FirstName = "Ελένη", LastName = "Παπανικολάου", Phone = "6943567743", Email = "*****@*****.**", Visible = true, GroupsID = groupsArray[0]
                },
                new Contacts {
                    Id = Guid.NewGuid().ToString(), FirstName = "Γιώργος", LastName = "Σαχπατζίδης", Phone = "6945823948", Email = "*****@*****.**", Visible = true, GroupsID = groupsArray[0]
                },
                new Contacts {
                    Id = Guid.NewGuid().ToString(), FirstName = "Κωνσταντίνα", LastName = "Παπαδοπούλου", Phone = "6981222331", Email = "*****@*****.**", Visible = true, GroupsID = groupsArray[5]
                },
                new Contacts {
                    Id = Guid.NewGuid().ToString(), FirstName = "Γιάννης", LastName = "Παντζόπουλος", Phone = "6974567342", Email = "*****@*****.**", Visible = true, GroupsID = groupsArray[5]
                },
                new Contacts {
                    Id = Guid.NewGuid().ToString(), FirstName = "Γιάννης", LastName = "Ρέγκας", Phone = "6946578423", Email = "*****@*****.**", Visible = true, GroupsID = groupsArray[5]
                },
                new Contacts {
                    Id = Guid.NewGuid().ToString(), FirstName = "Μαρία", LastName = "Σκαλκούτα", Phone = "6933745862", Email = "*****@*****.**", Visible = true, GroupsID = groupsArray[5]
                },
                new Contacts {
                    Id = Guid.NewGuid().ToString(), FirstName = "Κωνσταντίνος", LastName = "Τζάνης", Phone = "6975678421", Email = "*****@*****.**", Visible = true, GroupsID = groupsArray[6]
                },
                new Contacts {
                    Id = Guid.NewGuid().ToString(), FirstName = "Αντωνία", LastName = "Ρέβη", Phone = "6981234767", Email = "*****@*****.**", Visible = true, GroupsID = groupsArray[6]
                },
                new Contacts {
                    Id = Guid.NewGuid().ToString(), FirstName = "Όλγα", LastName = "Ζούνη", Phone = "6943567422", Email = "*****@*****.**", Visible = true, GroupsID = groupsArray[6]
                },
            };

            foreach (Contacts contact in contacts)
            {
                contactsArray[count_contacts] = contact.Id;
                context.Set <Contacts>().Add(contact);
                count_contacts++;
            }


            /*
             * FAVORITES
             */
            List <Favorites> favorites = new List <Favorites>
            {
                new Favorites {
                    Id = Guid.NewGuid().ToString(), Visible = true, UsersID = usersArray[0].Id, ContactsID = contactsArray[0]
                },
                new Favorites {
                    Id = Guid.NewGuid().ToString(), Visible = true, UsersID = usersArray[3].Id, ContactsID = contactsArray[1]
                },
                new Favorites {
                    Id = Guid.NewGuid().ToString(), Visible = true, UsersID = usersArray[4].Id, ContactsID = contactsArray[7]
                },
                new Favorites {
                    Id = Guid.NewGuid().ToString(), Visible = true, UsersID = usersArray[0].Id, ContactsID = contactsArray[8]
                },
                new Favorites {
                    Id = Guid.NewGuid().ToString(), Visible = true, UsersID = usersArray[1].Id, ContactsID = contactsArray[16]
                },
            };

            foreach (Favorites favorite in favorites)
            {
                context.Set <Favorites>().Add(favorite);
            }



            base.Seed(context);
        }
Ejemplo n.º 14
0
        // POST api/CustomRegistration
        public HttpResponseMessage Post(RegistrationRequest registrationRequest)
        {
            if (!Regex.IsMatch(registrationRequest.email, "^([a-z.A-Z0-9]{1,})@([a-z]{2,}).[a-z]{2,}$"))
            {
                return(this.Request.CreateResponse(HttpStatusCode.BadRequest, "Invalid email!"));
            }
            else if (registrationRequest.password.Length < 8)
            {
                return(this.Request.CreateResponse(HttpStatusCode.BadRequest, "Invalid password (at least 8 chars required)"));
            }

            // MUST FIND COMPANY BY EMAIL
            // CREATE a MULTISHARD COMMAND
            // SEARCH BY EMAIL
            mpbdmContext <Guid> context = null;
            Guid shardKey;

            using (MultiShardConnection conn = new MultiShardConnection(WebApiConfig.ShardingObj.ShardMap.GetShards(), WebApiConfig.ShardingObj.connstring))
            {
                using (MultiShardCommand cmd = conn.CreateCommand())
                {
                    // Get emailDomain
                    char[] papaki = new char[1];
                    papaki[0] = '@';
                    // SQL INJECTION SECURITY ISSUE
                    string emailDomain = registrationRequest.email.Split(papaki).Last();

                    // CHECK SCHEMA
                    cmd.CommandText      = "SELECT Id FROM [mpbdm].[Companies] WHERE Email LIKE '%" + emailDomain + "'";
                    cmd.CommandType      = CommandType.Text;
                    cmd.ExecutionOptions = MultiShardExecutionOptions.IncludeShardNameColumn;
                    cmd.ExecutionPolicy  = MultiShardExecutionPolicy.PartialResults;

                    using (MultiShardDataReader sdr = cmd.ExecuteReader())
                    {
                        bool res = sdr.Read();
                        if (res != false)
                        {
                            shardKey = new Guid(sdr.GetString(0));
                        }
                        else
                        {
                            if (registrationRequest.CompanyName == null || registrationRequest.CompanyAddress == null)
                            {
                                return(this.Request.CreateResponse(HttpStatusCode.Forbidden, "Company under this email domain doesn't exist! To create a company with your registration please provide CompanyName and CompanyAddress parameters"));
                            }


                            Companies comp = new Companies();
                            comp.Id = Guid.NewGuid().ToString();

                            comp.Name    = registrationRequest.CompanyName;
                            comp.Address = registrationRequest.CompanyAddress;
                            comp.Email   = registrationRequest.email;
                            comp.Deleted = false;

                            // SHARDING Find where to save the new company
                            Shard shard = WebApiConfig.ShardingObj.FindRoomForCompany();
                            WebApiConfig.ShardingObj.RegisterNewShard(shard.Location.Database, comp.Id);
                            //Connect to the db registered above
                            shardKey = new Guid(comp.Id);
                            context  = new mpbdmContext <Guid>(WebApiConfig.ShardingObj.ShardMap, shardKey, WebApiConfig.ShardingObj.connstring);
                            // Add to the db
                            context.Companies.Add(comp);
                            context.SaveChanges();
                        }
                    }
                }
            }
            //////////////////////////////////////////////////////////////////////

            // MUST RECHECK CORRECT DB!!!!!!!!!!!
            if (context == null)
            {
                context = new mpbdmContext <Guid>(WebApiConfig.ShardingObj.ShardMap, shardKey, WebApiConfig.ShardingObj.connstring);
            }
            Account account = null;

            var aa = context.Set <Account>();
            var bb = aa.Where(a => a.User.Email == registrationRequest.email);

            account = bb.FirstOrDefault();
            if (account != null)
            {
                return(this.Request.CreateResponse(HttpStatusCode.BadRequest, "Email already exists"));
            }
            else
            {
                byte[] salt = CustomLoginProviderUtils.generateSalt();

                string compId = shardKey.ToString();

                Users newUser = new Users
                {
                    Id          = CustomLoginProvider.ProviderName + ":" + registrationRequest.email,
                    CompaniesID = compId,
                    FirstName   = registrationRequest.firstName,
                    LastName    = registrationRequest.lastName,
                    Email       = registrationRequest.email
                };

                Account newAccount = new Account
                {
                    Id = Guid.NewGuid().ToString(),
                    //Username = registrationRequest.username,
                    Salt = salt,
                    SaltedAndHashedPassword = CustomLoginProviderUtils.hash(registrationRequest.password, salt),
                    User = newUser
                };

                context.Users.Add(newUser);
                context.Accounts.Add(newAccount);
                try
                {
                    context.SaveChanges();
                }
                catch (Exception ex)
                {
                    var a = ex.InnerException;
                }
                return(this.Request.CreateResponse(HttpStatusCode.Created));
            }
        }
Ejemplo n.º 15
0
 protected override void Initialize(HttpControllerContext controllerContext)
 {
     base.Initialize(controllerContext);
     db = new mpbdmContext <Guid>();
     this.DomainManager = new GroupsDomainManager(db, Request, Services);
 }
Ejemplo n.º 16
0
 protected override void Initialize(HttpControllerContext controllerContext)
 {
     base.Initialize(controllerContext);
     db            = new mpbdmContext <Guid>();
     DomainManager = new EntityDomainManager <Companies>(db, Request, Services);
 }
Ejemplo n.º 17
0
        public async Task <HttpResponseMessage> Post(string groupsId)
        {
            CloudStorageAccount acc            = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["Azure"].ConnectionString);
            CloudBlobClient     blobClient     = acc.CreateCloudBlobClient();
            CloudBlobContainer  photoContainer = blobClient.GetContainerReference("temp");

            await photoContainer.CreateIfNotExistsAsync();

            var provider = new AzureBlobMultipartFormDataStreamProvider(photoContainer);

            await this.Request.Content.ReadAsMultipartAsync(provider);

            //var photos = new List<PhotoViewModel>();

            foreach (var file in provider.FileData)
            {
                //the LocalFileName is going to be the absolute Uri of the blob (see GetStream)
                //use it to get the blob info to return to the client
                var blob = await photoContainer.GetBlobReferenceFromServerAsync(file.LocalFileName);

                await blob.FetchAttributesAsync();

                string url = blob.Uri.ToString();
                //provider.GetStream(this.RequestContext);
                //FileStream fs = new FileStream();
                //blob.DownloadToStream(fs);


                //FileStream fs = new FileStream(url, FileMode.Open, FileAccess.Read);
                //HttpClient cl = new HttpClient();
                Stream ss = new MemoryStream();
                blob.DownloadToStream(ss);

                HSSFWorkbook templateWorkbook = new HSSFWorkbook(ss);

                HSSFSheet sheet = (HSSFSheet)templateWorkbook.GetSheet("Sheet1");

                string shardKey        = Sharding.FindShard(User);
                mpbdmContext <Guid> db = new mpbdmContext <Guid>(WebApiConfig.ShardingObj.ShardMap, new Guid(shardKey), WebApiConfig.ShardingObj.connstring);
                for (int i = 1; true; i++)
                {
                    var row = sheet.GetRow(i);
                    if (row == null)
                    {
                        break;
                    }

                    Contacts cont = new Contacts();
                    cont.FirstName = row.GetCell(0).RichStringCellValue.String;
                    cont.LastName  = row.GetCell(1).RichStringCellValue.String;
                    cont.Email     = row.GetCell(2).RichStringCellValue.String;
                    cont.Phone     = row.GetCell(3).NumericCellValue.ToString();
                    cont.GroupsID  = (groupsId == "valueUndefined") ? row.GetCell(4).RichStringCellValue.String : groupsId;
                    cont.Id        = Guid.NewGuid().ToString();
                    cont.Deleted   = false;
                    cont.Visible   = true;

                    var chk = db.Set <Contacts>().Where(s => s.Email == cont.Email && s.LastName == cont.LastName && s.Groups.Companies.Id == shardKey).FirstOrDefault();
                    if (chk != null)
                    {
                        continue;
                    }

                    db.Set <Contacts>().Add(cont);
                }
                try
                {
                    db.SaveChanges();
                }
                catch (Exception ex)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, "Propably the Foreign Key GroupId is wrong on some of your Contacts!!! Make sure the groupId exists!"));
                }
            }
            return(Request.CreateResponse(HttpStatusCode.OK));
        }
Ejemplo n.º 18
0
 public GroupsDomainManager(mpbdmContext <Guid> context, HttpRequestMessage request, ApiServices services)
     : base(context, request, services, true)
 {
     domainManager = new EntityDomainManager <Groups>(context, request, services, true);
 }