public static User decodeUser(string data) { User user = new User(); data = data.Replace("\"", ""); Contract contract = new Contract(); string untreatedRoles = Regex.Match(data, @"\[([^\]]*)\]").Groups[1].Value; string treatedRoles = untreatedRoles.Replace(",", "#"); data = data.Replace(untreatedRoles, treatedRoles); data = data.Replace("{", ""); data = data.Replace("}", ""); string[] info = data.Split(','); foreach(string userInfo in info) { string[] uInfo = userInfo.Split(':'); if(uInfo[0].Equals("TKN")) { user.token = uInfo[1]; } else if(uInfo[0].Equals("FNM")) { user.firstName = uInfo[1]; } else if (uInfo[0].Equals("LNM")) { user.lastName = uInfo[1]; } else if (uInfo[0].Equals("UID")) { user.userId = Convert.ToInt32(uInfo[1]); } else if (uInfo[0].Equals("RLS")) { Dictionary<string, bool> roleDictionary = new Dictionary<string, bool>(); roleDictionary.Add("login", false); roleDictionary.Add("admin", false); roleDictionary.Add("manager", false); roleDictionary.Add("read", false); roleDictionary.Add("write", false); roleDictionary.Add("remove", false); uInfo[1] = uInfo[1].Replace("[", ""); uInfo[1] = uInfo[1].Replace("]", ""); string[] roles = uInfo[1].Split('#'); foreach(string role in roles) { if (role.Equals("1")) roleDictionary["login"] = true; else if (role.Equals("2")) roleDictionary["admin"] = true; else if (role.Equals("3")) roleDictionary["manager"] = true; else if (role.Equals("4")) roleDictionary["read"] = true; else if (role.Equals("5")) roleDictionary["write"] = true; else if (role.Equals("6")) roleDictionary["remove"] = true; } user.roles = roleDictionary; } else if (uInfo[0].Equals("CID")) { contract.contractId = Convert.ToInt32(uInfo[1]); } else if (uInfo[0].Equals("CLM")) { contract.lastModifiedWeb = Convert.ToDouble(uInfo[1]); } } user.contract = contract; return user; }
private void performLogin(string response) { string status = ""; string encryptedData = ""; string key = response.Substring(0, 32); string iv = response.Substring(response.Length - 32); int keyIndex = response.IndexOf(key); encryptedData = response.Remove(keyIndex, key.Length); int ivIndex = encryptedData.IndexOf(iv); encryptedData = encryptedData.Remove(ivIndex, iv.Length); string data = Cryptography.decryptRJ256(encryptedData, key, iv); this.userData = JSON.decodeUser(data); if(this.userData.roles["write"]) { this.updateDialogLabel("Buscando configurações"); status = this.configs.getConfigs(this.userData.token); if (status.Equals("OK")) { this.updateDialogLabel("Carregando contrato"); status = this.userData.contract.loadContract(); if (!status.Equals("OK")) { if (status.Equals("NOTFOUND")) { this.updateDialogLabel("Impossível carregar os dados locais"); } else if (status.Equals("ERROR")) { this.updateDialogLabel("Um erro ocorreu ao ler os dados do contrato"); } } else { this.updateDialogLabel("Buscando atualizações"); status = this.userData.contract.getUpdates(this.userData.token, this.configs.consultGateway); if (status.Equals("OK")) this.showMainScreen(); else this.updateDialogLabel("Servidor incomunicável"); } } else { this.updateDialogLabel(status); } } else { this.updateDialogLabel("Usuário sem permissão de uso"); } }