Пример #1
0
    def authSuccess(self):
        " Success authorization "
        r = XMLNode("success", {"xmlns": "urn:ietf:params:xml:ns:xmpp-sasl"})
        self.send(r.toString())

        self.user = self._user
        self.xml.restart()
Пример #2
0
    def xmppAuth(self, xml):
        " Authorization "
        print "AUTH"
        b64 = None
        for x in xml.nodes:
            if isinstance(x, basestring):
                b64 = x

        if not b64:
            r = XMLNode(name="reject", attrs={"xmlns": "urn:ietf:params:xml:ns:xmpp-sasl"})
            r.nodes.append(XMLNode(name="not-authorized"))
            self.send(t.toString())

        str = base64.b64decode(b64)
        sl = str.split("\000")
        if len(sl) < 2:
            r = XMLNode(name="reject", attrs={"xmlns": "urn:ietf:params:xml:ns:xmpp-sasl"})
            r.nodes.append(XMLNode(name="not-authorized"))
            self.send(t.toString())

        name, passwd = sl[-2:]

        try:
            self._user = name
            self.proxy.auth(name, passwd)
        except:
            print_exc()
            r = XMLNode("reject", {"xmlns": "urn:ietf:params:xml:ns:xmpp-sasl"})
            r.nodes.append(XMLNode(name="not-authorized"))
            self.sock.send(r.toString())
            self.sock.send("</%s:stream>" % self.namespace)
Пример #3
0
    def startStream(self, ns, attrs):
        print "START STREAM"
        self.from_ = attrs["to"]
        self.namespace = ns

        node = XMLNode(
            "%s:stream" % self.namespace,
            {
                "id": str(self.id),
                "version": "1.0",
                "xmlns": "jabber:client",
                "xmlns:stream": "http://etherx.jabber.org/streams",
                "from": self.from_,
            },
        )

        if not self.user:
            fs = XMLNode("%s:features" % self.namespace)
            mechs = XMLNode("mechanisms", {"xmlns": "urn:ietf:params:xml:ns:xmpp-sasl"})
            mech = XMLNode("mechanism")
            mech.nodes.append("PLAIN")
            mechs.nodes.append(mech)
            fs.nodes.append(mechs)
            node.nodes.append(fs)
        else:
            fs = XMLNode("%s:features" % self.namespace)
            for p in self.iqs:
                f = self.iqs[p].getFeatures()
                if f:
                    fs.nodes.append(f)
            node.nodes.append(fs)
        self.send(node.toString(pack=True, noclose=True))
Пример #4
0
	def prepareResult(self, xml, client):
		" Makes template of result IQ "
		r = XMLNode("iq")
		if xml.attrs.has_key('id'):
			r.attrs['id'] = xml.attrs['id']

		if client.resource:
			r.attrs['to'] = client.resource

		r.attrs['type'] = 'result'

		return r
Пример #5
0
    def sendPresence(self, user, status, msg=None, show=None):
        " Send presence of user to client "
        if not msg:
            msg = status
        r = XMLNode("presence", {"from": user, "to": self.resource})
        if status != "online":
            r.attrs["type"] = status
        if show:
            r.nodes.append(XMLNode("show"))
            r["show"].nodes.append(show)
        r.nodes.append(XMLNode("status"))
        r["status"].nodes.append(msg)

        self.send(r.toString(pack=True))
Пример #6
0
    def sendRoster(self, id, rost):
        " Send roster to client. Roster is a list of tupples: (user, FN, subscription, [group]) "
        r = XMLNode("iq", {"to": self.resource, "id": id, "type": "result"})
        roster = XMLNode("query", {"xmlns": "jabber:iq:roster"})
        r.nodes.append(roster)
        for u in rost:
            item = XMLNode("item", {"name": u[1], "jid": u[0], "subscription": u[2]})
            if len(u) > 3:
                item.nodes.append(XMLNode("group"))
                item["group"].nodes.append(u[3])

            roster.nodes.append(item)

        self.send(r.toString(pack=True))
Пример #7
0
 def sendVCard(self, id, info, user=None):
     " Send vCard to client. Info is map with params "
     r = XMLNode("iq", {"to": self.resource, "id": id, "type": "result"})
     if user:
         r.attrs["from"] = user
     vcard = XMLNode("vCard", {"xmlns": "vcard-temp"})
     for n in info:
         node = XMLNode(n)
         if isinstance(info[n], list):
             node.nodes.extend(info[n])
         else:
             node.nodes.append(info[n])
         vcard.nodes.append(node)
     r.nodes.append(vcard)
     self.send(r.toString(pack=True))
Пример #8
0
 def sendSubscriptionRequest(self, from_):
     " Send subscription request to client "
     r = XMLNode("presence", {"type": "subscribe", "from": from_})
     self.send(r.toString(pack=True))
Пример #9
0
 def sendUnsubscribe(self, user):
     " Remove subscription from user: "******"presence", {"from": user, "type": "unsubscribed"})
     self.send(r.toString(pack=True))
Пример #10
0
 def sendSubscribe(self, user):
     " Send simple subscription presence to user "
     r = XMLNode("presence", {"from": user, "type": "subscribed"})
     self.send(r.toString(pack=True))
Пример #11
0
 def authReject(self):
     " Authorization failure "
     r = XMLNode("reject", {"xmlns": "urn:ietf:params:xml:ns:xmpp-sasl"})
     r.nodes.append(XMLNode(name="not-authorized"))
     self.sock.send(r.toString())
     self.sock.send("</%s:stream>" % self.namespace)