// 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")); }
/* * 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); }
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); }
// 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")); }
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(); } }
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); }
internal void setContext(mpbdmContext <Guid> db) { this.Context = db; this.domainManager.Context = db; }
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)); }
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)); }
public void setContext(mpbdmContext <Guid> context) { this.Context = context; domainManager.Context = context; }
protected override void Initialize(HttpControllerContext controllerContext) { base.Initialize(controllerContext); db = new mpbdmContext <Guid>(); DomainManager = new FavoritesDomainManager(db, Request, Services, User); }
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); }
// 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)); } }
protected override void Initialize(HttpControllerContext controllerContext) { base.Initialize(controllerContext); db = new mpbdmContext <Guid>(); this.DomainManager = new GroupsDomainManager(db, Request, Services); }
protected override void Initialize(HttpControllerContext controllerContext) { base.Initialize(controllerContext); db = new mpbdmContext <Guid>(); DomainManager = new EntityDomainManager <Companies>(db, Request, Services); }
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)); }
public GroupsDomainManager(mpbdmContext <Guid> context, HttpRequestMessage request, ApiServices services) : base(context, request, services, true) { domainManager = new EntityDomainManager <Groups>(context, request, services, true); }