예제 #1
0
 public iFolderUser( Simias.Storage.Domain domain, Simias.Storage.Member member )
 {
     this.Name = member.Name;
        this.UserID = member.UserID;
        this.ID = member.ID;
        this.State = "Member";
        this.IsOwner = member.IsOwner;
        this.Rights = member.Rights.ToString();
        if ( member.Given != null )
        {
     this.Surname = member.Family;
     this.FirstName = member.Given;
     this.FN = member.FN;
        }
        else
        {
     if ( domain != null )
     {
      Simias.Storage.Member dMember = domain.GetMemberByID( member.UserID );
      if ( dMember != null )
      {
       this.Surname = dMember.Family;
       this.FirstName = dMember.Given;
       this.FN = dMember.FN;
      }
     }
        }
 }
예제 #2
0
 public iFolderUser( Simias.POBox.Subscription sub )
 {
     this.Name = sub.ToName;
        this.UserID = sub.ToIdentity;
        Simias.Storage.Domain domain = Store.GetStore().GetDomain( sub.DomainID );
        if ( domain != null )
        {
     Simias.Storage.Member simMem = domain.GetMemberByID( sub.ToIdentity );
     if ( simMem != null )
     {
      this.Surname = simMem.Family;
      this.FirstName = simMem.Given;
      this.FN = simMem.FN;
     }
        }
        this.Rights = sub.SubscriptionRights.ToString();
        this.ID = sub.ID;
        this.iFolderID = sub.SubscriptionCollectionID;
        this.State = "Invited";
        this.IsOwner = false;
        if(sub.SubscriptionState ==
     Simias.POBox.SubscriptionStates.Invited)
        {
     this.State = "WaitSync";
        }
        else if(sub.SubscriptionState ==
     Simias.POBox.SubscriptionStates.Posted)
        {
     this.State = "Invited";
        }
        else if(sub.SubscriptionState ==
     Simias.POBox.SubscriptionStates.Pending)
        {
     this.State = "AccessRequest";
        }
        else if(sub.SubscriptionState ==
     Simias.POBox.SubscriptionStates.Responded)
        {
     if(sub.SubscriptionDisposition ==
      Simias.POBox.SubscriptionDispositions.Declined)
      this.State = "Declined";
     else
      this.State = "Unknown";
        }
        else
        {
     this.State = "Unknown";
        }
 }
예제 #3
0
      public static void OnCredentialsEventHandler(
 Simias.Client.Event.NeedCredentialsEventArgs args)
      {
          if ( args.DomainID == Simias.Gaim.GaimDomain.ID )
             {
          Simias.Authentication.Status authStatus;
          lock (inCredentialEvent)
          {
           ClientAuthentication clientAuth =
            new ClientAuthentication();
           authStatus = clientAuth.Authenticate(args.CollectionID);
           if (authStatus.statusCode == Simias.Authentication.StatusCodes.Success)
           {
            string userID = Store.GetStore().GetUserIDFromDomainID(GaimDomain.ID);
            new NetCredential(
             "iFolder",
             args.CollectionID,
             true,
             userID,
             "@GaimDomainPPK@" );
           }
          }
             }
      }
예제 #4
0
 public Authentication.Status Authenticate( Simias.Storage.Domain domain, HttpContext ctx )
 {
     string gaimSessionTag = "gaim";
        Simias.Storage.Member member = null;
        Simias.Authentication.Status status =
     new Simias.Authentication.Status( SCodes.InvalidCredentials );
        if ( ctx.Session != null )
        {
     GaimSession gaimSession;
     string memberID = ctx.Request.Headers[ "gaim-member" ];
     if ( memberID == null || memberID == "" )
     {
      return status;
     }
     member = domain.GetMemberByID( memberID );
     if ( member == null )
     {
      return status;
     }
     status.UserName = member.Name;
     status.UserID = member.UserID;
     gaimSession = ctx.Session[ gaimSessionTag ] as GaimSession;
     if ( gaimSession == null )
     {
      gaimSession = new GaimSession();
      gaimSession.MemberID = member.UserID;
      gaimSession.State = 1;
      gaimSession.OneTimePassword = DateTime.UtcNow.Ticks.ToString();
      GaimBuddy buddy = GaimDomain.GetBuddyByUserID( member.UserID );
      if (buddy != null)
      {
       RSACryptoServiceProvider credential = buddy.GetCredentialByUserID( member.UserID );
       if ( credential != null )
       {
        byte[] oneTime = new UTF8Encoding().GetBytes( gaimSession.OneTimePassword );
        byte[] encryptedText = credential.Encrypt( oneTime, false );
        ctx.Response.AddHeader(
     "gaim-secret",
     Convert.ToBase64String( encryptedText ) );
        ctx.Session[ gaimSessionTag ] = gaimSession;
       }
      }
     }
     else
     if ( status.UserID == gaimSession.MemberID )
     {
      string encodedSecret = ctx.Request.Headers[ "gaim-secret" ];
      if ( encodedSecret != null && encodedSecret != "" )
      {
       UTF8Encoding utf8 = new UTF8Encoding();
       string decodedString =
        utf8.GetString( Convert.FromBase64String( encodedSecret ) );
       if ( decodedString.Equals( gaimSession.OneTimePassword ) == true )
       {
        status.statusCode = SCodes.Success;
        gaimSession.State = 2;
       }
      }
      else
      {
       gaimSession.OneTimePassword = DateTime.UtcNow.Ticks.ToString();
       gaimSession.State = 1;
       GaimBuddy buddy = GaimDomain.GetBuddyByUserID( member.UserID );
       if (buddy != null)
       {
        RSACryptoServiceProvider credential = buddy.GetCredentialByUserID( member.UserID );
        if ( credential != null )
        {
     try
     {
      byte[] oneTime = new UTF8Encoding().GetBytes( gaimSession.OneTimePassword );
      byte[] encryptedText = credential.Encrypt( oneTime, false );
      ctx.Response.AddHeader(
       "gaim-secret",
       Convert.ToBase64String( encryptedText ) );
     }
     catch( Exception encr )
     {
      log.Debug( encr.Message );
      log.Debug( encr.StackTrace );
     }
        }
       }
      }
     }
        }
        return status;
 }
예제 #5
0
 private Uri MemberToUri(Simias.Storage.Domain domain, Member member)
 {
     Uri locationUri = null;
        if (domain == null || member == null) return null;
        Simias.Storage.PropertyList pList = member.Properties;
        Simias.Storage.Property p = pList.GetSingleProperty("Gaim:SimiasURL");
        if (p == null) return null;
        locationUri = new Uri((string) p.Value);
        return locationUri;
 }
예제 #6
0
 public Contact(Simias.Storage.Node contact)
 {
     this.Name = contact.Name;
 }
예제 #7
0
 internal static void UpdatePublicSharediFolderMembers(Simias.Storage.Collection col, GaimBuddy[] buddies)
 {
     Simias.Storage.Domain domain = GaimDomain.GetDomain();
        if (domain == null) return;
        Hashtable subscribedUserIDs = new Hashtable();
        Store store = Store.GetStore();
        Simias.POBox.POBox poBox =
     Simias.POBox.POBox.FindPOBox(store, domain.ID, store.GetUserIDFromDomainID(domain.ID));
        ICSList poList = poBox.Search(
     Simias.POBox.Subscription.SubscriptionCollectionIDProperty,
     col.ID,
     SearchOp.Equal);
        foreach(Simias.Storage.ShallowNode sNode in poList)
        {
     Simias.POBox.Subscription sub = new Simias.POBox.Subscription(poBox, sNode);
     if (sub.SubscriptionState == Simias.POBox.SubscriptionStates.Ready)
     {
      if (poBox.StoreReference.GetCollectionByID(
       sub.SubscriptionCollectionID) != null)
      {
       continue;
      }
     }
     subscribedUserIDs[sub.ToIdentity] = sub.ToIdentity;
     log.Debug("Added {0} to subscribedUserIDs", sub.ToName);
        }
        foreach (GaimBuddy buddy in buddies)
        {
     string[] machineNames = buddy.MachineNames;
     foreach (string machineName in machineNames)
     {
      Member member = FindBuddyInDomain(domain, buddy, machineName);
      if (member != null)
      {
       if (subscribedUserIDs[member.UserID] == null)
       {
        InviteUser(poBox, col, member);
       }
      }
      else
      {
       string memberName = buddy.GetSimiasMemberName(machineName);
       string memberUserID = buddy.GetSimiasUserID(machineName);
       if (memberName != null && memberUserID != null)
       {
        member = new Simias.Storage.Member(
        memberName,
        memberUserID,
        Simias.Storage.Access.Rights.ReadOnly );
        string alias = buddy.Alias;
        if (alias != null)
        {
     member.FN = string.Format("{0} ({1})", alias, machineName);
        }
        domain.Commit( member );
        log.Debug("Added new Gaim Domain Member in Simias: {0} ({1})", buddy.Name, machineName);
        InviteUser(poBox, col, member);
       }
      }
     }
        }
 }
예제 #8
0
 internal static void UpdateMember(Simias.Storage.Domain domain, Member member, GaimBuddy buddy, string machineName)
 {
     Simias.Storage.PropertyList pList = member.Properties;
        Simias.Storage.Property p;
        string simiasURL = buddy.GetSimiasURL(machineName);
        if (simiasURL != null && simiasURL.Length > 0)
        {
     if (pList.HasProperty("Gaim:SimiasURL"))
     {
      Property oldProp = pList.GetSingleProperty("Gaim:SimiasURL");
      if (!simiasURL.Equals((string)oldProp.Value))
      {
       pList.ModifyProperty("Gaim:SimiasURL", simiasURL);
      }
     }
     else
     {
      p = new Property("Gaim:SimiasURL", simiasURL);
      p.LocalProperty = true;
      member.Properties.AddProperty(p);
     }
        }
        string alias = buddy.Alias;
        if (alias != null && alias.Length > 0)
        {
     if (pList.HasProperty("Gaim:Alias"))
     {
      Property oldProp = pList.GetSingleProperty("Gaim:Alias");
      if (!alias.Equals((string)oldProp.Value))
      {
       pList.ModifyProperty("Gaim:Alias", alias);
      }
     }
     else
     {
      p = new Property("Gaim:Alias", alias);
      p.LocalProperty = true;
      member.Properties.AddProperty(p);
     }
     string fullName = string.Format("{0} ({1})", alias, machineName);
     if (member.FN == null || !member.FN.Equals(fullName))
     {
      member.FN = fullName;
     }
        }
        domain.Commit(member);
 }
예제 #9
0
 internal static void UpdateMember(Simias.Storage.Domain domain, Member member, GaimBuddy buddy)
 {
     string[] machineNames = buddy.MachineNames;
        for (int i = 0; i < machineNames.Length; i++)
        {
     UpdateMember(domain, member, buddy, machineNames[i]);
        }
 }
예제 #10
0
 internal static GaimBuddy[] SyncBuddies(Simias.Storage.Domain domain)
 {
     GaimBuddy[] buddies = GetBuddies();
        if (buddies == null) return null;
        log.Debug("Synching only iFolder Plugin-enabled Buddies");
        foreach (GaimBuddy buddy in buddies)
        {
     string[] machineNames = buddy.MachineNames;
     for (int i = 0; i < machineNames.Length; i++)
     {
      Member member =
       FindBuddyInDomain(domain, buddy, machineNames[i]);
      if (member != null)
      {
       UpdateMember(domain, member, buddy, machineNames[i]);
      }
     }
        }
        if (bPruneOldMembers)
        {
     PruneOldMembers(domain, buddies);
        }
        return buddies;
 }
예제 #11
0
 internal static void PruneOldMembers(Simias.Storage.Domain domain, GaimBuddy[] buddies)
 {
     ICSList memberList = domain.GetMemberList();
        foreach(ShallowNode sNode in memberList)
        {
     Simias.Storage.Member member =
      new Simias.Storage.Member(domain, sNode);
     if (member.IsOwner) continue;
     if (!IsMemberInBuddyList(member, buddies))
     {
      domain.Commit(domain.Delete(member));
     }
        }
 }
예제 #12
0
 internal static void InviteUser(Simias.POBox.POBox poBox,
   Simias.Storage.Collection col,
   Simias.Storage.Member member)
 {
     Simias.Storage.Access.Rights newRights = Simias.Storage.Access.Rights.ReadOnly;
        Simias.POBox.Subscription sub = poBox.CreateSubscription(col, col.GetCurrentMember(), "iFolder");
        sub.SubscriptionRights = newRights;
        sub.ToName = member.Name;
        sub.ToIdentity = member.UserID;
        poBox.AddMessage(sub);
        log.Debug("Inviting {0}", member.Name);
 }
예제 #13
0
 internal static Member FindBuddyInDomain(Simias.Storage.Domain domain, GaimBuddy buddy, string machineName)
 {
     Member member = null;
        string simiasUserID = buddy.GetSimiasUserID(machineName);
        if (simiasUserID != null)
        {
     member = domain.GetMemberByID(simiasUserID);
        }
        return member;
 }