示例#1
0
        public override Vcard GetVCard(Jid jid)
        {
            ASCContext.SetCurrentTenant(jid.Server);

            jid = new Jid(jid.Bare.ToLowerInvariant());
            var ui = ASCContext.UserManager.GetUserByUserName(jid.User);

            if (ui != null)
            {

                var vcard = (Vcard)cache.Get(jid.ToString());
                if (vcard != null)
                {
                    return vcard;
                }

                vcard = new Vcard();
                vcard.Name = new Name(ui.LastName, ui.FirstName, null);
                vcard.Fullname = UserFormatter.GetUserName(ui);
                vcard.Nickname = ui.UserName;
                vcard.Description = ui.Notes;
                if (ui.BirthDate != null) vcard.Birthday = ui.BirthDate.Value;
                vcard.JabberId = jid;
                if (ui.Sex.HasValue)
                {
                    vcard.Gender = ui.Sex.Value ? Gender.MALE : Gender.FEMALE;
                }

                var index = ui.Contacts.FindIndex(c => string.Compare(c, "phone", true) == 0) + 1;
                if (0 < index && index < ui.Contacts.Count)
                {
                    vcard.AddTelephoneNumber(new Telephone(TelephoneLocation.WORK, TelephoneType.NUMBER, ui.Contacts[index]));
                }
                vcard.AddEmailAddress(new Email(EmailType.INTERNET, ui.Email, true));

                var tenant = ASCContext.GetCurrentTenant();
                if (tenant != null) vcard.Organization = new Organization(tenant.Name, ui.Department);
                vcard.Title = ui.Title;

                var image = PreparePhoto(ASCContext.UserManager.GetUserPhoto(ui.ID, Guid.Empty));
                if (image != null)
                {
                    vcard.Photo = new Photo(image, ImageFormat.Png);
                    image.Dispose();
                }

                cache.Insert(jid.ToString(), vcard, CACHE_TIMEOUT);
                return vcard;
            }
            else
            {
                return base.GetVCard(jid);
            }
        }
示例#2
0
		public void VCardTest()
		{
			var jid = new Jid("jid1", "s", "R1");
            var vcard = new Vcard();
            vcard.JabberId = jid;

            store.SetVCard(jid, vcard);
            var v = store.GetVCard(jid);
            Assert.IsNotNull(v);
            Assert.AreEqual(vcard.JabberId, v.JabberId);

            v = store.GetVCard(new Jid("jid2", "s", "R1"));
            Assert.IsNull(v);
		}
		public void PrivateStoreTest()
		{
            var jid = new Jid("n", "s", "r");

			var el = new Vcard();
			el.Fullname = "x";
            store.SetPrivate(jid, el);

			var el2 = (Vcard)store.GetPrivate(jid, new Vcard());
			Assert.AreEqual(el.Fullname, el2.Fullname);

			var el3 = store.GetPrivate(new Jid("n2", "s", "r"), new Vcard());
			Assert.IsNull(el3);

            var el4 = store.GetPrivate(jid, new Roster());
            Assert.IsNull(el4);
        }
        public virtual void SetVCard(Jid jid, Vcard vcard)
        {
            if (jid == null) throw new ArgumentNullException("jid");
            if (vcard == null) throw new ArgumentNullException("vcard");

            try
            {
                lock (vcardsCache)
                {
                    ExecuteNonQuery(
                        new SqlInsert("jabber_vcard", true)
                        .InColumnValue("jid", jid.Bare.ToLowerInvariant())
                        .InColumnValue("vcard", ElementSerializer.SerializeElement(vcard)));
                    vcardsCache[jid.Bare.ToLowerInvariant()] = vcard;
                }
            }
            catch (Exception e)
            {
                throw new JabberException("Could not save VCard.", e);
            }
        }
		private IQ SetVCardSearch(XmppStream stream, IQ iq, XmppHandlerContext context)
		{
			var answer = new IQ(IqType.result);
			answer.Id = iq.Id;
			answer.To = iq.From;
			answer.From = iq.To;

			var search = (Search)iq.Query;

			var pattern = new Vcard();
			pattern.Nickname = search.Nickname;
			pattern.Name = new Name(search.Lastname, search.Firstname, null);
			//pattern.AddEmailAddress(new Email() { UserId = search.Email });

			search = new Search();
			foreach (var vcard in context.StorageManager.VCardStorage.Search(pattern))
			{
				var item = new SearchItem();
				item.Jid = vcard.JabberId;
				item.Nickname = vcard.Nickname;
				if (vcard.Name != null)
				{
					item.Firstname = vcard.Name.Given;
					item.Lastname = vcard.Name.Family;
				}
				var email = vcard.GetPreferedEmailAddress();
				if (email != null)
				{
					item.Email = email.UserId;
				}
				search.AddChild(item);
			}

			answer.Query = search;
			return answer;
		}
示例#6
0
 public VcardIq(IqType type, Jid to, Jid from, Vcard vcard) : this(type, to, from)
 {
     Vcard = vcard;
 }
示例#7
0
 public VcardIq(IqType type, Jid to, Vcard vcard) : this(type, to)
 {
     Vcard = vcard;
 }
示例#8
0
 public VcardIq(IqType type, Vcard vcard) : this(type)
 {
     Vcard = vcard;
 }
 public virtual ICollection<Vcard> Search(Vcard pattern)
 {
     return new Vcard[0];
 }
示例#10
0
 public VcardIq(IqType type, Jid to, Jid from, Vcard vcard) : this(type, to, from)
 {
     Vcard = vcard;
 }
示例#11
0
 public VcardIq(IqType type, Jid to, Vcard vcard) : this(type, to)
 {
     Vcard = vcard;
 }
示例#12
0
 public VcardIq(IqType type, Vcard vcard) : this(type)
 {
     Vcard = vcard;
 }
示例#13
0
 public override void SetVCard(Jid jid, Vcard vcard)
 {
     ASCContext.SetCurrentTenant(jid.Server);
     if (ASCContext.UserManager.IsUserNameExists(jid.User)) throw new JabberException(ErrorCode.Forbidden);
     base.SetVCard(jid, vcard);
 }
示例#14
0
 public override ICollection<Vcard> Search(Vcard pattern)
 {
     throw new NotImplementedException();
 }