예제 #1
0
        protected void FriendPing(string address)
        {
            Address addr = AddressParser.Parse(address);
            Channel q    = new Channel();

            q.CloseAfterEnqueue();
            q.CloseEvent += delegate(object obj, EventArgs eargs) {
                try {
                    RpcResult res      = (RpcResult)q.Dequeue();
                    string    result   = (string)res.Result;
                    string[]  parts    = result.Split(DELIM);
                    string    dht_key  = parts[0];
                    string    response = parts[1];
                    if (response == "online")
                    {
                        SocialUser friend = _friends[dht_key];
                        friend.Time = DateTime.Now.ToString();
                    }
                    ProtocolLog.Write(SocialLog.SVPNLog, "PING FRIEND REPLY: " +
                                      result);
                } catch (Exception e) {
                    ProtocolLog.Write(SocialLog.SVPNLog, e.Message);
                    ProtocolLog.Write(SocialLog.SVPNLog, "PING FRIEND FAILURE: " +
                                      address);
                }
            };
            ISender sender = new AHExactSender(_node, addr);

            _rpc.Invoke(sender, q, "SocialVPN.FriendPing", _local_user.DhtKey);
        }
예제 #2
0
        public void DrupalNetworkTest()
        {
            string uid     = "*****@*****.**";
            string name    = "Pierre St Juste";
            string pcid    = "pdesktop";
            string version = "SVPN_0.3.0";
            string country = "US";

            SocialUtils.CreateCertificate(uid, name, pcid, version, country,
                                          "address1234", "certificates",
                                          "private_key");

            string cert_path = System.IO.Path.Combine("certificates", "lc.cert");

            byte[]     cert_data = SocialUtils.ReadFileBytes(cert_path);
            SocialUser user      = new SocialUser(cert_data);

            /*
             * DrupalNetwork drupal = new DrupalNetwork(user);
             * drupal.Login("pierre", "stjuste");
             *
             * List<string> friends = drupal.GetFriends();
             *
             * foreach(string friend in friends) {
             * Console.WriteLine(friend);
             * List<string> fprs = drupal.GetFingerprints(friend);
             * foreach(string fpr in fprs) {
             *  Console.WriteLine(friend + " " + fpr);
             * }
             * }
             * drupal.StoreFingerprint();
             * drupal.Logout();
             */
        }
예제 #3
0
        public JabberNetwork(SocialUser user, byte[] certData, 
      BlockingQueue queue, string jabber_port)
        {
            _local_user = user;
              _queue = queue;
              _friends = new Dictionary<string, List<string>>();
              _online = false;
              _auth_pending = false;
              _pres_sent = false;
              _jclient = new JabberClient();

              _jclient.Port = Int32.Parse(jabber_port);
              _jclient.AutoReconnect = 30F;
              _jclient.AutoStartTLS = true;
              _jclient.KeepAlive = 30F;
              _jclient.AutoPresence = false;
              _jclient.AutoRoster = false;
              _jclient.LocalCertificate = null;
              _jclient.Resource = SVPNRESOURCE +
            _local_user.Fingerprint.Substring(0, 10);

              _jclient.OnError += HandleOnError;
              _jclient.OnAuthError += HandleOnAuthError;

            #if SVPN_NUNIT
              _jclient.OnReadText += HandleOnReadText;
              _jclient.OnWriteText += HandleOnWriteText;
            #endif
              _jclient.OnAuthenticate += HandleOnAuthenticate;
              _jclient.OnPresence += HandleOnPresence;
              _jclient.OnIQ += HandleOnIQ;
              _jclient.OnInvalidCertificate += HandleInvalidCert;
        }
예제 #4
0
        /*
         * Removes a friend from socialvpn.
         * @param friend the friend to be removed.
         */
        public void RemoveFriend(SocialUser friend)
        {
            Address addr = AddressParser.Parse(friend.Address);

            _node.ManagedCO.RemoveAddress(addr);
            _rarad.UnregisterMapping(friend.Alias);
            friend.Access = SocialUser.AccessTypes.Block.ToString();
        }
예제 #5
0
        /*
         * Add a friend from socialvpn.
         * @param friend the friend to be added.
         */
        public void AddFriend(SocialUser friend)
        {
            Address addr = AddressParser.Parse(friend.Address);

            friend.IP = _rarad.RegisterMapping(friend.Alias, addr);
            _node.ManagedCO.AddAddress(addr);
            friend.Access = SocialUser.AccessTypes.Allow.ToString();
        }
예제 #6
0
        /**
         * Adds a certificate to the socialvpn system.
         * @param certString a base64 encoding string representing certificate.
         */
        protected void AddCertificate(string certString)
        {
            certString = certString.Replace("\n", "");
            byte[]     certData = Convert.FromBase64String(certString);
            SocialUser friend   = new SocialUser(certData);

            _snode.AddCertificate(certData, friend.DhtKey);
        }
예제 #7
0
 public DrupalNetwork(SocialUser user)
 {
     _drupal       = XmlRpcProxyGen.Create <IDrupalXmlRpc>();
     _local_user   = user;
     _email_to_uid = new Dictionary <string, string>();
     _uid_mismatch = false;
     _key_found    = false;
 }
예제 #8
0
 public DrupalNetwork(SocialUser user)
 {
     _drupal = XmlRpcProxyGen.Create<IDrupalXmlRpc>();
       _local_user = user;
       _email_to_uid = new Dictionary<string,string>();
       _uid_mismatch = false;
       _key_found = false;
 }
예제 #9
0
 public SocialNetworkProvider(Dht dht, SocialUser user)
 {
     _local_user = user;
     _dht        = dht;
     _provider   = _drupal;
     _network    = _drupal;
     _drupal     = new DrupalNetwork(user);
     _online     = false;
 }
예제 #10
0
 public SocialRpcHandler(StructuredNode node, SocialUser localUser,
                         Dictionary <string, SocialUser> friends)
 {
     _node = node;
     _rpc  = node.Rpc;
     _rpc.AddHandler("SocialVPN", this);
     _local_user = localUser;
     _friends    = friends;
 }
예제 #11
0
 public SocialRpcHandler(StructuredNode node, SocialUser localUser,
                    Dictionary<string, SocialUser> friends)
 {
     _node = node;
       _rpc = node.Rpc;
       _rpc.AddHandler("SocialVPN", this);
       _local_user = localUser;
       _friends = friends;
 }
예제 #12
0
 public SocialNetworkProvider(Dht dht, SocialUser user)
 {
     _local_user = user;
       _dht = dht;
       _provider = _drupal;
       _network = _drupal;
       _drupal = new DrupalNetwork(user);
       _online = false;
 }
예제 #13
0
 public void PingFriend(SocialUser friend)
 {
     if (friend.Time != SocialUser.TIMEDEFAULT)
     {
         DateTime past         = DateTime.Parse(friend.Time);
         TimeSpan last_checked = DateTime.Now - past;
         if (last_checked.Minutes < 5)
         {
             return;
         }
         ;
     }
     FriendPing(friend.Address);
 }
예제 #14
0
        /**
         * Saves an X509 certificate to the file system.
         * @param cert the X509 certificate
         */
        public static void SaveCertificate(Certificate cert, string certDir)
        {
            SocialUser friend  = new SocialUser(cert);
            string     address = friend.Address.Substring(12);
            string     ca_path = Path.Combine(certDir, "ca" + address + ".cert");

            if (!Directory.Exists(certDir))
            {
                Directory.CreateDirectory(certDir);
            }
            if (!File.Exists(ca_path))
            {
                WriteToFile(cert.X509.RawData, ca_path);
            }
        }
예제 #15
0
        /**
         * Add a friend to socialvpn from an X509 certificate.
         * @param certData the X509 certificate as a byte array.
         * @param key the dht_key containing fingerprint.
         */
        public void AddCertificate(byte[] certData, string key)
        {
            Certificate cert   = new Certificate(certData);
            SocialUser  friend = new SocialUser(cert);

            string[] parts       = key.Split(':');
            string   uid         = parts[1];
            string   fingerprint = parts[2];

            // Verification on the certificate by email and fingerprint
            if (friend.DhtKey == _local_user.DhtKey ||
                _friends.ContainsKey(friend.DhtKey))
            {
                ProtocolLog.Write(SocialLog.SVPNLog, "ADD CERT KEY FOUND: " +
                                  key);
            }
            else if (fingerprint != friend.Fingerprint || uid != friend.Uid)
            {
                ProtocolLog.Write(SocialLog.SVPNLog, "ADD CERT KEY MISMATCH: " +
                                  key + " " + friend.DhtKey);
            }
            else
            {
                friend.Alias = CreateAlias(friend.Uid, friend.PCID);

                // Save certificate to file system
                SocialUtils.SaveCertificate(cert, _cert_dir);

                // Add certificates to handler
                _bso.CertificateHandler.AddCACertificate(cert.X509);

                // Add friend to list
                _friends.Add(friend.DhtKey, friend);

                // Temporary
                AddFriend(friend);

                // RPC ping to newly added friend
                _srh.PingFriend(friend);

                ProtocolLog.Write(SocialLog.SVPNLog, "ADD CERT KEY SUCCESS: " +
                                  friend.DhtKey + " " + friend.IP + " " +
                                  friend.Alias);
            }
        }
예제 #16
0
        /**
         * Constructor.
         * @param brunetConfig configuration file for Brunet P2P library.
         * @param ipopConfig configuration file for IP over P2P app.
         */
        public SocialNode(string brunetConfig, string ipopConfig,
                          string certDir, string port) :
            base(brunetConfig, ipopConfig)
        {
            _friends  = new Dictionary <string, SocialUser>();
            _cert_dir = certDir;
            string cert_path = Path.Combine(certDir, CERTFILENAME);

            _local_cert     = new Certificate(SocialUtils.ReadFileBytes(cert_path));
            _local_user     = new SocialUser(_local_cert);
            _local_cert_b64 = Convert.ToBase64String(_local_cert.X509.RawData);
            _bso.CertificateHandler.AddCACertificate(_local_cert.X509);
            _bso.CertificateHandler.AddSignedCertificate(_local_cert.X509);
            _snp = new SocialNetworkProvider(this.Dht, _local_user);
            _srh = new SocialRpcHandler(_node, _local_user, _friends);
            _scm = new SocialConnectionManager(this, _snp, _snp, port, _friends,
                                               _srh);
        }
예제 #17
0
        public void SocialUserTest()
        {
            string uid     = "*****@*****.**";
            string name    = "Pierre St Juste";
            string pcid    = "pdesktop";
            string version = "SVPN_0.3.0";
            string country = "US";

            Certificate cert = SocialUtils.CreateCertificate(uid, name, pcid,
                                                             version, country,
                                                             "address1234",
                                                             "certificates",
                                                             "private_key");

            SocialUser user = new SocialUser(cert.X509.RawData);

            Assert.AreEqual(uid, user.Uid);
            Assert.AreEqual(name, user.Name);
            Assert.AreEqual(pcid, user.PCID);
            Assert.AreEqual(version, user.Version);
            Assert.AreEqual(country, user.Country);
        }
예제 #18
0
        public void TestNetworkTest()
        {
            string uid     = "*****@*****.**";
            string name    = "Pierre St Juste";
            string pcid    = "pdesktop";
            string version = "SVPN_0.3.0";
            string country = "US";

            SocialUtils.CreateCertificate(uid, name, pcid, version, country,
                                          "address1234", "certificates",
                                          "private_key");


            string cert_path = System.IO.Path.Combine("certificates", "lc.cert");

            byte[]     cert_data = SocialUtils.ReadFileBytes(cert_path);
            SocialUser user      = new SocialUser(cert_data);

            TestNetwork backend = new TestNetwork(user);

            backend.SayHello();
            backend.GetFingerprints("uid");
        }
예제 #19
0
 /*
  * Add a friend from socialvpn.
  * @param friend the friend to be added.
  */
 public void AddFriend(SocialUser friend)
 {
     Address addr = AddressParser.Parse(friend.Address);
       friend.IP = _rarad.RegisterMapping(friend.Alias, addr);
       _node.ManagedCO.AddAddress(addr);
       friend.Access = SocialUser.AccessTypes.Allow.ToString();
 }
예제 #20
0
        /**
         * Add a friend to socialvpn from an X509 certificate.
         * @param certData the X509 certificate as a byte array.
         * @param key the dht_key containing fingerprint.
         */
        public void AddCertificate(byte[] certData, string key)
        {
            Certificate cert = new Certificate(certData);
              SocialUser friend = new SocialUser(cert);
              string[] parts = key.Split(':');
              string uid = parts[1];
              string fingerprint = parts[2];

              // Verification on the certificate by email and fingerprint
              if(friend.DhtKey == _local_user.DhtKey ||
             _friends.ContainsKey(friend.DhtKey)) {
            ProtocolLog.Write(SocialLog.SVPNLog, "ADD CERT KEY FOUND: " +
                          key);
              }
              else if(fingerprint != friend.Fingerprint || uid != friend.Uid) {
            ProtocolLog.Write(SocialLog.SVPNLog, "ADD CERT KEY MISMATCH: " +
                       key + " " + friend.DhtKey);
              }
              else {
            friend.Alias = CreateAlias(friend.Uid, friend.PCID);

            // Save certificate to file system
            SocialUtils.SaveCertificate(cert, _cert_dir);

            // Add certificates to handler
            _bso.CertificateHandler.AddCACertificate(cert.X509);

            // Add friend to list
            _friends.Add(friend.DhtKey, friend);

            // Temporary
            AddFriend(friend);

            // RPC ping to newly added friend
            _srh.PingFriend(friend);

            ProtocolLog.Write(SocialLog.SVPNLog,"ADD CERT KEY SUCCESS: " +
                          friend.DhtKey + " " + friend.IP + " " +
                          friend.Alias);
              }
        }
예제 #21
0
 /**
  * Constructor.
  * @param brunetConfig configuration file for Brunet P2P library.
  * @param ipopConfig configuration file for IP over P2P app.
  */
 public SocialNode(string brunetConfig, string ipopConfig, 
               string certDir, string port)
     : base(brunetConfig, ipopConfig)
 {
     _friends = new Dictionary<string, SocialUser>();
       _cert_dir = certDir;
       string cert_path = Path.Combine(certDir, CERTFILENAME);
       _local_cert = new Certificate(SocialUtils.ReadFileBytes(cert_path));
       _local_user = new SocialUser(_local_cert);
       _local_cert_b64 = Convert.ToBase64String(_local_cert.X509.RawData);
       _bso.CertificateHandler.AddCACertificate(_local_cert.X509);
       _bso.CertificateHandler.AddSignedCertificate(_local_cert.X509);
       _snp = new SocialNetworkProvider(this.Dht, _local_user);
       _srh = new SocialRpcHandler(_node, _local_user, _friends);
       _scm = new SocialConnectionManager(this, _snp, _snp, port, _friends,
                                  _srh);
 }
예제 #22
0
 public void PingFriend(SocialUser friend)
 {
     if(friend.Time != SocialUser.TIMEDEFAULT) {
     DateTime past = DateTime.Parse(friend.Time);
     TimeSpan last_checked = DateTime.Now - past;
     if(last_checked.Minutes < 5) {
       return;
     };
       }
       FriendPing(friend.Address);
 }
예제 #23
0
파일: SocialNode.cs 프로젝트: j3g/socialvpn
 /*
  * Add a friend from socialvpn.
  * @param friend the friend to be added.
  */
 protected void AddFriend(SocialUser friend)
 {
     Address addr = AddressParser.Parse(friend.Address);
       friend.IP = _marad.RegisterMapping(friend.Alias, addr);
       _node.ManagedCO.AddAddress(addr);
       friend.Access = SocialUser.AccessTypes.Allow.ToString();
       _srh.PingFriend(friend);
       GetState(true);
 }
예제 #24
0
 public TestNetwork(SocialUser user)
 {
     _backend    = XmlRpcProxyGen.Create <IPythonXmlRpc>();
     _local_user = user;
 }
예제 #25
0
파일: SocialNode.cs 프로젝트: j3g/socialvpn
 /**
  * Constructor.
  * @param brunetConfig configuration file for Brunet P2P library.
  * @param ipopConfig configuration file for IP over P2P app.
  */
 public SocialNode(NodeConfig brunetConfig, IpopConfig ipopConfig, 
               string certDir, string http_port, string jabber_port,
               string global_access)
     : base(brunetConfig, ipopConfig)
 {
     _friends = new Dictionary<string, SocialUser>();
       _aliases = new Dictionary<string, string>();
       _addr_to_key = new Dictionary<string, string>();
       _cert_dir = certDir;
       _http_port = http_port;
       string cert_path = Path.Combine(certDir, CERTFILENAME);
       _local_cert = new Certificate(SocialUtils.ReadFileBytes(cert_path));
       _local_user = new SocialUser(_local_cert);
       _local_cert_b64 = Convert.ToBase64String(_local_cert.X509.RawData);
       _bso.CertificateHandler.AddCACertificate(_local_cert.X509);
       _bso.CertificateHandler.AddSignedCertificate(_local_cert.X509);
       _queue = new BlockingQueue();
       _snp = new SocialNetworkProvider(this.Dht, _local_user,
                                _local_cert.X509.RawData, _queue,
                                jabber_port);
       _sdm = new SocialDnsManager(this, _local_user);
       _srh = new SocialRpcHandler(_node, _local_user, _friends, _queue, _sdm);
       _scm = new SocialConnectionManager(this, _snp, _srh, http_port, _queue,
                                  _sdm);
       _cert_published = false;
       _node.ConnectionTable.ConnectionEvent += ConnectHandler;
       _node.HeartBeatEvent += _scm.HeartBeatHandler;
       Shutdown.OnExit += _scm.Stop;
       _local_user.IP = _marad.LocalIP;
       CreateAlias(_local_user);
       _marad.MapLocalDNS(_local_user.Alias);
       _scm.GlobalAccess = (global_access == "on");
       LoadCertificates();
 }
예제 #26
0
        public void TestNetworkTest()
        {
            ///*
              string uid = "*****@*****.**";
              string name = "Pierre St Juste";
              string pcid = "pdesktop";
              string version = "SVPN_0.3.0";
              string country = "US";
              string address =
            Brunet.Applications.Utils.GenerateAHAddress().ToString();
              SocialUtils.CreateCertificate(uid, name, pcid, version, country,
                                    address, "certificates", "private_key");
              //*/
              string cert_path = System.IO.Path.Combine("certificates", "local.cert");
              byte[] cert_data = SocialUtils.ReadFileBytes(cert_path);
              SocialUser user = new SocialUser(cert_data);

              Console.WriteLine(user);
              TestNetwork backend = new TestNetwork(user, cert_data);
              //backend.StoreFingerprint();
              string[] friends = backend.GetFriends().ToArray();
              foreach(string friend in friends) {
            Console.WriteLine(friend);
              }
              string[] fprs = backend.GetFingerprints(friends).ToArray();
              foreach(string fpr in fprs) {
            Console.WriteLine(fpr);
              }
        }
예제 #27
0
 /**
  * Validates a certificate
  * @param user the user object.
  * @param certData the certificate data.
  * @return boolean indicating success.
  */
 public bool ValidateCertificate(SocialUser user, byte[] certData)
 {
     foreach(IProvider provider in _providers.Values) {
     if(provider.ValidateCertificate(user, certData)) {
       return true;
     }
       }
       if(_friends.ContainsKey(user.Uid) &&
      _friends[user.Uid].Contains(user.DhtKey)) {
     return true;
       }
       return false;
 }
예제 #28
0
   /**
    * Constructor.
    * @param dht the dht object.
    * @param user the local user object.
    * @param certData the local certificate data.
    */
   public SocialNetworkProvider(IDht dht, SocialUser user, byte[] certData,
 BlockingQueue queue, string jabber_port)
   {
       _local_user = user;
         _dht = dht;
         _queue = queue;
         _providers = new Dictionary<string, IProvider>();
         _networks = new Dictionary<string,ISocialNetwork>();
         _local_cert_data = certData;
         _friends = new Dictionary<string, List<string>>();
         _certificates = new List<byte[]>();
         _jabber_port = jabber_port;
         RegisterBackends();
   }
예제 #29
0
 public void JabberNetworkTest()
 {
     string userid = "pierre@pdebian64";
       Certificate cert = SocialUtils.CreateCertificate(userid,
     "Pierre St Juste", "testpc", "version", "country", "address",
     "certdir", "path");
       SocialUser user = new SocialUser(cert.X509.RawData);
       BlockingQueue queue = new BlockingQueue();
       JabberNetwork jnetwork = new JabberNetwork(user, cert.X509.RawData,
       queue, "5222");
       jnetwork.Login("jabber", userid,"stjuste");
       Console.WriteLine("Waiting 5 seconds for resuls");
       System.Threading.Thread.Sleep(5000);
       Console.WriteLine("Done waiting for results");
       foreach(string friend in jnetwork.GetFriends()) Console.WriteLine(friend);
       jnetwork.GetFingerprints(new string[] {userid});
       jnetwork.StoreFingerprint();
       jnetwork.Logout();
 }
예제 #30
0
        public void TestNetworkTest()
        {
            string uid = "*****@*****.**";
              string name = "Pierre St Juste";
              string pcid = "pdesktop";
              string version = "SVPN_0.3.0";
              string country = "US";

              SocialUtils.CreateCertificate(uid, name, pcid, version, country,
                                    "address1234", "certificates",
                                    "private_key");

              string cert_path = System.IO.Path.Combine("certificates", "lc.cert");
              byte[] cert_data = SocialUtils.ReadFileBytes(cert_path);
              SocialUser user = new SocialUser(cert_data);

              TestNetwork backend = new TestNetwork(user);
              backend.SayHello();
              backend.GetFingerprints("uid");
        }
예제 #31
0
파일: SocialNode.cs 프로젝트: j3g/socialvpn
 /**
  * Loads certificates from the file system.
  */
 protected void LoadCertificates()
 {
     string[] cert_files = null;
       try {
     cert_files = System.IO.Directory.GetFiles(_cert_dir);
     SocialState state = Utils.ReadConfig<SocialState>(STATEPATH);
     foreach(string cert_file in cert_files) {
       byte[] cert_data = SocialUtils.ReadFileBytes(cert_file);
       SocialUser user = new SocialUser(cert_data);
       _snp.AddFriends(new string[] {user.Uid + " " + user.DhtKey});
       AddCertificate(cert_data, true);
     }
     foreach(SocialUser friend in state.Friends) {
       if(friend.Access == SocialUser.AccessTypes.Block.ToString()) {
     RemoveFriend(friend.DhtKey);
       }
     }
       } catch (Exception e) {
     ProtocolLog.WriteIf(SocialLog.SVPNLog, e.Message);
     ProtocolLog.WriteIf(SocialLog.SVPNLog, "LOAD CERTIFICATES FAILURE");
       }
 }
예제 #32
0
 /*
  * Removes a friend from socialvpn.
  * @param friend the friend to be removed.
  */
 public void RemoveFriend(SocialUser friend)
 {
     Address addr = AddressParser.Parse(friend.Address);
       _node.ManagedCO.RemoveAddress(addr);
       _rarad.UnregisterMapping(friend.Alias);
       friend.Access = SocialUser.AccessTypes.Block.ToString();
 }
예제 #33
0
 public TestNetwork(SocialUser user, byte[] certData)
 {
     _local_user = user;
       _fingerprints = new List<string>();
       _url = "http://socialvpntest.appspot.com/api/";
 }
예제 #34
0
        public void SocialUserTest()
        {
            string uid = "*****@*****.**";
              string name = "Pierre St Juste";
              string pcid = "pdesktop";
              string version = "SVPN_0.3.0";
              string country = "US";

              Certificate cert = SocialUtils.CreateCertificate(uid, name, pcid,
                                                       version, country,
                                                       "address1234",
                                                       "certificates",
                                                       "private_key");

              SocialUser user = new SocialUser(cert.X509.RawData);

              Assert.AreEqual(uid, user.Uid);
              Assert.AreEqual(name, user.Name);
              Assert.AreEqual(pcid, user.PCID);
              Assert.AreEqual(version, user.Version);
              Assert.AreEqual(country, user.Country);
        }
예제 #35
0
 public TestNetwork(SocialUser user)
 {
     _backend = XmlRpcProxyGen.Create<IPythonXmlRpc>();
       _local_user = user;
 }
예제 #36
0
파일: SocialNode.cs 프로젝트: j3g/socialvpn
        /**
         * Add a friend to socialvpn from an X509 certificate.
         * @param certData the X509 certificate as a byte array.
         * @param access determines to give user network access.
         */
        public void AddCertificate(byte[] certData, bool access)
        {
            Certificate cert = new Certificate(certData);
              SocialUser friend = new SocialUser(cert);

              // Verification on the certificate by email and fingerprint
              if(friend.DhtKey == _local_user.DhtKey ||
             _friends.ContainsKey(friend.DhtKey)) {
            ProtocolLog.WriteIf(SocialLog.SVPNLog,
                            String.Format("ADD CERT KEY FOUND: {0} {1}",
                            DateTime.Now.TimeOfDay, friend.DhtKey));
              }
              else if(_snp.ValidateCertificate(friend, certData)) {
            CreateAlias(friend);
            string path = System.IO.Path.Combine(_cert_dir, friend.Alias +
                      CERTSUFFIX);
            SocialUtils.WriteToFile(certData, path);
            _bso.CertificateHandler.AddCACertificate(cert.X509);
            _friends.Add(friend.DhtKey, friend);
            _addr_to_key.Add(friend.Address, friend.DhtKey);
            AddFriend(friend);
            _srh.PingFriend(friend);

            // Block access
            if(!access) {
              RemoveFriend(friend);
            }

            ProtocolLog.WriteIf(SocialLog.SVPNLog,
                            String.Format("ADD CERT KEY SUCCESS: {0} {1} {2}",
                            DateTime.Now.TimeOfDay, friend.DhtKey,
                            friend.Address));
              }
              else {
            ProtocolLog.WriteIf(SocialLog.SVPNLog,
                            String.Format("ADD CERT KEY INVALID: {0} {1} {2}",
                            DateTime.Now.TimeOfDay, friend.DhtKey,
                            friend.Address));
              }
        }
예제 #37
0
 public bool ValidateCertificate(SocialUser user, byte[] certData)
 {
     return true;
 }
예제 #38
0
파일: SocialNode.cs 프로젝트: j3g/socialvpn
 /**
  * Create a unique alias for a user resource.
  * @param user the object representing the user.
  */
 protected virtual void CreateAlias(SocialUser friend)
 {
     char[] delims = new char[] {'@','.'};
       string[] parts = friend.Uid.Split(delims);
       string user = String.Empty;
       for(int i = 0; i < parts.Length-1; i++) {
     user += parts[i] + ".";
       }
       string alias = (friend.PCID + "." + user + DNSSUFFIX).ToLower();
       int counter = 1;
       // If alias already exists, remove old friend with alias
       while(_aliases.ContainsKey(alias)) {
     alias = (friend.PCID + counter + "." + user + DNSSUFFIX).ToLower();
     counter++;
       }
       _aliases[alias] = friend.DhtKey;
       friend.Alias = alias;
 }
예제 #39
0
        public void DrupalNetworkTest()
        {
            string uid = "*****@*****.**";
              string name = "Pierre St Juste";
              string pcid = "pdesktop";
              string version = "SVPN_0.3.0";
              string country = "US";

              SocialUtils.CreateCertificate(uid, name, pcid, version, country,
                                    "address1234", "certificates",
                                    "private_key");

              string cert_path = System.IO.Path.Combine("certificates", "lc.cert");
              byte[] cert_data = SocialUtils.ReadFileBytes(cert_path);
              SocialUser user = new SocialUser(cert_data);
              /*
              DrupalNetwork drupal = new DrupalNetwork(user);
              drupal.Login("pierre", "stjuste");

              List<string> friends = drupal.GetFriends();

              foreach(string friend in friends) {
            Console.WriteLine(friend);
            List<string> fprs = drupal.GetFingerprints(friend);
            foreach(string fpr in fprs) {
              Console.WriteLine(friend + " " + fpr);
            }
              }
              drupal.StoreFingerprint();
              drupal.Logout();
              */
        }
예제 #40
0
파일: SocialNode.cs 프로젝트: j3g/socialvpn
 /**
  * Removes (block access) a friend from socialvpn.
  * @param friend the friend to be removed.
  */
 protected void RemoveFriend(SocialUser friend)
 {
     Address addr = AddressParser.Parse(friend.Address);
       _node.ManagedCO.RemoveAddress(addr);
       _marad.UnregisterMapping(friend.Alias);
       friend.Access = SocialUser.AccessTypes.Block.ToString();
       GetState(true);
 }
예제 #41
0
 /**
  * Constructor.
  * @param node the p2p node.
  * @param localUser the local user object.
  * @param friends the list of friends.
  */
 public SocialRpcHandler(StructuredNode node, SocialUser localUser,
                    Dictionary<string, SocialUser> friends,
                    BlockingQueue queue, SocialDnsManager sdm)
 {
     _node = node;
       _rpc = node.Rpc;
       _rpc.AddHandler("SocialVPN", this);
       _local_user = localUser;
       _friends = friends;
       _queue = queue;
       _sdm = sdm;
 }
예제 #42
0
 /**
  * Adds a certificate to the socialvpn system.
  * @param certString a base64 encoding string representing certificate.
  */
 protected void AddCertificate(string certString)
 {
     certString = certString.Replace("\n", "");
       byte[] certData = Convert.FromBase64String(certString);
       SocialUser friend = new SocialUser(certData);
       _snode.AddCertificate(certData, friend.DhtKey);
 }
예제 #43
0
 public bool ValidateCertificate(SocialUser user, byte[] certData)
 {
     if(_friends.ContainsKey(user.Uid) &&
      _friends[user.Uid].Contains(user.DhtKey)) {
     return true;
       }
       return false;
 }