Esempio n. 1
0
        public ReplyData get_domain(IPAddress remoteIP, int remotePort, List <string> arguments, string body, string method, Dictionary <string, string> Headers)
        {
            ReplyData            rd       = new ReplyData();
            string               domainID = arguments[0];
            DomainReplyData      drd      = new DomainReplyData();
            PutIceServerResponse isres    = new PutIceServerResponse();

            isres.status = "success";
            DomainMemory.DomainObject dobj = new DomainMemory.DomainObject();
            drd.id = domainID;
            if (Session.Instance.DomainsMem.Itms.ContainsKey(domainID))
            {
                dobj = Session.Instance.DomainsMem.Itms[domainID].Obj;
            }
            else
            {
                // return nothing!
                GetDomainError gde = new GetDomainError();
                gde.status = "fail";
                gde.data   = new Dictionary <string, string>();
                gde.data.Add("domain", "there is no domain with that ID");
                rd.Status = 404;
                rd.Body   = JsonConvert.SerializeObject(gde);
                return(rd);
            }
            drd.ice_server_address = dobj.IPAddr;
            drd.name = dobj.PlaceName;

            isres.domain = drd;
            rd.Status    = 200;
            rd.Body      = JsonConvert.SerializeObject(isres);

            return(rd);
        }
Esempio n. 2
0
        public ReplyData put_ice_address(IPAddress remoteIP, int remotePort, List <string> arguments, string body, string method, Dictionary <string, string> Headers)
        {
            ReplyData            rd       = new ReplyData();
            string               domainID = arguments[0];
            DomainReplyData      drd      = new DomainReplyData();
            PutIceServerRequest  isr      = JsonConvert.DeserializeObject <PutIceServerRequest>(body);
            PutIceServerResponse isres    = new PutIceServerResponse();

            if (Session.Instance.DomainsMem.SetIP(domainID, remoteIP.ToString(), isr.api_key))
            {
                isres.status = "success";
            }
            else
            {
                isres.status = "fail";
            }


            drd.id = domainID;
            DomainMemory.DomainObject dobj = Session.Instance.DomainsMem.Itms[domainID].Obj;
            drd.ice_server_address = dobj.IPAddr;
            drd.name = dobj.PlaceName;

            isres.domain = drd;
            rd.Status    = 200;
            rd.Body      = JsonConvert.SerializeObject(isres);

            return(rd);
        }
Esempio n. 3
0
        public ReplyData get_temporary_name(IPAddress remoteIP, int remotePort, List <string> arguments, string body, string method, Dictionary <string, string> Headers)
        {
            ReplyData rd = new ReplyData();

            PersonNameGenerator png  = new PersonNameGenerator();
            PlaceNameGenerator  plng = new PlaceNameGenerator();

            // We're generating the entire domain entry in the data store
            DomainMemory.DomainObject DO = new DomainMemory.DomainObject()
            {
                PlaceName = png.GenerateRandomFirstName() + "-" + plng.GenerateRandomPlaceName() + "-" + new Random().Next(500, 9000).ToString(),
                DomainID  = Guid.NewGuid().ToString(),
                IPAddr    = remoteIP.ToString()
            };


            DO.API_Key = Tools.MD5Hash($":{DO.PlaceName}::{DO.DomainID}:{DO.IPAddr}");

            DomainReplyDataWithKey drd = new DomainReplyDataWithKey();

            drd.ice_server_address = DO.IPAddr;
            drd.api_key            = DO.API_Key;
            drd.id   = DO.DomainID;
            drd.name = DO.PlaceName;

            TemporaryPlaceNameReply tpnr = new TemporaryPlaceNameReply();

            tpnr.status = "success";
            tpnr.data   = new Dictionary <string, DomainReplyDataWithKey>();
            tpnr.data.Add("domain", drd);

            rd.Status = 200;
            rd.Body   = JsonConvert.SerializeObject(tpnr);

            DomainMemory.MemoryItem mi = new DomainMemory.MemoryItem();
            mi.Obj = DO;
            Session.Instance.DomainsMem.Itms.Add(DO.DomainID, mi);

            rd.CustomOutputHeaders = new Dictionary <string, string>();
            rd.CustomOutputHeaders.Add("X-Rack-CORS", "miss; no-origin");
            rd.CustomOutputHeaders.Add("Access-Control-Allow-Origin", "*");
            return(rd);
        }
Esempio n. 4
0
        public ReplyData domain_heartbeat(IPAddress remoteIP, int remotePort, List <string> arguments, string body, string method, Dictionary <string, string> Headers)
        {
            // Check the Authorization header for a valid Access token
            // If token is valid, begin updating stuff
            ReplyData rd = new ReplyData();

            rd.Status = 200;
            rd.Body   = "";
            if (Headers.ContainsKey("Authorization"))
            {
                string       Token = Headers["Authorization"].Split(new[] { ' ' })[1];
                UserAccounts ua    = UserAccounts.GetAccounts();
                foreach (KeyValuePair <string, UserAccounts.Account> kvp in ua.AllAccounts)
                {
                    if (kvp.Value.ActiveTokens.ContainsKey(Token))
                    {
                        // Start updating shit
                        Dictionary <string, HeartbeatPacket> requestData = JsonConvert.DeserializeObject <Dictionary <string, HeartbeatPacket> >(body);

                        DomainMemory mem = Session.Instance.DomainsMem;
                        // Check if this domain is in memory!
                        if (mem.Itms.ContainsKey(arguments[0]))
                        {
                            // start

                            DomainMemory.MemoryItem   mi  = mem.Itms[arguments[0]];
                            DomainMemory.DomainObject obj = mi.Obj;
                            // First check that there is a API Key
                            if (obj.API_Key == "" || obj.API_Key == null)
                            {
                                rd.Status = 401;
                                break;
                            }
                            obj.NetworkingMode = requestData["domain"].automatic_networking;
                            HeartbeatData dat = requestData["domain"].heartbeat;
                            obj.Protocol   = dat.protocol;
                            obj.Restricted = dat.restricted;
                            obj.Version    = dat.version;
                            obj.LoggedIn   = dat.num_users;
                            obj.Anon       = dat.num_anon_users;
                            obj.TotalUsers = dat.num_anon_users + dat.num_users;
                            mi.Obj         = obj;

                            Session.Instance.DomainsMem.Itms[arguments[0]] = mi;


                            rd.Status = 200;
                            rd.Body   = "";
                        }
                        else
                        {
                            rd.Status = 404; // this will trigger a new temporary domain name
                        }
                    }
                }
            }


            // fallback
            if (Session.Instance.DomainsMem.Itms.ContainsKey(arguments[0]) == false)
            {
                rd.Status = 404;
            }
            return(rd);
        }