func Tesses.CrossLang.Shell.Login(dd) { var accounts = []; if(FS.Local.FileExists(Env.CrossLangConfig / "auth.json")) { accounts = Json.Decode(FS.ReadAllText(FS.Local,Env.CrossLangConfig / "auth.json")); if(TypeOf(accounts) != "List") accounts = []; } //crosslang login local https://cpkg.tesseslanguage.com/ //crosslang login [NAME] [HOST] [TOKEN] if(dd.Arguments.Length < 3) { //not valid Console.WriteLine("USAGE: crosslang login [name] [host]"); Console.WriteLine("USAGE: crosslang login [name] [host] [token]"); Console.WriteLine(); Console.WriteLine("ARGUMENTS:"); Console.WriteLine("name: the session name"); Console.WriteLine("host: the host of the package server such as https://cpkg.tesseslanguage.com/"); Console.WriteLIne("token: allows you to login from an existing session token, if it is not included this will ask for email and password"); } else if(dd.Arguments.Length == 3) { //name server-url var name = dd.Arguments[1]; var host = dd.Arguments[2]; Console.Write("Name (empty for CrossLang Shell): "); var name = Console.ReadLine() ?? ""; if(name == "") name = "CrossLang Shell"; Console.Write("Email: "); var email = Console.ReadLine(); Console.Write("Password: "); var echo = Console.Echo; Console.Echo = false; var password = Console.ReadLine(); Console.Echo = echo; Console.WriteLine(); var accountRequest = { name, email, password }; var req = { Method="POST", Body = Net.Http.TextHttpRequestBody(accountRequest.ToString(),"application/json") }; var http = Net.Http.MakeRequest($"{host.TrimEnd('/')}/api/v1/login",req); if(http.StatusCode == 401 && http.ResponseHeaders.TryGetFirst("Content-Type") == "application/json") { var json = Json.Decode(http.ReadAsString()); Console.WriteLined($"Failed to login, reason={json.reason}"); return 1; } else if(http.ResponseHeaders.TryGetFirst("Content-Type") == "application/json") { var json = Json.Decode(http.ReadAsString()); var hasSet=false; each(var ents : accounts) { if(ents.name == name) { ents.host = host; ents.token = json.token; hasSet=true; } } if(!hasSet) { accounts.Add({ name, host, token = json.token }); } FS.WriteAllText(FS.Local,Env.CrossLangConfig / "auth.json",Json.Encode(accounts)); Console.WriteLine("Logged in successfully"); } } else if(dd.Arguments.Length == 4) { var name = dd.Arguments[1]; var host = dd.Arguments[2]; var token = dd.Arguments[3]; var hasSet=false; each(var ents : accounts) { if(ents.name == name) { ents.host = host; ents.token = token; hasSet=true; } } if(!hasSet) { accounts.Add({ name, host, token }); } FS.WriteAllText(FS.Local,Env.CrossLangConfig / "auth.json",Json.Encode(accounts)); Console.WriteLine("Added session successfully"); } }