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; } } } }
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"; } }
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@" ); } } } }
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; }
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; }
public Contact(Simias.Storage.Node contact) { this.Name = contact.Name; }
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); } } } } }
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); }
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]); } }
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; }
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)); } } }
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); }
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; }