Créer ejabberd utilisateur de PHP
J'ai besoin de créer un ejabberd utilisateur à partir d'un script PHP. J'ai aussi besoin d'être en mesure d'ajouter le nouvel utilisateur à un prédéfini bassin.
Devrais-je appeler ejabberdctl
à l'aide de exec()
ou est-il un meilleur moyen?
OriginalL'auteur Andrew Ensley | 2009-10-26
Vous devez vous connecter pour publier un commentaire.
ejabberdctl est de loin la méthode la plus simple dans ce cas précis. Les autres options sont:
Mise en œuvre d'un client XMPP en PHP (!)
Mettre en œuvre un module en Erlang que les demandes par procuration: PHP<-->Erlang communication devrait être à travers un socket et beaucoup de marshaling serait impliqué (!)
ejabberdctl
l'aide de la commandeexec()
je obtenir ce retour:erlexec: HOME must be set
Ok - got it compris. Je vais poster ma solution bientôt. Merci pour les conseils.
pourriez-vous donner le lien ou le code source pour créer un ejabberd utilisateur à partir d'un script PHP.
OriginalL'auteur jldupont
Voici ma solution finale:
Grâce à jldupont conseils que
ejabberdctl
serait la solution la plus simple, j'ai appuyé sur à travers les obstacles que j'ai rencontré et d'avoir une solution de travail.Par défaut, apache, l'utilisateur n'a pas le droit de privilèges pour exécuter avec succès
ejabberdctl
(et pour de bonnes raisons). Donc, pour que cela fonctionne, il faut l'appeler avecsudo
. Mais...sudo
exige un mot de passe, qui présente 2 problèmes:Solution (pour Ubuntu) - ajoutez cette ligne à la fin de
/etc/sudoers
:Le chemin d'accès au fichier sudoers et ejabberdctl peut varier pour d'autres distributions Linux. Cela permet à apache de l'utilisateur (
www-data
) pour s'exécuter uniquementejabberdctl
avec des privilèges élevés et sans exiger un mot de passe.Tout ce qui reste est le code PHP:
De sécurité
Il est important de noter que cela ne présente un risque de sécurité important, même si vous êtes seulement en permettant une commande à exécuter par
www-data
. Si vous utilisez cette méthode, vous devez assurez-vous de protéger le code PHP derrière une sorte d'authentification, de sorte que non seulement tout le monde peut le faire exécuter. Au-delà de l'évidence des risques de sécurité, elle pourrait ouvrir votre serveur jusqu'à une attaque de Déni de Service.www-data ALL= (ejabberd) NOPASSWD: /usr/sbin/ejabberdctl
de sorte queejabberdctl
n'est pas exécuté en tant que root, mais que l'utilisateurejabberd
. Exécuterejabberdctl
dans votre code comme ceci:sudo -u ejabberd ejabberdctl
.bonne prise. J'ai mis à jour ma réponse.
Même problème, je suis confronté à linux, (Erreur : sh: /bin/su: Permission denied), Solution (pour Ubuntu) - ajoutez cette ligne à la fin de /etc/sudoers: Comment ajouter des sous linux ?
Ubuntu est une distribution linux basée sur debian. Chaque distribution linux a sa propre façon de faire certaines choses. Je vous suggère de le googler pour l'emplacement du fichier sudoers, dans votre distribution linux.
J'ai essayé de Googler, mais encore incapable de le faire. J'utilise CentOS distribution linux,Pouvez-vous m'aider ?
OriginalL'auteur Andrew Ensley
Je suis tombé sur cette question en 2016, il y a beaucoup de manières plus faciles à mettre en œuvre ce que l'on a accepté la réponse et le plus voté.
https://github.com/fabiang/xmpp
ici, c'est la classe que j'ai écrit pour l'ajout d'un utilisateur:
Enfin, voici un exemple de code pour l'utilisation de cette classe:
La bibliothèque de l'appel échouera si le serveur ne dispose pas d'un certificat SSL valide. Soit d'un certificat valide, ou de remplacer cette partie dans SocketClient.php avec l'extrait de code ci-dessous
J'obtiens cette erreur impossible d'activer les crypto Fatal error: Uncaught exception 'Fabiang\Xmpp\Exception\ErrorException'
Je pense que ce serait résolu avec la dernière étape dans la réponse, la partie où vous mettez à jour SocketClient.php
J'ai remplacé le code existant avec la dernière étape de votre réponse, Même erreur ,
Ce n'est pas de créer aucun problème pour moi, mais sa ne va pas créer n'importe quel utilisateur dans ejabberd donc, avez-vous tout de débogage de points ?
OriginalL'auteur Amr H. Abd Elmajeed
Si vous voulez un endroit propre et sûr moyen de le faire à l'aide de PHP dans le protocole XMPP, je vous recommande de travailler avec cet exemple de script register_user.php. C'est un exemple qui peut être trouvé à l'intérieur de Jaxl Bibliothèque PHP.
Télécharger Jaxl de la bibliothèque et de l'utilisation, comme suit:
OriginalL'auteur Abhinav Singh
La façon la plus simple de le faire est d'utiliser mod_xmlrpc - ce qui vous permet d'exécuter la ejabberdctl commandes à l'aide de xmlrpc. C'est facile à utiliser avec une bibliothèque comme:
https://github.com/gamenet/php-jabber-rpc
OriginalL'auteur richp10
J'ai résolu le problème avec mod_register_web [Un, Deux]. Il n'exige pas des tonnes de code, et, je pense, est assez sécurisé. mod_register_web fournit une page html avec la POSTE simple formulaire pour enregistrer un nouvel utilisateur.
Activer le module http distinct à l'écoute (dans mon cas, le port 5281). Faire de ce port disponible uniquement pour les les demandes locales avec "ip" paramètre.
Exemple de demande:
Demande peut être exécuté à partir d'un code php avec la bibliothèque appropriée (qui était déjà dans mon cadre).
OriginalL'auteur serkas
curl-XPOST 127.0.0.1:5281/api/inscrivez -d '{"utilisateur":"de la chance","hôte":"data.com","mot de passe":"test"}'
Plein format json doit être soumis curl '{"utilisateur", "lucky", "maître": "data.com", "mot de passe", "test"}', tout doit être ajusté pour le format de la langue existante et les données existantes ejabberd doc
OriginalL'auteur Fikalefaza