using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using SeniorAssistant.Models; using SeniorAssistant.Controllers; using LinqToDB; using System.Linq; using System; using SeniorAssistant.Models.Users; using SeniorAssistant.Data; using System.Threading.Tasks; using System.Web; using System.IO; namespace IdentityDemo.Controllers { [ApiExplorerSettings(IgnoreApi = true)] [Route("[controller]/[action]")] public class AccountController : BaseController { private static readonly string NoteModified = "Il tuo dottore ha modificato la nota per te"; private static readonly string InvalidLogIn = "Username o Password sbagliati"; private static readonly string AlreadyLogIn = "L'utente e' gia' loggato"; private static readonly string UsernameDupl = "Lo username selezionato e' gia' in uso"; private static readonly string ModNotExists = "L'oggetto da modificare non esiste"; private static readonly string AlreadyPatie = "Sei gia' un paziente"; private static readonly string DocNotExists = "Il dottore selezionato non esiste"; private static readonly string InsertAsDoct = "Ti ha inserito come il suo dottore: "; [HttpPost] public async Task _login(string username, string password) { var result = await (from u in Db.Users where u.Username.Equals(username) && u.Password.Equals(password) select u).ToListAsync(); if (result.Count == 1) { User user = result.First(); HttpContext.Session.SetString(Username, username); HttpContext.Session.SetString("email", user.Email); HttpContext.Session.SetString("name", user.Name); HttpContext.Session.SetString("lastname", user.LastName); var isDoc = (from d in Db.Doctors where d.Username.Equals(username) select d).ToArray().FirstOrDefault() != null; HttpContext.Session.SetString("role", isDoc? "doctor":"patient"); return Json(OkJson); } return Json(new JsonResponse() { Success = false, Message = InvalidLogIn }); } [HttpPost] public ActionResult _logout() { HttpContext.Session.Clear(); return Json(OkJson); } [HttpPost] public async Task _register(User user, string code = "") { try { Db.Insert(user); if (code != null && code.Equals("444442220")) { Db.Insert(new Doctor { Username = user.Username }); }; return await _login(user.Username, user.Password); } catch { return Json(new JsonResponse() { Success = false, Message = UsernameDupl }); } } [HttpPost] public async Task _notification(string username, string message, string redirectUrl = "#") { return await LoggedAction(() => { Db.Insert(new Notification() { Body = message, Username = HttpContext.Session.GetString(Username), Receiver = username, Url = redirectUrl, Time = DateTime.Now }); return Json(OkJson); }); } [HttpPut] public async Task _notification(int id) { return await LoggedAction(() => { JsonResponse response = OkJson; Notification note = Db.Notifications.Where(n => n.Id == id).ToArray().FirstOrDefault(); if(note != null) { note.Seen = DateTime.Now; Db.Update(note); } else { response.Success = false; response.Message = ModNotExists; } return Json(response); }); } [HttpPost] public async Task _addDoc(string doctor) { return await LoggedAction(() => { string username = HttpContext.Session.GetString(Username); var isAlreadyPatient = Db.Patients.Where(p => p.Username.Equals(username)).ToArray().FirstOrDefault() != null; if (isAlreadyPatient) return Json(new JsonResponse() { Success = false, Message = AlreadyPatie }); var docExist = Db.Doctors.Where(d => d.Username.Equals(doctor)).ToArray().FirstOrDefault() != null; if(!docExist) return Json(new JsonResponse() { Success = false, Message = DocNotExists }); Db.Insert(new Patient() { Doctor = doctor, Username = username }); var a = _notification(doctor, InsertAsDoct + username); return Json(OkJson); }); } [HttpPost] public async Task _sendMessage(string receiver, string body) { return await LoggedAction(() => { string username = HttpContext.Session.GetString(Username); Message message = new Message() { Receiver = receiver, Body = body, Time = DateTime.Now, Username = username }; Db.Insert(message); return Json(OkJson); }); } [HttpPut] public async Task _addNote(string patient, string text) { return await LoggedAccessDataOf(patient, true, () => { var pat = Db.Patients.Where((p) => p.Username.Equals(patient)).FirstOrDefault(); pat.Notes = text; Db.Update(pat); var a = _notification(patient, NoteModified); return Json(OkJson); }); } [HttpPut] public async Task _minHeartToPatient(string patient, int value) { return await LoggedAccessDataOf(patient, true, () => { var pat = Db.Patients.Where((p) => p.Username.Equals(patient)).FirstOrDefault(); pat.MinHeart = value; Db.Update(pat); return Json(OkJson); }); } [HttpPut] public async Task _maxHeartToPatient(string patient, int value) { return await LoggedAccessDataOf(patient, true, () => { var pat = Db.Patients.Where((p) => p.Username.Equals(patient)).FirstOrDefault(); pat.MaxHeart = value; Db.Update(pat); return Json(OkJson); }); } [HttpPost] public async Task _save(IFormFile file) { return LoggedAction(() => { var loggedUser = HttpContext.Session.GetString(Username); if (file.Length > 0) { var name = loggedUser + ".jpg"; var path = Path.Combine(("~/uploads/"), name); var stream = new FileStream(path, FileMode.Create); file.CopyTo(stream); var user = (from u in Db.Users where u.Username.Equals(loggedUser) select u).FirstOrDefault(); user.Avatar = path; Db.Update(User); } return Json(OkJson); }); /* var loggedUser = HttpContext.Session.GetString(Username); long size = file.Length; // full path to file in temp location var filePathPart = Path.GetDirectoryName("~/AdminLTE-2.4.3/dist/img/"); var fileName = Path.GetFileName(loggedUser + ".jpg"); var filePath = Path.Combine(filePathPart,fileName); if (size > 0) { using (var stream = new FileStream(filePath, FileMode.Create)) { await file.CopyToAsync(stream); } } return Json(new JsonResponse()); */ } } }