Professional Documents
Culture Documents
Effectué à :
Dép. TI
Référence AN/SE 2010/S01
CODE IRP05
ISET Djerba | TriTux PAGE 1
Dédicaces
A toute ma famille,
à mes enseignants,
à mes amis,
et à mes camarades
je dédie ce travail.
Walid Karray
1. Chapitre 1 : Introduction
1
Société Anonyme à Responsabilité Limitée
2
Société de service et d’ingénierie de l’informatique
l'approche des activités liées aux NTIC par l'adaptation du choix "Open Source " garantissant
la sécurité, fiabilité, flexibilité, et surtout, une évolution quotidienne vers le top de la
technologie.
- Logiciels libres,
- Annuaires LDAP3,
- Messageries mail,
- Supervision et monitoring,
- Réseaux complexes,
- Sécurité et optimisation,
- …
Références de Tritux:
- Tunisie Telecom,
- Assurances BIAT,
- Mobile Services,
- Nouvelair,
- Alva,
3
Lightweight Directory Access Protocol
4
Short Message Service
5
Multimedia Messaging Service
6
Gnu’s Not Unix
- Sameteam,
- PixelJ,
- Attijari Bank,
- …
CEO : Acronyme anglais pour « Chief Executive Officer », en français le chef de direction
et tient le rang le plus élevé dans la hiérarchie de l’entreprise son rôle est de superviser
tout les projets en cours de développement et leurs état d’avancement, maintenir le
contact avec les clients, en contact avec les chefs de projet, le recrutement etc.….
Les chefs de projets : Les chefs de projets sont chargées de guider les équipes de
développements et de mener les projets et de contrôler leur bon déroulement.
7
File Transfer Protocol
- et encore plus…
Existe-il un système informatique aussi performent qui peut répondre à plusieurs besoins
à la foi ? Comme par exemple, un système pouvant à partir des informations stockés sur
chaque étudiant de gérer automatiquement leurs comptes FTP, leurs comptes Mail, leurs
accès au réseau sans fil, les notifiés par SMS, leurs envoyer les calendriers et des documents
numériques, etc...
Par les moyens présents, si un établissement pense à offrir ces différents services à ses
quelques milliers d’étudiant, il faudra compter des semaines de travails pour arriver à un
résultat presque satisfaisant !
- Par quel moyen sera assuré l’échange de flux d’information entre les différents
systèmes ?
C’est pour cette raison que le concept SOA8 et le BPM 9 sont les choix les plus appropriés
pour résoudre notre problématique.
8
Service Oriented Architecure
9
Business Process Management
10
Processus de coordination d'un échange d'information à travers l'interaction de services web. « Source
Wikipedia – http://fr.wikipedia.o rg/wiki/Orchestration _(informatique) »
Par définition un service est une tâche exécuté par un individu (un fournisseur) à
l’attention d’un autre individu (un consommateur), le principe est le même dans le jargon
informatique.
Demande
Message
Réponse
Message
Par analogie avec le concept objet, un service ressemble beaucoup à une méthode d’une
classe, il permet de recevoir des données et de renvoyer le résultat. Disposant plus
d’avantages qu’une méthode un service est distingué par le fait qu’il peut être invoqué à
distance et par n’importe quelle plateforme.
Au terme d’interopérabilité, l’architecture SOA repose sur des normes décrites à travers
WS-I 11.
Un service peut être une activité (suite d’appels à d’autres services), appelé autrement
service de large granularité ou service composite.
11
Un consortium industriel initié pour la promotion de l’interopérabilité entre plateformes par la rédaction
des spécifications des Services Web WS-*
Architecture SOA
Service X
Service W
Demandeur 2
Service Y
Demandeur 1
Service U
Service Z
Service composite
Service V
Orchestration
L’architecture SOA est représentée par un modèle en couches, voir la figure de ci-
dessous.
Présentation
Consommateur
Application
Application
Web
Terminal
Appareil
Mobile 5
Orchestration
WORKFLOW
BPEL, BPM
4
Services
Services
Services web
3
Composants,
Méthodes
2
Func () { Func () {
----
Func () { ----
Func () {
------- -------
Méthodes de classes } --- } ---
} }
bibliothèques,drivers...
Systèmes &
Ressources
Serveurs,
DB
DB
I0II0I0I0I0
I0II0I0I0I0
II0III00I0I
II0III00I0I
0I0III0I0I0
0I0III0I0I0
I0I0I0
I0I0I0
1
Bases de données..
Couche 1 (Les systèmes et les ressources): Englobe des systèmes informatiques (logiciels
et matériels) hétérogènes et différentes types de ressources telle que les bases de
données et des fichiers.
Couche 3 (Services) : C’est à ce niveau que la logique métier est devenu caché à
l’utilisateur ainsi que le dialogue avec les différentes systèmes et ressources est devenu
au moyen d’un protocole ouvert (standard).
Couche 5 (Présentation): Elle représente l’interface par laquelle les utilisateurs finaux
(consommateurs de services) peuvent consumer les différents services et interagir
indirectement avec les différents systèmes existant.
2.2.1. Introduction
Les services web représentent un ensemble de fonctionnalités distribués sur intranet ou
internet qui peuvent être exécutés à distance à travers les protocoles d’internet tel que
HTTP12/HTTPS 13et SMTP 14.
2.2.2.1. XML-RPC
XML-RPC est un protocole RPC (Remote procedure call), une spécification simple et un
ensemble de codes qui permettent à des processus s'exécutant dans des environnements
différents de faire des appels de méthodes à travers un réseau.
Les processus d'invocation à distance utilisent le protocole HTTP pour le transport des
données et la norme XML 15 pour le codage des données.
XML-RPC est conçu pour permettre à des structures de données complexes d'être
transmises, exécutées et renvoyées très facilement.
Requête XML-RPC :
12
HyperText Transfer Protocol
13
HTTP Secure
14
Simple Mail Transfer Protocol
15
Extensible Markup Language
<methodName>calculeSurfaceCercle</methodName>
<params>
<param>
<value><double>2.41</double></value>
</param>
</params>
</methodCall>
Réponse XML-RPC :
HTTP/1.1 200 OK
Date: Sat, 02 Jan 2010 23:20:04 GMT
Server: Apache.1.3.12 (Unix)
Connection: close
Content-Type: text/xml
Content-Length: 124
<?xml version="1.0"?>
<methodResponse>
<params>
<param>
<value><double>18.24668429131</double></value>
</param>
</params>
</methodResponse>
<?xml version="1.0"?>
<methodResponse>
<fault>
<value><string>No such method!</string></value>
</fault>
</methodResponse>
16
Simple Object Access Protocol
17
Web Services Description Language
Un document WSDL (basé sur XML) permet la description d’un service, il décrit les
paramètres d’entrés du service et le format et le type des données retournées.
Les inconvénients :
- Il faut avoir une idée sur les structures des différentes tables pour pouvoir
exécuter des requêtes,
- Communiquer des informations sur l’SGBD tel que son adresse IP, le port qu’il
utilise, nom des tables… peuvent aider les pirates pour accéder illégalement aux
données confidentielles.
Maintenant, si on reprend le même exemple, mais cette fois en se basant sur les services
web SOAP. (Après une procédure d’urbanisation)
http://podbridge12.intranet/projects/unstable/podbridge/web/index.php/wsdl/auto
/691292877050480f54b5/getStudentById
Les deux figures suivantes représentent des extraits du même document WSDL décrivant
le service getStudentById :
- Identifier les paramètres nécessaires ainsi que leurs types pour pouvoir générer le
message XML SOAP (requête) approprié pour notre service.
Invoquer un service web SOAP est le faite d’envoyer à travers HTTP-POST un message au
format XML (Requête) à l’adresse URL (SOAP Address) indiquée dans le document WSDL.
Les avantages :
- grâce au WSDL, on connait les différents paramètres, les variables, les types … du
service.
- tout les services web peuvent êtres consumer/tester par le même client.
- Le port 80 est toujours ouvert parce qu'il est employé par le protocole HTTP
utilisé par les navigateurs Web, donc l’invocation d’un service web peut être
possible de n’importe quel emplacement et par n’importe quel plateforme.
2.2.3. Résumé
On peut dire que les services web :
2.3.1. Introduction
Dans le concept SOA, l’orchestration s’explique par un enchainement d’invocation de
services web de fines granularités obéissant à un chef d’orchestre : WS-BPEL18 est un langage
d’orchestration de services web.
Dans un service composite les services web sont reliés à travers des standards (Messages
XML). Ces standards assurent le découplage, c’est-à-dire la réduction des dépendances ;
(Couplage faible).
2.3.2. Exemple
Dans cet exemple, on se propose de réaliser un processus pour une gamme d’appareils
mobile, qui renseigne son utilisateur sur les salons de thé les plus proches en les indiquant
sur la carte de Google Maps.
Notre process aura besoin de faire appel à 4 services partenaires (correspondent aux
rectangles colorés en verts dans le diagramme qui suit).
2) Internet Banking Web Service : Service web fournit par la banque de l’utilisateur de
l’appareil qui lui permet de consulter son solde en tout sécurité.
3) GSM Tracking Web Servie : Service web de géolocalisation fournit par l’opérateur de
téléphonie mobile. Il permet de renvoyer la longitude et la latitude de l’emplacement
de l’appareil.
18
(Business Process Execution Language)
4) Google maps API : Service web fournit par Google permettant de renvoyer des
informations (tel que : sa nature, son nom, longitude, latitude…) sur les endroits qui
entourent un point donné par sa longitude et latitude.
Services partenaire (Google Maps Service partenaire (GSM Tracking) L'appareil Mobile Service partenaire (Internet
API) Banking Service)
{Donnée:
Rayon (real) Entrée: (Aucun)
min=0.1
max=10.0} Sortie:
Saisir le rayon (zone de recherche - SN (Subscriber number) (number)
- Valeur en km) - numéro de compte (number)
Entrée:
- SN (Subscriber Number) (number)
Entrée: Quel est son numéro de tel
Sortie: et le numéro de sa carte de crédit ? Saisir code confidentiel
- Cherche (string) = "Salon de thé" - Logitude (string)
- Rayon en KM (real) - Lattitude (string)
- Longitude (string) HTTPS (SSL)
- Lattitude (string)
BPEL4WS « Business Process Execution Language For Web Services », devenu WS-
BPEL est un standard de l’orchestration de services web.
Ce langage a été défini dans sa version 2.0 par une spécification du consortium OASIS 19
en 2007.
BPEL : Architecture
- Process flow template : code source (BPEL) du processus métier générer par
l’éditeur graphique BPEL.
- Moteur BPEL (BPEL Engine) : Le moteur BPEL agissant comme une machine
virtuelle, permet l’exécution du code BPEL (ça inclus l’invocation des servies web,
le mapping de donnés, les transactions, la sécurité, et encore plus…)
19
Organization for the Advancement of Structured Information
20
Figure 11 – Eléments de BPEL (Architecture)
Fichier BPEL :
C’est un fichier dont le contenu est basé sur XML et qui porte dans la plus part des cas
l’extension (.bpel), qui représente le code source de l’application qui va constituer le
processus décrivant la logique des actions à exécuter par le moteur d’orchestration.
BPEL est un langage d’orchestration de services web basé sur langage XML, comme
n’importe quel langage de programmation il possède un vocabulaire propre à lui.
- La balise <process> :
<process name="processRUById"
targetNamespace="http://enterprise.netbeans.org/bpel/processRUById/processRUById"
xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
[…]
- La balise <import> :
20
Figure - Référence: http://www.developer.com/services/article.php/3609381/An-
Introduction-to-BPEL.htm
- La balise <partenerLinks> :
Permet de lier des actions définies dans le fichier WSDL (via partnerLinkType) au process
BPEL.
<partnerLinks>
[…]
<partnerLink name="pbServicesLocalPL"
xmlns:tns="http://enterprise.netbeans.org/bpel/servicesWrapper"
partnerLinkType="tns:PodBridgeLinkType" partnerRole="PodBridgeRole"/>
[…]
</partnerLinks>
- La balise <variables> :
- La balise <sequence> :
<sequence name="main_seq">
[Actions]
</ sequence>
- La balise <receive> :
- La balise <reply> :
- La balise <invoke> :
- La balise <if> :
Condition
<if name="ifhastel">
<condition>$GetStudentByIdOut.body/ns1:response/ns1:tel != ''</condition>
[…]
</if>
- La balise <flow> :
<flow name="Flow1">
[…]
</flow>
- La balise <forEach> :
- La balise <while> :
<while name="While1">
<condition>$variable != true()</condition>
[…]
</while>
- La balise <repeatUntil> :
<repeatUntil name="RepeatUntil1">
[…]
<condition>$GetNextIdOut.body/ns0:response/ns0:last = true() </condition>
</repeatUntil>
2.3.4. Résumé
Avantages de BPEL
21
eXtensible Stylesheet Language Transformation
- Se base sur des standards (Exemple : SOAP/WSDL pour les services web et BPEL
pour orchestration)
Les inconvénients :
3.1. Introduction
Maîtriser des langages de programmation orientée objet tel que PHP, C++ ou Java est
aujourd’hui quelque chose fondamentale pour la réalisation des applications complexes, en
plus grâce à la programmation objet, on apprendra à savoir décomposés les grands
problèmes en des sous-problèmes, et par suite ça permet à des équipes indépendantes de
les résoudre aisément. Malgré ça une question qui se pose toujours : comment va-t-on
présenter notre application à des individus ne maitrisant pas le langage par lequel a été
développé?
1) un langage (pour s'exprimer clairement à l'aide des concepts objets), qui doit
permettre de :
- définir les vues qui permettent de décrire tous les aspects d'un système avec des
concepts objets.
Comme UML n'impose pas de méthode de travail particulière, il peut être intégré à
n'importe quel processus de développement logiciel de manière transparente. UML est une
sorte de boîte à outils, qui permet d'améliorer progressivement nos méthodes de travail,
tout en préservant nos modes de fonctionnement.
Intégrer UML par étapes dans un processus, de manière pragmatique, est tout à fait
possible. La faculté d'UML de se fondre dans le processus courant, tout en véhiculant une
démarche méthodologique, facilite son intégration et limite de nombreux risques (rejet des
utilisateurs, coûts...).
3.2.1. Introduction
Cette première phase de l’étude conceptuelle s’intéresse au 3 premiers couches du
Concept SOA. Dans notre étude on s’intéressera à la modélisation des connecteurs
PodBridge 1.2, à travers lesquels on va intégrer les différentes systèmes et protocoles
présents. Ces connecteurs servent d'interface entre le middleware (PodBridge) et les
différents systèmes applicatifs présents.
Les connecteurs de PodBridge sont des classes qui dérivent tous de la même classe mère
PodBridgeConnector et qui implémentent l’interface PodBridgeConnectorInterface.
«interface»
PodBridgeConnectorInterface
+connect() : boolean
+disconnect() : boolean
PodBridgeConnector
#params : array
#error : array
#sessionLog : array
#sessionLogCounter : integer = 0
+getLastErrorMsg() : string
+setLastError()
+setParam()
+getSessionLog()
+setSessionLog() : array
+getSessionLogCounter() : integer
NOM_DU_CONNECTEUR
Les différents systèmes et ressources visés par notre projet sont répartis sur deux réseaux
géographiquement distants, le premier est un réseau local d’un établissement
d'enseignement supérieur et l’autre est celui du Réseau National Universitaire (RNU).
1) Le serveur de base de données dans lequel sont centralisées les informations sur
chaque étudiant.
3) Le point d’accès sans fil du département informatique qui permet une connexion
sans fil au réseau local de l’établissement et à internet, la connexion est sécurisé
grâce au filtrage MAC ainsi par une clé.
etudiant
id : character varying(8) <<PK>>
nom : character varying(25)
prenom : character varying(25)
dep : character varying(5)
spec : character varying(5)
niveau : integer
tel : character varying(8)
email : character varying(255)
loginftp : character varying(255)
adrmac : character varying(17)
refrecu : character varying(16)
process : character varying(3)
Champ Description
id Identifiant de l’étudiant
nom Nom de l’étudiant.
prenom Prénom de l’étudiant.
dep Code de département
spec Code de spécialité
niveau Niveau
Tel Numéro de téléphone personnel (GSM).
email Adresse email.
loginftp Login du compte FTP sur le réseau de l’institut.
adrmac Adresse MAC de l’interface réseau sans fil de l’ordinateur portable de
l’étudiant.
refrecu Référence de l’accusé de payement.
process Code d’état du process.
Note : En cas d’erreur (identifiant non existant, serveur déconnecté…) chaque service
web doit le signaler en renvoyant au client la description et le code de l’erreur.
«interface»
PodBridgeConnectorInterface
+connect() : boolean
+disconnect() : boolean
PodBridgeConnector
#params : array
#error : array
#sessionLog : array
#sessionLogCounter : integer = 0
+getLastErrorMsg() : string
+setLastError()
+setParam()
+getSessionLog()
+setSessionLog() : array
+getSessionLogCounter() : integer
BDetu
-conn : ressource = null
+getStudentById() : array
+updateStudentById() : boolean
+getNextId() : array
-executeSQL() : array
+connect() : boolean
+disconnect() : boolean
getStudientById dep,spec,niveau,te
l,email,loginftp,adr
mac,refrecu,proce
ss). Array
Met à jour une ou plusieurs id :Identifiant. Vrai si succès de la
informations sur un String mis à jour.
étudiant tel que, son email, boolean
Tel String
tel, login ftp…
Service
récupérer le
getNextId premier
identifiant’
String
Code état du
process (Filtre)
Envoi la requête SQL au sql : Requête Résultat de la
SGBD et revoie le résultat. SQL String requête. Array
executeSQL Numrows :
Nombre de ligne
retournées integer
connect Se connecter au serveur Vrai si succès de la
La figure suivante fournit une description étendue sur la logique métier caché derrière
chaque service allant du consommateur de service au système final.
Note : En cas d’erreur (utilisateur déjà existant, serveur FTP déconnecté…) chaque service
web doit le signaler en renvoyant au client la description et le code de l’erreur.
«interface»
PodBridgeConnectorInterface
+connect() : boolean
+disconnect() : boolean
PodBridgeConnector
#params : array
#error : array
#sessionLog : array
#sessionLogCounter : integer = 0
+getLastErrorMsg() : string
+setLastError()
+setParam()
+getSessionLog()
+setSessionLog() : array
+getSessionLogCounter() : integer
FTPAccount
-sshCon : ressource = null
-authenticated : boolean = false
-regexValidator : array
-generateRandomPasswd() : string
+ifUserExists() : boolean
-getUnixDate() : string
+doCreateFTPUserAccount() : array
+setFTPUserAccountExpiryDate() : boolean
+setFTPUserWelcomeMsg() : boolean
+doDisableFTPUserWelcomeMsg() : boolean
+doChangeFTPUserPassword() : boolean
-doCheckPassword() : boolean
+doDeleteFTPUserAccount() : boolean
+doFTPsendFile() : boolean
-ssh2Exec() : stream
+connect() : boolean
+disconnect() : boolean
Date
doCreateFTPUserAccoun d’expiration
t boolean
use_welcome :
Utiliser le
message de
bienvenu par
défaut (Vrai par
défaut) boolean
succès. boolean
password :
doChangeFTPUserPa
Ancien mot de
ssword
passe. String
new_password :
Nouveau mot de
passe. String
Vérifie si le mot de passe user : Nom Vrai si la
passé en paramètre est d’utilisateur. vérification est
correct. String positive et faux
doCheckPassword
dans le cas
password : Mot
contraire.
de passe String
boolean
Supprime un compte user : Nom Vrai si le compte
SERVICE
La figure de la page suivante fournit une description étendue sur la logique métier caché
derrière chaque service allant du consommateur de service au système final.
P o d B r id g e 1 .2 S O A M id d le w a r e S S H (2 2 )
F T P (2 1 )
F ro n te n d P B 1 .2 C o re P B 1 .2 C o n n e c to r E n d s y s te m
« F T P A c c o u n t.c o n n e c to r.p h p » O penSSH and
M o n ito r p ro F T P d o n U b u n tu
tr a n s a c tio n s lo g
s e rv e r
T r a c e r e q u e s ts a n d C a ll m e th o d :
< < In c lu d e > > g e n e r a te
re s p o n s e s
R a n d o m P a s s w d ()
S e tu p P B 1 . 2 C a ll m e th o d :
d o C r e a te F T P
U s e rA c c o u n t()
P B a d m in G et W SD L < < In c lu d e > >
A u th e n tic a te a n d
c h e c k p r iv ile g e C a ll m e th o d :
ifU s e r E x is ts ( ) S h e ll e x e c u te :
S O A P w e b s e r v ic e A P I u s e r a d d … - g F T P ...
H T T P (8 0 )
< < In c lu d e > >
< < In c lu d e > >
< < In c lu d e > >
1) Ajouter une adresse dans le filtre MAC du point d’accès sans fil (autorisation
d’accès).
2) Supprimer une adresse du filtre MAC du point d’accès sans fil. (interdiction
d’accès)
3) Récupérer des informations sur le point d’accès sans fil.
Note : En cas d’erreur (format adresse MAC incorrecte, connexion impossible au Point
d’accès…) chaque service web doit le signaler en renvoyant au client la description et le code
de l’erreur.
«interface»
PodBridgeConnectorInterface
+connect() : boolean
+disconnect() : boolean
PodBridgeConnector
#params : array
#error : array
#sessionLog : array
#sessionLogCounter : integer = 0
+getLastErrorMsg() : string
+setLastError()
+setParam()
+getSessionLog()
+setSessionLog() : array
+getSessionLogCounter() : integer
APACLManager
-regexValidator : array
+doForwardMACaddr() : array
+doRomoveForwordedMACaddr() : boolean
+getAccesPointInfo() : array
+connect() : boolean
+disconnect() : boolean
La figure de la page suivante fournit une description étendue sur la logique métier caché
derrière chaque service allant du consommateur de service au système final.
Authenticate and
HTTP (80) SOAP web service API check privilege
Call method :
<< Include >> Add mac address to
SocketSend()
ACL
<< Include >>
Invoke WS :
doForwardMACaddr << Include >>
<< Include >> Call method :
doRomoveForworded
Network
MACaddr()
admin
Service MACaddr
Consumer << Include >>
if cached
Call method :
getAccesPointInfo()
Invoke WS :
getAccesPointInfo
Get response from
cache
1) Imprimer une page du web sur une imprimante partagée via CUPS,
2) Retourner une liste de noms des imprimantes partagées par le serveur CUPS.
Note : En cas d’erreur (page web introuvable, serveur CUPS déconnecté…) chaque service
web doit le signaler en renvoyant au client la description et le code de l’erreur.
«interface»
PodBridgeConnectorInterface
+connect() : boolean
+disconnect() : boolean
PodBridgeConnector
#params : array
#error : array
#sessionLog : array
#sessionLogCounter : integer = 0
+getLastErrorMsg() : string
+setLastError()
+setParam()
+getSessionLog()
+setSessionLog() : array
+getSessionLogCounter() : integer
IPPService
-ipp : CupsPrintIPP Object = null
+doPrintWebPage() : boolean
-doPrintInternalDocument() : boolean
+connect() : boolean
+disconnect() : boolean
d’impression
(optionnel)
String
Renvoie les adresses (URI) Des URI
des imprimantes délimités par
getPrinters
partagées par CUPS des points
virgules. String
Envoyer un ordre filepath : Chemin Vrai si l’ordre
d’impression à une d’accès à un d’impression à
imprimante partagée d’un document été envoyé.
document présent sur le présent sur le boolean
serveur. serveur. String
doPrintInternalDocument
jobname : Nom
du job
d’impression
(optionnel)
String
Se connecter au serveur Vrai en cas de
CUPS. succès de la
connect
connexion.
boolean
Se déconnecter du serveur Vrai en cas de
CUPS. succès de la
disconnect
déconnexion.
boolean
La figure de la page suivante fournit une description étendue sur la logique métier caché
derrière chaque service allant du consommateur de service au système final.
Get WSDL
Authenticate and Call method : Scan for available
check privilege doPrintInternalDocument() printers
HTTP (80) SOAP web service API << Include >>
Call method :
doPrintWebPage()
Invoke WS : Handle request
doPrintInternalDocument
<< Include >>
Service
Consumer << Include >>
Invoke WS :
getPrinters if cached Call method :
getPrinters()
Note : En cas d’erreur (identifiant incorrecte, site web indisponible …) ce service web doit
le signaler en renvoyant au client la description et le code de l’erreur.
«interface»
PodBridgeConnectorInterface
+connect() : boolean
+disconnect() : boolean
PodBridgeConnector
#params : array
#error : array
#sessionLog : array
#sessionLogCounter : integer = 0
+getLastErrorMsg() : string
+setLastError()
+setParam()
+getSessionLog()
+setSessionLog() : array
+getSessionLogCounter() : integer
wwwsubscr
-curl_handle : ressource = null
-getAccuseRef() : string
+getAccuse() : array
+ssh2Exec() : stream
+connect() : boolean
+disconnect() : boolean
La méthode getAccuse ( ) sera choisi pour êtres exposée en tant que service web SOAP à
travers PodBridge.
La figure de la page suivante fournit une description étendue sur la logique métier caché
derrière ce service allant du consommateur de service au système final.
Get WSDL
Authenticate and Call method : Get page of
check privilege getAccuse() requested URL
HTTP (80) SOAP web service API << Include >>
Call method :
getAccuseRef()
Handle request
Service
Consumer << Include >>
if cached
«interface»
PodBridgeConnectorInterface
+connect() : boolean
+disconnect() : boolean
PodBridgeConnector
#params : array
#error : array
#sessionLog : array
#sessionLogCounter : integer = 0
+getLastErrorMsg() : string
+setLastError()
+setParam()
+getSessionLog()
+setSessionLog() : array
+getSessionLogCounter() : integer
SMSService
-sshCon : ressource = null
-authenticated : boolean = false
-regexValidator : array
+doSendSMS() : boolean
-stripSpaces() : boolean
-ssh2Exec() : stream
+connect() : boolean
+disconnect() : boolean
destinataire. boolean
doSendSMS String
message :
Message texte
court à envoyer
String
Supprimer des espaces qui phonenumber : Numéro de
existent dans le numéro Numéro de téléphone sans
de téléphone et valider téléphone String espaces blanc
stripSpaces son format. String
boolean
Se connecter au serveur Vrai en cas de
SSH (initialise la ressource succès de la
connect
sshCon). connexion.
boolean
Se déconnecter du serveur Vrai en cas de
SSH et libère la ressource succès de la
disconnect
sshCon. déconnexion.
boolean
La méthode doSendSMS () sera choisi pour être exposée en tant que service web SOAP à
travers PodBridge.
La figure de la page suivante fournit une description étendue sur la logique métier caché
derrière ce service allant du consommateur de service au système final.
if cached
1) Créer un nouveau compte mail (1ère version - nom d’utilisateur est au choix),
2) Créer un nouveau compte mail (2ème version - le nom d’utilisateur doit être auto-
généré à partir du nom et le prénom de son propriétaire),
3) Changer le mot de passe d’un compte mail,
4) Supprimer un compte mail,
5) Désactive un compte mail,
6) Active un compte mail,
7) Envoyer un message à n’importe quelle adresse électronique.
«interface»
PodBridgeConnectorInterface
+connect() : boolean
+disconnect() : boolean
PodBridgeConnector
#params : array
#error : array
#sessionLog : array
#sessionLogCounter : integer = 0
+getLastErrorMsg() : string
+setLastError()
+setParam()
+getSessionLog()
+setSessionLog() : array
+getSessionLogCounter() : integer
MailAccount
-sshCon : ressource = null
-authenticated : boolean = false
-regexValidator : array
-generateRandomPasswd() : string
-ifUserExists() : boolean
-generateUserName() : string
-doStripAtDomain() : string
+doCreateMailUserAccount2() : array
+doCreateMailUserAccount() : array
+doChangeMailUserPassword() : boolean
-doCheckPassword() : boolean
+doDeleteMailUserAccount() : boolean
+doUnlockMailUserAccount() : boolean
+doLockMailUserAccount() : boolean
+doSendMail() : boolean
-ssh2Exec() : stream
+connect() : boolean
+disconnect() : boolean
‘SquirrelMail’)
générer le mot
doCreateMailUserAcco Array
de passe.
unt
boolean
password: mot
de passe (si
genpswd reçoit
faux).
String
Créer un nouveau fstname : (adresse email,
compte mail (2) prénom. String mot de passe,
SERVICE
doUnlockMailUserAcco
VICE
t String désactivé.
boolean
Modifie le mot de emailaddr: Vrai si le mot de
passe d’un compte adresse email. passe a été
mail. String changé avec
SERVICE
succès. boolean
password :
doChangeMailUserPass
Ancien mot de
word
passe. String
new_password
Nouveau mot de
passe. String
Permet (à un from: adresse Vrai si le
administrateur) l’envoi email de message à été
de messages à l’envoyeur. envoyé avec
n’importe quelle String succès. boolean
adresse électronique.
to : adresse
SERVICE
email du
doSendMail destinataire.
String
message : Corps
du message
String
subject : Sujet du
message
String
Vérifie si le mot de user : Nom Vrai si la
passe passé en d’utilisateur. vérification est
paramètre est correct. String positive et faux
doCheckPassword dans le cas
password : Mot contraire.
de passe String boolean
La figure de la page suivante fournit une description étendue sur la logique métier caché
derrière chaque service allant du consommateur de service au système final.
3.2.4. Conclusion
Finalement on est arrivé à la fin de cette première phase par la conception des
connecteurs PodBridge 1.2. Chaque connecteur englobe une logique métier lui permettant
de s’adapter et dialoguer avec le système informatique dont il est conçu pour.
«interface»
PodBridgeConnectorInterface
+connect() : boolean
+disconnect() : boolean
PodBridgeConnector
#params : array
#error : array
#sessionLog : array
#sessionLogCounter : integer = 0
+getLastErrorMsg() : string
+setLastError()
+setParam()
+getSessionLog()
+setSessionLog() : array
+getSessionLogCounter() : integer
«interface»
PodBridgeConnectorInterface
+connect() : boolean
+disconnect() : boolean
PodBridgeConnector
#params : array
#error : array
#sessionLog : array
#sessionLogCounter : integer = 0
+getLastErrorMsg() : string
+setLastError()
+setParam()
+getSessionLog()
+setSessionLog() : array
+getSessionLogCounter() : integer
MailAccount
-sshCon : ressource = null
-authenticated : boolean = false
-regexValidator : array
-generateRandomPasswd() : string
-ifUserExists() : boolean
-generateUserName() : string
-doStripAtDomain() : string
+doCreateMailUserAccount2() : array
+doCreateMailUserAccount() : array
+doChangeMailUserPassword() : boolean
-doCheckPassword() : boolean
+doDeleteMailUserAccount() : boolean
+doUnlockMailUserAccount() : boolean
+doLockMailUserAccount() : boolean
+doSendMail() : boolean
-ssh2Exec() : stream
+connect() : boolean
+disconnect() : boolean
3.3.1. Introduction
Finalement, on est arrivés au niveau de la couche orchestration de services. Dans cette
phase 2ème phase de l’étude conceptuelle on s’intéressera à la conception des processus de
coordination d’un échange d’information à travers l’interaction des services web
précédemment conçus.
Quelques remarques :
Etats du processus :
- PAI : Renvoyé à la fin d’exécution. dans le cas où l’étudiant n’a pas encore
effectué le paiement des frais d’inscription.
Voici les différentes procédures que doit exécuter notre processus (ProcessRUById) :
- Mettre à jours la valeur du champ process par EXE (dans la table etudiant) pour
l’identifiant passé en paramètre.
d’alerte doit lui être envoyé par mail et SMS, ensuite le processus doit finir son
exécution et renvoyer le message ‘PAI’,
- si l’étudiant ne possède pas un compte mail, un nouveau compte mail doit donc
lui être créé sur le domaine RNU, ensuite les paramètres de son nouveau compte
doivent lui être envoyés par SMS.
- dans le cas où l’étudiant possède déjà un compte FTP, la date d’expiration de son
compte doive être étendue d’une année,
- envoyer sur son compte FTP son calendrier, ses cours et TP (en s’appuyant sur les
informations : département, spécialité et niveau).
- si l’étudiant a déjà fourni l’adresse MAC de la carte réseau sans fil de son
ordinateur portable, alors son ordinateur doit être autorisé à se connecté au
réseau sans fil de l’établissement à traves l’interface Wifi, ainsi qu’il doit être
informé par SMS et mail des paramètres du réseau Sans fil tel que (SSID, Clé),
- mettre à jour les données de l’étudiant sur la base de donnée par les nouvelles
informations telles que : la référence de son accusé de paiement de l’année
universitaire en cours, son nouveau login FTP, sa nouvelle adresse mail et le code
(process state code) renvoyé par le process à sa fin d’exécution,
Possède-il un
Lancer un nouveau job d’impression compte e-mail ?
pour l’accusé de paiement
INVOKE: « doPrintWebPage »
[non]
Mettre à jour la BD,
état process PAI
[oui] INVOKE: « updateStudentById »
Créer un nouveau compte e-mail
INVOKE:
«doCreateMailUserAccount » Renvoyer PAI
REPLY: ProcessRUByIdOut
Envoyer les paramètres du nouveau
compte mail par SMS
INVOKE: « doSendSMS »
[non]
[non] [oui]
[oui]
Renvoyer OK
REPLY: ProcessRUByIdOut
Paramètres d’entrés :
Un paramètre filtre (chaine de caractère) doit être spécifié avant l’exécution du processus
et doit prendre l’une des valeurs suivantes : ATT22, PAI ou * (signifie ATT et PAI).
Information renvoyées :
22
Indique que dans la table étudiant l’identifiant possédant le champ process égale à ATT n’a été traité
aucune fois par le processus ProcessRUById. (ATT est la valeur initiale du champ process à chaque nouvelle
insertion dans la table etudiant).
Récupérer l’indentifiant
Suivant
INVOKE: « getNextId »
[non]
Dernier identifiant ?
[oui]
3.3.4. Conclusion
Finalement on est arrivé à la fin de la 2ème phase par la conception de deux processus
métiers ProcessRUById et BatchProcessRU permettant l’orchestration des services conçus
dans la première phase.
Chapitre 4 : Réalisation
- Installation de PostgreSQL :
- Démarrage de PostgreSQL :
-- Connexion
…
postgres=# \i /home/walid/sql/create.sql
postgres=# \i /home/walid/sql/insert.sql
postgres=# \q
-- Connexion
…
postgres=# select * from etudiant;
Resultat :
<VirtualHost *:80>
ServerName inscription.edu.demo
DocumentRoot "/var/www/projects/unstable/inscription.edu.demo"
DirectoryIndex index.php
<Directory "/var/www/projects/unstable/inscription.edu.demo">
AllowOverride All
Allow from All
</Directory>
</VirtualHost>
Configuration :
- SSID : ETUDIANTS_WIRELESS
- Installation du webmail:
<VirtualHost *:80>
ServerName webmail.rnu.edu.demo
DocumentRoot "/usr/share/squirrelmail"
DirectoryIndex index.php
<Directory "/usr/share/squirrelmail">
AllowOverride All
Allow from All
</Directory>
</VirtualHost>
$ ./pbadmin pb-build-all-load
23
Extension pour les fichiers basés sur Ya ml (Yaml Ain’ t Markup Language)
Réponse (Utilisateur déjà existant / Code erreur : 804) – SOAP Faut Message:
L’illustration de la page suivante donne une vue générale sur l’intégration de chacun des
systèmes visés au moyen de PodBridge1 .2
d’inscription universitaire
debian5-02.intranet.demo
Administrateur Système
postgres-83.intranet.demo
Admin. Système
inscription.edu.demo
ap-21.intranet.demo
cups.intranet.demo
Serveur Mail –
SMTP & POP3
Serveur CUPS
Serveur FTP
rnu.edu.demo
SSH : 22 Telnet : 23 IPP : 631 Pgsql : 5432 SSH : 22 HTTP : 80 SSH : 22
Admin. PodBridge
Admin. PodBridge
APACLManager.connector.php
APACLManager
FTPAccount.connector.php
IPPService.connector.php
SMSService.connector.php
wwwsubscr.connector.php
MailAccount.connector.php
FTPAccount
SMSService
BDetu.connector.php
IPPService
wwwsubscr
MailAccount
BDbetu
PodBridge 1.2 (Middleware SOA) – podbridge.intranet.demo PodBridge 1.2
ws.rnu.edu.demo
WS WS WS WS WS WS WS
SOAP SOAP SOAP SOAP SOAP SOAP SOAP
Consommateur Operation Operation Operation Operation Operation Operation Operation
Consommateur
de service X Operation X Operation X Operation X Operation X Operation X X Operation
Operation de service
Operation Z Operation Z Operation Z Operation Z Operation Z Operation Z Operation Z
Y Y Y Y Y Y Y
Serveurs d’application, Protocoles de Middleware SOA – PodBridge1.2 WSDL & Services Web SOAP
Connecteurs PodBridge
Ressources communication Intermédiation entre serveurs d’application et SOAP endpoint, description, XML,
Logique métier
Systèmes hétérogènes Règles de communication consommateurs de services XSD..
ère
Figure 33 –1 phase de l’urbanisation des deux réseaux (Services Web)
WS WS WS WS WS WS WS
SOAP SOAP SOAP SOAP SOAP SOAP SOAP
Operation Operation Operation Operation Operation Operation Operation
X Operation X Operation X Operation X Operation X Operation X X Operation
Operation
Operation Z Operation Z Operation Z Operation Z Operation Z Operation Z Operation Z
Y Y Y Y Y Y Y
invoke
invoke Messages XML SOAP
invoke (Requête et réponse)
invoke
invoke Invoke
invoke
Process
invoke
Receive Receive
GlassFish ESB 2.1
composant sun-bpel-engine
BPEL
invoke
BPEL
Reply Reply
bpel-engine.intranet.demo
ProcessRUById BatchProcessRU
WS WS
SOAP SOAP
ProcessRUById BatchProcessRU
Réponse :
HTTP/1.1 200 OK
Content-Type: application/soap+xml;charset="utf-8"
Transfer-Encoding: chunked
Date: Thu, 14 Jan 2010 13:58:02 GMT
Boite de réception :
Compte FTP :
Requête :
Content-Length: 382
Réponse :
HTTP/1.1 200 OK
Content-Type: application/soap+xml;charset="utf-8"
Transfer-Encoding: chunked
Date: Thu, 14 Jan 2010 13:48:19 GMT
d’inscription universitaire
debian5-02.intranet.demo
postgres-83.intranet.demo
inscription.edu.demo
ap-21.intranet.demo
cups.intranet.demo
Serveur Mail –
SMTP & POP3
Serveur CUPS
Serveur FTP
rnu.edu.demo
Serveurs d’application,
Ressources
Systèmes hétérogènes
Protocoles de
communication
Règles de communication
SSH : 22 Telnet : 23 IPP : 631 Pgsql : 5432 SSH : 22 SSH : 80 SSH : 22 Connecteurs PodBridge
Logique métier
APACLManager.connector.php
APACLManager
FTPAccount.connector.php
IPPService.connector.php
SMSService.connector.php
wwwsubscr.connector.php
Middleware SOA –
MailAccount.connector.php
FTPAccount
SMSService
BDetu.connector.php
IPPService
wwwsubscr
MailAccount
PodBridge1.2
BDbetu Intermédiation entre serveurs
d’application et consommateurs
de services
WS WS WS WS WS WS WS
SOAP SOAP SOAP SOAP SOAP SOAP SOAP
Operation Operation Operation Operation Operation Operation Operation
X Operation X Operation X Operation X Operation X Operation X X Operation
Operation
Operation Z Operation Z Operation Z Operation Z Operation Z Operation Z Operation Z
Y Y Y Y Y Y Y
invoke
invoke
invoke
invoke
invoke Invoke
invoke
Process
invoke
Receive Receive
GlassFish ESB 2.1
composant sun-bpel-engine
BPEL
invoke
BPEL
Reply Reply
bpel-engine.intranet.demo
WS WS
SOAP SOAP
ProcessRUById BatchProcessRU
ping.java
formulaire.php
start-pru-09-
deleteftp.pl 10-att.sh
1 <?php
2
3 //init
4 $client = new
SoapClient("http://podbridge.intranet.demo/projects/unstable/podbridge/web/index.php/wsdl/a
uto/691292877050480f54b5/getStudentById");
5
6 try {
7
8 //Arguements (paramètres d'entrées)
9 $arguments=array(
10 'key'=>'691292877050480f54b5',
11 'sync'=>'1',
12 'id'=>'12345678'
13 ) ;
14
15 //Apel de la méthode getStudentById
16 $result = $client->getStudentById($arguments);
17
18 //Affiche toute la réponse - Type: stdClass Object
19 print_r ($result);
20 //Affiche status - Type: stdClass Object
21 print_r ($result->status);
22
23
24 //Affiche le message renvoyé par podBridge (reponse)
25 echo $result->status->message ."\n";
26 //Affiche le prénom
27 echo $result->response->prenom."\n";
28 //Affiche l'adresse email
29 echo $result->response->email."\n";
30
31 }
32 catch (SoapFault $e) {
33 echo '['.$e->getCode().']';
34 echo $e->getMessage();
35 }
36
37 ?>
Voir source et capture d’écran de l’application web PHP (formulaire info etudiant) dans la
documentation technique.
#!/usr/bin/perl -w
#
# Ce code permet d’appeler le service web (doDeleteFTPUserAccount) exposé par podbridge
#
use SOAP::Lite;
my $soap = SOAP::Lite
-> uri ('urn:ftpacntns')
-> proxy
('http://podbridge.intranet.demo/projects/unstabl e/podbridge/web/api/index.php?wsdl');
unless ($res->fault) {
print $res->result(),"\n";
}else{
print 'FAULT CODE : ',$res->faultcode,"\n",'FAULT MESSAGE : ',$res->faultstring,"\n";
}
66 ………
67 ………
68 pbns.PodBridgePingService service = new pbns.PodBridgePingService();
69
70 QName portQName = new QName("urn:pbns" , "PodBridgePingPort");
71 String req = "<ping
xmlns=\"urn:pbns\"><key>691292877050480f54b5</key><sync>1</sync></ping>" ;
72
73 try { // Call Web Service Operation
74 Dispatch<Source> sourceDispatch = null;
75 sourceDispatch = service.createDispatch(portQName, Source.class,
Service.Mode.PAYLOAD);
76 Source result = sourceDispatch.invoke(new StreamSource(new
StringReader(req)));
77 String resultString = sourceToXMLString(result);
78 System.out.println("Received xml: \n" + resultString);
79 } catch (Exception ex) {
80 System.out.println("An error has occured: \n" + ex.getMessage());
81 }
82
83 ………
84 ………
#!/bin/bash
curl http://sun-bpel-
engine.intranet.demo/projects/unstable/podbridge/web/api/index_dev.php -d @soap-request.xml
Son architecture est modulaire, ce qui a permis d'écrire des extensions pour le support de
la cryptographie SSL/TLS (protocole FTPS) et l'extension de l'authentification via des bases
RADIUS, LDAP ou SQL.
Créé comme alternative Open Source à la suite logicielle proposée par la société SSH
Communications Security, OpenSSH est développé par l'équipe d'OpenBSD, dirigée par son
fondateur.
Ubuntu est une distribution Linux libre fondé sur Debian (basé sur GNU/Linux)
et commandité par la société Canonical. Ubuntu Server est une version pour
serveur.
SoapUI 3.0.1 :
PHP 5.2.6 :
Symfony intègre Proprel qui est lui aussi un Framework de mapping objet relationnel «
ORM » offrant une technique de programmation informatique qui crée l'illusion d'une base
de données orientée objet à partir d'une base de données relationnelle en définissant des
correspondances entre cette base de données et les objets du langage utilisé. On pourrait le
désigner par « correspondance entre monde objet et monde relationnel ».
Les fichiers de configuration employés par Symfony sont au format YAML qui est un
langage de sérialisation de données comme XML mais plus humain et facile interpréter.
PodBridge 1.2 :
4. Perspective
Par le manque de temps, on n’a pu se concentrer que sur un seul système d’information,
mais il est plus intéressant si on s’intéresse à urbaniser d’autres systèmes informatiques
géographiquement répartis et de nature de services différents. On peut même imaginer une
multitude d’applications suite à l’interaction entre les différents services qui peuvent êtres
fournis par l’office des services universitaires (hébergement, restaurants, inscription..), la
Poste (service de paiement en ligne), le site du CNS (Conseil National de la Statistique), et
encore d’autres…
6. Bibliographie
SOA and WS-BPEL par Yuli Vasiliev et packt publishing - ISBN 13 978-1-847192-70-7
http://www.tritux.com/index.php?option=com_content&task=view&id=21
http://www.softwareagility.gr/index.php?q=node/22
http://www.developer.com/services/article.php/3609381/An-Introduction-to-BPEL.htm
http://fr.wikipedia.org/wiki/XML-RPC
http://es.wikipedia.org/wiki/WS-BPEL
http://en.wikipedia.org/wiki/Web_service
http://en.wikipedia.org/wiki/Web_Services_Description_Language
http://fr.wikipedia.org/wiki/Urbanisation_(système_d'information)
http://en.wikipedia.org/wiki/System_integration
http://fr.wikipedia.org/wiki/Soa
http://fr.wikipedia.org/wiki/SOAP
http://fr.wikipedia.org/wiki/Proc%C3%A9dure_d%27entreprise
http://fr.wikipedia.org/wiki/Middlewares
Ré sumé : Ce rapport s'inscrit dans la préparation du Projet de Fin d' Etudes à l’Institut Supérieur
des Etudes Technologiques - ISET Djerba - 2009/2010. Le Projet a été réalisée dans la Société
''Tritux''- Tunis et vise à urbaniser les systèmes d'information académique et la gestion des données
sous les architectures de S.O.A et du B.P.M.
La migration vers l'Architecture Orientée Services ainsi qu'avec Business Process Management
permet la réorganisation des systèmes d'information de l'entreprise et la conformité rapide et
constante avec l'environnement évolutif.
Le projet est consacré totalement aux axes de l'architecture S.O.A pour générer une
fonctionnalité d'un ensemble de fonctions de base (Services) avec des composants afin de créer un
schéma d'interactions entre ces services.
Avec S.O.A et B.P.M, des efforts considérables ont été déployés pour garantir enfin un système
évolutif de l'information basée sur des composants connectés, sécurisé, facile à maintenir et à se
conformer aux normes standards.
Mots clé s : Urbanisation, intergiciel, AOS, BPM, Services web, BPEL, orchestration.
Abstract : The present report comes within the preparation of the Final Project Studies at the
Higher Institute of Technological Studies - I.S.E.T Djerba - 2009/2010. It was carried at Tritux
Company - Tunis and aims at urbanizing the academic information systems and data management
under S.O.A architecture and B.P.M.
The migration to Service Oriented Architecture altogether with Business Process Management
helps reorganize the information systems of the company and enable for quick and constant
conformity with the changing environment.
The project makes total use of S.O.A paradigms to generate functionality into a set of basic
functions, called Services with definite components to finally create pattern of interactions between
those services. Within S.O.A and B.P.M, considerable attempts have been made to finally guarantee a
scalable Information System based on connected components, secure, easy to maintain and conform
to standards norms.
Fichiers de configuration
Codes sources
Captures d’écran
Effectué à : Tritux
Réaliser par : Walid Karray
Table des matières
TABLE DES MATIERES....................................................................................................................................................... 2
1. FICHIERS DE CONFIGURATION.................................................................................................................. 3
1.1. ETC/HOSTS (RESOLUTION D 'ADRESSE)................................................................................................................. 4
1.2. ETC/POSTFIX /MAIN.CF (CONFIGURATION DE POSTFIX - SMTP SERVER)............................................................... 5
1.3. ETC/APACHE2/APACHE2.CONF (CONFIGURATION D ’APACHE) ............................................................................. 6
1.4. ETC/PHP 5/APACHE2/PHP.INI (CONFIGURATION DE PHP) .................................................................................. 8
1. FICHIERS DE
CONFIGURATION
#Par défaut
127.0.0.1 localhost.localdomain localhost
#Serveur FTP
127.0.0.1 etu-ftp.intranet.demo
#Serveur PostgreSQL
127.0.0.1 postgres-83.intranet.demo
#Serveur Cups
127.0.0.1 cups.intranet.demo
#SMS
127.0.0.1 sms.intranet.demo
readme_directory = no
# TLS parameters
smtpd_tls_cert_file = /etc/ssl/certs/ssl -mail.pem
smtpd_tls_key_file = /etc/ssl/private/ssl-mail.key
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
default_transport = error
relay_transport = error
home_mailbox = Maildir/
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/dovecot-auth
smtpd_sasl_authenticated_header = yes
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = reject_unknown_sender_domain
reject_unknown_recipient_domain reject_unauth_pipelining permit_mynetworks
permit_sasl_authenticated reject_unauth_destination
smtpd_sender_restrictions = reject_unknown_sender_domain
mailbox_command = /usr/lib/dovecot/deliver -c /etc/dovecot/dovecot-postfix.conf
-n -m "${EXTENSION}"
smtp_use_tls = yes
smtpd_tls_received_header = yes
smtpd_tls_mandatory_protocols = SSLv3, TLSv1
smtpd_tls_mandatory_ciphers = medium, high
smtpd_tls_auth_only = yes
tls_random_source = dev:/dev/urandom
LockFile /var/lock/apache2/accept.lock
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
<IfModule mpm_worker_module>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
AccessFileName .htaccess
<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>
DefaultType text/plain
HostnameLookups Off
ErrorLog /var/log/apache2/error.log
LogLevel warn
Include /etc/apache2/mods-enabled/*.load
Include /etc/apache2/mods-enabled/*.conf
Include /etc/apache2/httpd.conf
Include /etc/apache2/ports.conf
Include /etc/apache2/conf.d/
Include /etc/apache2/sites-enabled/
engine = On
zend.ze1_compatibility_mode = Off
short_open_tag = On
asp_tags = Off
precision = 12
y2k_compliance = On
output_buffering = Off
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func=
serialize_precision = 100
allow_call_time_pass_reference = On
safe_mode = Off
safe_mode_gid = Off
safe_mode_include_dir =
safe_mode_exec_dir =
safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH
disable_functions =
disable_classes =
expose_php = On
max_execution_time = 30 ; Maximum execution time of each script, in seconds
max_input_time = 60 ; Maximum amount of time each script may spend parsing
request data
memory_limit = 128M
error_reporting = E_ALL & ~E_NOTICE
display_errors = On
display_startup_errors = Off
log_errors = Off
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
variables_order = "EGPCS"
register_globals = Off
register_long_arrays = On
register_argc_argv = On
auto_globals_jit = On
post_max_size = 8M
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
doc_root =
user_dir =
enable_dl = Off
file_uploads = On
upload_max_filesize = 2M
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
define_syslog_variables = Off
SMTP = localhost
smtp_port = 25
sql.safe_mode = Off
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
mysql.allow_persistent = On
mysql.max_persistent = -1
mysql.max_links = -1
mysql.default_port =
mysql.default_socket =
mysql.default_host =
mysql.default_user =
mysql.default_password =
mysql.connect_timeout = 60
mysql.trace_mode = Off
mysqli.max_links = -1
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
msql.allow_persistent = On
msql.max_persistent = -1
msql.max_links = -1
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
sybase.allow_persistent = On
sybase.max_persistent = -1
sybase.max_links = -1
sybase.min_error_severity = 10
sybase.min_message_severity = 10
sybase.compatability_mode = Off
sybct.allow_persistent = On
sybct.max_persistent = -1
sybct.max_links = -1
sybct.min_server_severity = 10
sybct.min_client_severity = 10
bcmath.scale = 0
ifx.default_host =
ifx.default_user =
ifx.default_password =
ifx.allow_persistent = On
ifx.max_persistent = -1
ifx.max_links = -1
ifx.textasvarchar = 0
ifx.byteasvarchar = 0
ifx.charasvarchar = 0
ifx.blobinfile = 0
ifx.nullformat = 0
session.save_handler = files
session.use_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_divisor = 100
session.gc_maxlifetime = 1440
session.bug_compat_42 = 1
session.bug_compat_warn = 1
session.referer_check =
session.entropy_length = 0
session.entropy_file =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 4
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=,fieldset="
mssql.allow_persistent = On
mssql.max_persistent = -1
mssql.max_links = -1
mssql.min_error_severity = 10
mssql.min_message_severity = 10
mssql.compatability_mode = Off
mssql.secure_connection = Off
tidy.clean_output = Off
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
2. CODES SOURCES
--
-- Name: etudiant; Type: TABLE; Schema: public; Owner: bdetuadmin; Tablespace:
--
--
-- Name: adrmac_uniq; Type: CONSTRAINT; Schema: public; Owner: bdetuadmin;
Tablespace:
--
--
-- Name: email_uniq; Type: CONSTRAINT; Schema: public; Owner: bdetuadmin;
Tablespace:
--
--
-- Name: id_primary; Type: CONSTRAINT; Schema: public; Owner: bdetuadmin;
Tablespace:
--
--
-- Name: loginftp_uniq; Type: CONSTRAINT; Schema: public; Owner: bdetuadmin;
Tablespace:
--
--
-- Name: refrecu_uniq; Type: CONSTRAINT; Schema: public; Owner: bdetuadmin;
Tablespace:
--
--
-- Name: tel_uniq; Type: CONSTRAINT; Schema: public; Owner: bdetuadmin;
Tablespace:
--
--
-- PostgreSQL database dump complete
--
--
-- PostgreSQL database dump
--
--
-- Data for Name: etudiant; Type: TABLE DATA; Schema: public; Owner: bdetuadmin
--
1 <?php
2 class APACLManager extends PodBridgeConnector implements
PodBridgeConnectorInterface {
3
4 private $regexValidator = array (
5 'macaddr'=>'/^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}$/');
6
7 /**
8 * Add adress to MAC filter (forwording) // Method not yet implemented
9 *
10 * @service
11 * @cacheable false
12 *
13 * @param string macaddr address
14 *
15 * @type (ssid:string,auth_key:string) doForwardMACaddrOut
16 * @return doForwardMACaddrOut information about the Wireless AP
17 */
18 public function doForwardMACaddr($macaddr) {
19
20 if ( ! preg_match($this->regexValidator['macaddr'],$macaddr))
21 Throw new Exception('Wrong Mac address format !', 805);
22
23
24 // Method not yet implemented
25
26 $doForwardMACaddrOut = array();
27 $doForwardMACaddrOut['ssid']=$this->params['ssid'];
28 $doForwardMACaddrOut['auth_key']=$this->params['auth_key'];
29 return $doForwardMACaddrOut;
30 }
31
32 /**
33 * Remove adress from MAC filter // Method not yet implemented
34 *
35 * @service
36 * @cacheable false
37 *
38 * @param string macaddr address
39 *
40 * @return boolean true if MAC address was removed from ACL
41 */
42 public function doRomoveForwordedMACaddr($macaddr) {
43
44 if ( ! preg_match($this->regexValidator['macaddr'],$macaddr))
45 Throw new Exception('Wrong Mac address format !', 805);
46
47 // Method not yet implemented
48
49 return true;
50 }
51
52 /*
53 * Make connection to the Server and authenticate
54 *
55 * @return bool true on connection success, false if not
56 */
57 public function connect() {
58 return true;
59 }
60
61 /*
62 * Disconnect from the server by executing a logout command
63 *
64 * @return bool true (allways)
65 */
66 public function disconnect() {
67 return true;
68 }
69
70 }
71
1 <?php
2 class BDetu extends PodBridgeConnector implements
PodBridgeConnectorInterface {
3
4 private $conn=null;
5
6 /**
7 * Returns all information about a student by his id
8 *
9 * @service
10 * @cacheable false
11 *
12 * @param string id student identifier
13 *
14 * @type
(id:string,nom:string,prenom:string,dep:string,spec:string,niveau:integer,tel:stri
ng,email:string,loginftp:string,adrmac:string,refrecu:string,process:string)
getStudentByIdOut
15 * @return getStudentByIdOut information a student
16 */
17 public function getStudentById($id) {
18
19 if (! preg_match("/^[0-9]{8}$/", $id) )
20 throw new Exception ("Student id should be 8 digit number", 800
);
21
22 $res = $this->executeSQL("select * from etudiant where id='".$id."'
limit 1",$numrows);
23
24 if (! $numrows)
25 throw new Exception ("This identifier (".$id.") seems
inexistant in database !", 820 );
26
27 $getStudentByIdOut['id']=$res['id'];
28 $getStudentByIdOut['nom']=$res['nom'];
29 $getStudentByIdOut['prenom']=$res['prenom'];
30 $getStudentByIdOut['dep']=$res['dep'];
31 $getStudentByIdOut['spec']=$res['spec'];
32 $getStudentByIdOut['niveau']=$res['niveau'];
33 $getStudentByIdOut['tel']=$res['tel'];
34 $getStudentByIdOut['email']=$res['email'];
35 $getStudentByIdOut['loginftp']=$res['loginftp'];
36 $getStudentByIdOut['adrmac']=$res['adrmac'];
37 $getStudentByIdOut['refrecu']=$res['refrecu'];
38 $getStudentByIdOut['process']=$res['process'];
39
40 return $getStudentByIdOut;
41 }
42
43
44 /**
45 * Update information about a Student in the database
46 *
47 * @service
48 * @cacheable false
49 *
50 * @param string id student identifier
51 * @param string* tel personal phone number
52 * @param string* email email address
53 * @param string* loginftp ftp login (user name)
54 * @param string* adrmac mac address
55 * @param string* refrecu receipt identifier
56 * @param string* process process execution out state
57 *
58 * @return boolean true always
59 */
60 public function
updateStudentById($id,$tel,$email,$loginftp,$adrmac,$refrecu,$process) {
61
62 //Validate phone number
63 if ($tel!=null) {
64 if (! preg_match("/^[0-9]{8}$/", $tel) )
65 throw new Exception ("Wrong phone number - should be 8 char
length", 821 );
66
67 $rows['tel']=$tel;
68 }
69
70 //Validate identifier
71 if (! preg_match("/^[0-9]{8}$/", $id) )
72 throw new Exception ("Student id should be 8 digit number", 822
);
73
74 //Validate Mac address
75 if ($email!=null) {
76 if (! preg_match("/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-
9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/", $email) )
77 throw new Exception ("Wrong email address !", 823 );
78
79 $rows['email']=$email;
80 }
81
82 //Validate ftp login
83 if ($loginftp!=null) {
84 if (! preg_match("/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*$/",
$loginftp) )
85 throw new Exception ("Wrong ftp login !", 824 );
86
87 $rows['loginftp']=$loginftp;
88 }
89
90 //Validate mac address
91 if ($adrmac!=null) {
92 if (! preg_match("/^[0-9a-fA-F]{2}[:-][0-9a-fA-F]{2}[:-][0-9a-
fA-F]{2}[:-][0-9a-fA-F]{2}[:-][0-9a-fA-F]{2}[:-][0-9a-fA-F]{2}$/", $adrmac) )
93 throw new Exception ("Wrong mac address !", 825 );
94
95 $rows['adrmac']=$adrmac;
96 }
97
98 //Validate receipt identifier
99 if ($refrecu!=null) {
100 if (! preg_match("/^[0-9]{16}$/", $refrecu) )
101 throw new Exception ("Receipt identifier should be a 16
digit number", 826 );
102
103 $rows['refrecu']=$refrecu;
104 }
105
106 //Validate process state code
107 if ($process!=null) {
108 if (! preg_match("/^[A-Z]{2,3}$/", $process) )
109 throw new Exception ("Process state value should be
composed from 2 to 3 capital letters" , 827 );
110
111 $rows['process']=$process;
112 }
113
114
115 $cols_to_update=null;
116 foreach ($rows as $rowname=>$value) {
117 if ($cols_to_update!='') $cols_to_update.=',';
118 $cols_to_update.=$rowname."='".$value."'";
119 }
120
121 if (!$cols_to_update)
122 throw new Exception ("Null value not permitted !", 828 );
123
124 //Check if the id exists
125 $this->executeSQL("select id from etudiant where id
='".$id."'",$numrows);
126 if (! $numrows)
127 throw new Exception ("This identifier (".$id.") seems
inexistant in database !", 820 );
128
129 //Execute update statement
130 if ($this->executeSQL("UPDATE etudiant SET ".$cols_to_update."
WHERE id='".$id."'"))
131 return true;
132 }
133
134
135
136
137
138 /**
139 * Returns the next identifier of the given one (if exists)
140 * If $id param is set to null this method will return the first
identifier
141 *
142 * @service
226
227 /*
228 * Disconnect from the server by executing a logout command
229 *
230 * @return boolean true (allways)
231 */
232 public function disconnect() {
233 pg_close($this->conn);
234 $this->conn=null;
235 return true;
236 }
237
238
239 }
240
1 <?php
2
3 class FTPAccount extends PodBridgeConnector implements
PodBridgeConnectorInterface {
4
5
6 private $sshCon = null;
7 private $authenticated = false;
8 private $regexValidator = array (
9 'username'=>'/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*$/');
10
11 /*
12 * Generate random password from a set of chars ($pool)
13 *
14 * @param integer $len Password length
15 * @return string Rand password
16 */
17 private function generateRandomPasswd ( $len = 10 ) {
18 $string = '';
19 $pool =
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' ;
20 for($i = 1; $i <= $len; $i ++) {
21 $string .= substr ( $pool, rand ( 0, 61 ), 1 );
22 }
23
24 return $string;
25 }
26
27 /*
28 * Check if the user exists in host
29 *
30 * @param string user User name
31 * @return boolean True if user exist
32 */
33 private function ifUserExists($user) {
34 $this->ssh2Exec ( 'grep "^'.$user.':"
/etc/passwd',true,true,$response);
35 if ($response==null)
36 return false;
37 return true;
38 }
39
40
41 /*
42 * Convert dd/mm/yyyy format dates to unix date format
43 *
44 * @param string date
45 *
46 * @throws Exception 770 Date error
47 *
48 * @return string Unix date
49 */
50 private function getUnixDate($date) {
51
52 $datearray=explode('/',$date);
53 $dd=$datearray[0];
54 $mm=$datearray[1];
55 $yyyy=$datearray[2];
56
57 if ( ! checkdate($mm, $dd, $yyyy) )
58 Throw new Exception('Date error ('.$date.')', 770);
59
60 //Convert to unix date format mm/dd/yyyy
61 $unixdate=$mm.'/'.$dd.'/'.$yyyy;
62 return $unixdate;
63 }
64
65 /**
104 $this->setFTPUserWelcomeMsg($user,$this->params
['welcome_message']);
105 }
106
107 $doCreateFTPUserAccountOut = array ();
108 $doCreateFTPUserAccountOut ['UserLogin'] = $user;
109 $doCreateFTPUserAccountOut ['Password'] = $password;
110 $doCreateFTPUserAccountOut ['ServerDomain'] = $this->params
['domain'];
111 $doCreateFTPUserAccountOut ['FTPPort'] = $this->params
['ftp_port'];
112 return $doCreateFTPUserAccountOut;
113 }
114
115 /**
116 * Set Ftp account expiry date
117 *
118 * @service
119 * @cacheable false
120 *
121 * @param string user The FTP user login
122 * @param string expiry_date Expiry date
123 *
124 * @throws Exception 850 User seems inexistant
125 *
126 * @return boolean True when the expiry dates is updated
127 */
128 public function setFTPUserAccountExpiryDate( $user,$expiry_date) {
129
130 if ( ! $this->ifUserExists($user) )
131 Throw new Exception('User ('.$user.') seems inexistant', 850);
132 //Convert dd/mm/yyyy expiry date to unix date
133 if ( $expiry_date != 0 )
134 $unix_expdate = $this->getUnixDate($expiry_date);
135
136 $this->ssh2Exec ( 'usermod -e '.$unix_expdate.' '. $user );
137 return true;
138
139 }
140
141
142
143 /**
144 * Set or Update user login welcome message
145 *
146 * @service
147 * @cacheable false
148 *
149 * @param string user user name
150 * @param string message message to display
151 *
152 * @throws Exception 850 User seems inexistant
153 * @throws Exception 849 Cannot set empty message
154 *
155 * @return boolean True when the message is set
156 */
157 public function setFTPUserWelcomeMsg($user,$message) {
158
159 if ( ! $this->ifUserExists($user) )
160 Throw new Exception('User ('.$user.') seems inexistant', 850);
161
162 if ($message==null)
163 Throw new Exception('Cannot set an empty message !' , 849);
164
165 $userhome = $this->params ['ftp_users_path'].'/'.$user;
166 $this->ssh2Exec ( 'echo -e "'.$message.'">' . $userhome .
'/welcome.msg');
167
168
169 return true;
170
171 }
172
173
174 /**
175 * Disable user welcome message while ftp connection
176 *
177 * @service
178 * @cacheable false
179 *
180 * @param string user user name
181 *
182 * @throws Exception 850 User seems inexistant
183 *
184 * @return boolean True when the message is set
185 */
186 public function doDisableFTPUserWelcomeMsg($user) {
187
188 if ( ! $this->ifUserExists($user) )
189 Throw new Exception('User ('.$user.') seems inexistant', 850);
190
191 $userhome = $this->params ['ftp_users_path'].'/'.$user;
192 $this->ssh2Exec ( 'rm -f ' . $userhome . '/welcome.msg');
193
194 return true;
195 }
196
197
198 /**
199 * Change an FTP User account password
200 *
201 * @service
202 * @cacheable false
203 * @param string user User name
204 * @param string oldpassword The old user password
205 * @param string newpassword The new user password
206 *
207 * @throws Exception 840 Password verification failed
208 * @throws Exception 841 Your password must be between
{RANGE} characters in length
209 * @throws Exception 842 Password should be different from
the old one
210 *
211 * @return boolean True when password changed
212 */
213 public function doChangeFTPUserPassword($user,$password,$new_password)
{
214
215 if ( ! $this->doCheckPassword($user,$password) )
216 Throw new Exception("Password verification failed", 840);
217
218 if ( strlen($new_password) < $this->params ['minimum_pswd_length']
|| strlen($new_password) > $this->params ['maximum_pswd_length'])
219 Throw new Exception("Your password must be between ".$this-
>params ['minimum_pswd_length']."-".$this->params ['maximum_pswd_length']."
characters in length", 841);
220
221 if ($password == $new_password)
222 Throw new Exception("New password should be different from the
old one", 842);
223
224 $cryptedNewPassword = crypt ( strip_tags ( $new_password ) );
225 //Change the user password
226 $this->ssh2Exec ( 'usermod -p \''.$cryptedNewPassword.'\' '.$user);
227
228 return true;
229 }
230
231
232 /*
233 * Check if the user password is correct
234 *
235 * @param string user User name
236 * @param string password User password
237 *
238 * @throws Exception 850 Entered user name seems inexistant
239 * @throws Exception 851 Unexpected error while checking
password
240 *
241 * @return boolean True If password check success and False otherwise
242 */
243 private function doCheckPassword($user,$password) {
244
245 //Check if the user exist
246 if ( ! $this->ifUserExists($user) )
247 Throw new Exception('User ('.$user.') seems inexistant', 850);
248
249 //Retrieve crypted user password from /etc/shadow
250 $this->ssh2Exec ( 'grep ^'.$user.': /etc/shadow | cut -d":" -
f2',true,true,$refpswd);
251 if ($refpswd==null)
252 Throw new Exception("Unexpected error while checking password",
851);
253
254 $cryptedReferencePassword = trim($refpswd);
255 //Comparing passwords
256 if ( crypt( strip_tags ( $password ),$cryptedReferencePassword ) !=
$cryptedReferencePassword )
257 return false;
258
259 return true;
260 }
261
262
263 /**
264 * Delete FTP user account
265 *
266 * @service
267 * @cacheable false
268 * @param string user FTP user name
269 * @throws Exception 850 Entered user name seems inexistant
312 } else {
313 $recursive='-R';
314 }
315 }
316
317 $this->ssh2Exec ( 'cp '.$recursive.' '.$srcfile.' '.$dest);
318 $this->ssh2Exec ( 'chown '.$recursive.' '.$user.':'.$this->params
['ftp_group_name'].' '.$dest);
319
320 return true;
321 }
322
323
324 /*
325 * Executes a $cmd on the SSH connection and return $readable response
on-demand
326 *
327 * @param string $cmd Command to execute
328 * @param bool $exception Whether to throw exception on error
or return false
329 * @param bool $readResponse Whether to return a readable
response or not
330 * @param pointer $response The readable response if requested
will be here
331 * @throws Exception 200 If ($exception) AND we got an error
while executing the command
332 * @return ressource The ssh2_exec return
333 */
334 private function ssh2Exec($cmd, $exception = true, $readResponse =
false, &$response = null) {
335 $this->setSessionLog ( 'sent', $cmd );
336 $stream = ssh2_exec ( $this->sshCon, $cmd );
337
338 //get the content of ssh2 stderr
339 $stderr = ssh2_fetch_stream ( $stream, SSH2_STREAM_STDERR );
340 stream_set_blocking ( $stderr, true );
341 $response_stderr = stream_get_contents ( $stderr );
342 fclose ( $stderr );
343
344 if ($response_stderr) {
345 if ($exception) {
346 $this->setSessionLog ( 'received', $response_stderr );
347 throw new Exception ( "Error executing cmd: [$cmd]", 200 );
348 } else {
349 $this->setSessionLog ( 'received', $response_stderr );
350 return false;
351 }
352 }
353
354 if ($readResponse) {
355 stream_set_blocking ( $stream, true );
356 $response = stream_get_contents ( $stream );
357 fclose ( $stream );
358 $this->setSessionLog ( 'received', $response );
359 } else {
360 $this->setSessionLog ( 'received', '[PB:noerror]' );
361 }
362
363 return $stream;
364 }
365
366
367 /*
368 * Make connection to the Server and authenticate
369 *
370 * @return bool true on connection success, false if not
371 */
372 public function connect() {
373 try {
374 $this->sshCon = ssh2_connect ( $this->params ['host'] );
375 if (! $this->sshCon)
376 throw new Exception ( "SSH Connection failure To the Host",
200 );
377
378 if (! ssh2_auth_password ( $this->sshCon, $this->params
['login'], $this->params ['password'] ))
379 throw new Exception ( "Authentication failure To the host
using username: " . $this->params ['login'], 201 );
380
381 $this->authenticated = true;
382 return true;
383 } catch ( Exception $e ) {
384 $this->setLastError ( $e->getCode (), $e->getMessage () );
385 return false;
386 }
387 }
388
389 /*
390 * Disconnect from the server by executing a logout command
391 *
392 * @return bool true (allways)
393 */
394 public function disconnect() {
395 if ($this->sshCon) {
396 if ($this->authenticated) {
397 ssh2_exec ( $this->sshCon, "logout" );
398 } else
399 $this->sshCon = null;
400 }
401
402 return true;
403 }
404
405
406
407
408 }
409
1 <?php
2 class IPPService extends PodBridgeConnector implements
PodBridgeConnectorInterface {
3
4 private $ipp = null;
5
6 /**
7 * Print Web pages
8 *
9 * @service
10 * @cacheable false
11 *
12 * @param string url web page location exemple: http://mydomain/mypage
13 * @param string* jobname new job name
14 *
15 * @return boolean always true
16 */
17 public function doPrintWebPage($url,$jobname=null) {
18 if ( ! file_get_contents($url,null,null,null,1))
19 Throw new Exception('Cannot get page contents from ('.$url.')',
700);
20 $tmpPSdoc = '/tmp/'.md5(uniqid());
109 require_once("PrintIPPclasses/CupsPrintIPP.php");
110 $this->ipp = new CupsPrintIPP;
111
112 $this->ipp->setUserName($this->params['user']);
113 $this->ipp->setAuthentication($this->params['user'],$this-
>params['password']); // username & password
114
115 $this->ipp->setHost($this->params['ipp_host']);
116 $this->ipp->setPort($this->params['ipp_port']);
117
118 $this->ipp->setPrinterURI($this->params['printer_uri']);
119
120 return true;
121 }
122
123 /*
124 * Disconnect from the server by executing a logout command
125 *
126 * @return bool true (allways)
127 */
128 public function disconnect() {
129 unset ($this->ipp);
130 return true;
131 }
132
133 }
134
1 <?php
2
3 class MailAccount extends PodBridgeConnector implements
PodBridgeConnectorInterface {
4
5 private $sshCon = null;
6 private $authenticated = false;
7 private $regexValidator = array (
8 'fstname_lstname'=>'/^[A-z]{2,24}$/',
9 'username'=>'/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*$/',
10 'emailaddress'=>'/^[^0-9][A-z0-9_]+([.][A-z0-9_]+)*[@][A-z0-
9_]+([.][A-z0-9_]+)*[.][A-z]{2,4}$/');
11 /*
12 * Generate random password from a set of chars ($pool)
13 *
14 * @param integer $len Password length
15 * @return string Rand password
16 */
17 private function generateRandomPasswd($len = 10) {
18 $string = '';
19 $pool =
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' ;
20 for($i = 1; $i <= $len; $i ++) {
21 $string .= substr ( $pool, rand ( 0, 61 ), 1 );
22 }
23
24 return $string;
25 }
26
27 /*
28 * Check if the user exists in host
29 *
30 * @param string user User name
31 * @return boolean True if user exist
32 */
33 private function ifUserExists($user) {
34 $this->ssh2Exec ( 'grep "^'.$user.':"
/etc/passwd',true,true,$response);
35 if ($response==null)
36 return false;
37 return true;
38 }
39
40
41 /*
42 * Generate an unique user name by fstna me and lstname
43 *
44 * @param string fstname The user first name
45 * @param string lstname The user last name
46 *
47 * @throws Exception 895 Invalid first name
48 * @throws Exception 896 Invalid last name
49 *
50 * @return string user name
51 */
134
135
136 /**
137 * Create new mail user Version 1
138 *
139 * @service
140 * @cacheable false
141 * @param string user The mail user logins
142 * @param boolean genpswd For auto generated password
143 * @param string password User defined password
144 *
145 * @throws Exception 803 Password verification failed
146 * @throws Exception 804 User already exists
147 * @throws Exception 841 Your password must be between
{RANGE} characters in length
148 *
149 * @type
(EmailAdress:string,Password:string,POP3Port:integer,SMTPPort:integer,WebMailUrl:s
tring) retMailAccount
150 * @return retMailAccount information about the created mail account
151 */
152 public function doCreateMailUserAccount($user,$genpswd,$password) {
153
154 if ( ! preg_match($this->regexValidator['username'],$user))
155 Throw new Exception('Pattern matching error in user name' ,
803);
156
157 if ( $this->ifUserExists($user) )
158 Throw new Exception('User ('.$user.') already exists', 804);
159
160 $UserHomeDir = $this->params ['mail_users_path'].'/'.$user;
161
162 // Generate a random password
163 if ($genpswd) {
164 $password = $this->generateRandomPasswd ( $this->params
['autogen_pswd_length'] );
165 } else {
166 if ( strlen($password) < $this->params ['minimum_pswd_length']
|| strlen($password) > $this->params ['maximum_pswd_length'])
167 Throw new Exception("Your password must be between ".$this-
>params ['minimum_pswd_length']."-".$this->params ['maximum_pswd_length']."
characters in length", 841);
168
169 }
170
171 $cryptedPassword = crypt ( strip_tags ( $password ) );
172
173 // Create the user
174 $this->ssh2Exec ( 'useradd -d '.$UserHomeDir.' -m -g '.$this-
>params ['mail_group_name'].' -s /bin/false -p \''.$cryptedPassword.'\' '.$user);
175
176 $retMailAccount = array();
177 $retMailAccount ['EmailAdress'] = $user.'@'.$this->params['domain']
;
178 $retMailAccount ['Password'] = $password;
179 $retMailAccount ['POP3Port'] = $this->params ['pop3_port'];
180 $retMailAccount ['SMTPPort'] = $this->params ['smtp_port'];
181 $retMailAccount ['WebMailUrl'] = $this->params ['web_mail_url'];
182
183 return $retMailAccount;
184
185 }
186
187
188 /**
189 * Cahnge a user password
190 *
191 * @service
192 * @cacheable false
193 * @param string emailaddr user email address
194 * @param string oldpassword The old user password
195 * @param string newpassword The new user password
196 *
197 * @throws Exception 840 Password verification failed
198 * @throws Exception 841 Your password must be between
{RANGE} characters in length
199 * @throws Exception 842 Password should be different from
the old one
200 *
201 * @return boolean True when password changed
202 */
203 public function
doChangeMailUserPassword($emailaddr,$password,$new_password) {
204
205 //Convert user email address to user name
206 $user = $this->doStripAtDomain($emailaddr);
207
208 if ( ! $this->doCheckPassword($user,$password) )
209 Throw new Exception("Password verification failed", 840);
210
211 if ( strlen($new_password) < $this->params ['minimum_pswd_length']
|| strlen($new_password) > $this->params ['maximum_pswd_length'])
251
252 return true;
253 }
254
255 /**
256 * Delete a mail user account
257 *
258 * @service
259 * @cacheable false
260 * @param string emailaddr mail user name or full email adress
261 * @throws Exception 850 Entered user name seems inexistant
262 * @throws Exception 860 Cannot do such operation on a non
mail user
263 * @return boolean True When user is deleted
264 */
265 public function doDeleteMailUserAccount($emailaddr) {
266
267 //Convert user email address to user name
268 $user = $this->doStripAtDomain($emailaddr);
269
270 //Check if the user exist
271 if ( ! $this->ifUserExists($user) )
272 Throw new Exception('User ('.$user.') seems inexistant', 850);
273
274 //Verify if mail user
275 $this->ssh2Exec ( 'groups '.$user,true,true,$groupname);
276 if (trim($groupname)!=$this->params ['mail_group_name'])
277 Throw new Exception("Cannot do such operation on a non mail
user", 860);
278
279 // Delete the user
280 $this->ssh2Exec ( 'userdel -r '.$user);
281 return true;
282 }
283
284
285 /**
286 * Unlock a mail user account
287 *
288 * @service
289 * @cacheable false
290 * @param string emailad dr mail user name or full email adress
291 * @throws Exception 850 Entered user name seems inexistant
292 * @throws Exception 860 Cannot do such operation on a non
mail user
458 } else
459 $this->sshCon = null;
460 }
461
462 return true;
463 }
464
465
466
467
468 }
469
470
1 <?php
2
3 class SMSService extends PodBridgeConnector implements
PodBridgeConnectorInterface {
4
5 //cannot be delivered
6
7 private $regexValidator = array (
8 'sn_regex'=>'/^(00|\+|[0-9])[0-9]{7}$/');
9
10 /**
11 * doSendSMS
12 *
13 * @service
14 * @cacheable false
15 *
16 * @param string destinataire Destination Phone number
17 * @param string message Message Text
18 *
19 * @return boolean true if message successfully sent
20 */
21 public function doSendSMS($destinataire,$message) {
22
23 //cannot be delivered
24
25 return true;
26 }
27
28
29 private function stripSpaces($phonenumber) {
30 $fixed=str_replace(' ', '',$phonenumber);
31 if ( ! preg_match($this->regexValidator['sn_regex'],$fixed))
32 Throw new Exception('Phone number format error', 808);
33
34 return $fixed;
35 }
36
37 /*
38 * Make connection to the Server and authenticate
39 *
40 * @return bool true on connection success, false if not
41 */
42 public function connect() {
43 //cannot be delivered
44 return true;
45
46 }
47
48 /*
49 * Disconnect from the server by executing a logout command
50 *
51 * @return bool true (allways)
52 */
53 public function disconnect() {
54 //cannot be delivered
55 return true;
56 }
57
58
59
60
61 }
62
63
1 <?php
2
3 class wwwsubscr extends PodBridgeConnector implements
PodBridgeConnectorInterface {
4
5 private $curl_handle = null;
6
7 /**
8 * Returns the receipt identifier and URL for the web site
9 *
10 * @service
11 * @cacheable false
12 *
13 * @param string studentident Identifiant de l'étudiant
14 * @param string au AU format exp: 2009/2010
15 *
16 * @type (refaccuse:string,urlaccuse:string) getAccuseOut
17 * @return getAccuseOut Return refaccuse & urlaccuse
18 */
19 public function getAccuse($studentident,$au) {
20
21 $ref=$this->getAccuseRef($studentident,$au);
22 $url='http://inscription.edu.demo/recu.php?ref='.$ref;
23
24 $getAccuseOut = array ();
25 $getAccuseOut['refaccuse']=$ref;
26 $getAccuseOut['urlaccuse']=$url;
27
28 return $getAccuseOut;
29
30 }
31
32
33 /*
34 * @param string studentident Student identifier
35 * @param string au AU format exp: 2009/2010
36 *
37 * @return string Référence du reçu
38 */
39 private function getAccuseRef($studentident,$au) {
40
41 if ( ! preg_match('/^[0-9]{8}$/',$studentident) )
42 Throw new Exception('L\'identifiant de l\'étudiant doit être
compsé de 8 chiffres', 805);
43
44 if ( ! preg_match('/^20[0-9][0-9]\/20[0-9][0-9]$/',$au) )
45 Throw new Exception('L\'année universitaire doit être en ce
format AAAA/AAAA', 806);
46
47 curl_setopt($this->curl_handle,CURLOPT_POST,1);
48 curl_setopt($this-
>curl_handle,CURLOPT_POSTFIELDS,'ident='.$studentident);
49 $buffer = curl_exec($this->curl_handle);
50
51 preg_match('/Nom:/', (string)$buffer,$matches0);
52 preg_match('/20[0-9][0-9]\/20[0-9][0-9]/',
(string)$buffer,$matches1 );
53 preg_match('/[0-9]{16}/', (string)$buffer,$matches2);
54
55 if ( ! $matches0[0])
56 Throw new Exception('Identifiant de l\'étudiant est non
reconnu' , 807);
57
58 if ( $matches1[0]!=$au)
59 Throw new Exception('Payement non effectué !' , 809);
60
61 $ref=$matches2[0];
62
63 return $ref;
64 }
65
66
67 /*
68 * Make connection to the Server and authenticate
69 *
70 * @return bool true on connection success, false if not
71 */
72 public function connect() {
73
74 try {
75
76 $this->curl_handle = curl_init();
77 curl_setopt( $this-
>curl_handle,CURLOPT_URL,"inscription.edu.demo");
78 curl_setopt( $this->curl_handle,CURLOPT_CONNECTTIMEOUT,2);
79 curl_setopt( $this->curl_handle,CURLOPT_RETURNTRANSFER,1);
80
81 return true;
82
83 } catch ( Exception $e ) {
<xsd:complexType name="Tstatus">
<xsd:sequence>
<xsd:element name="msg" type="xsd:string"/>
<xsd:element name="code" type="xsd:integer"/>
</xsd:sequence>
</xsd:complexType>
<element name="ping">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="key" type="xsd:string"/>
<xsd:element name="sync" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="notify" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="transId" type="xsd:string" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="abort" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</element>
<element name="pingResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="transId" type="xsd:string"/>
<xsd:element name="transDate" type="xsd:string"/>
<xsd:element name="status" type="pbns:Tstatus" minOccurs="0"
maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</element>
</schema>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:ippservicens" elementFormDefault="qualified"
attributeFormDefault="qualified">
<xsd:import namespace="urn:pbns"/>
<element name="doPrintWebPage">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="key" type="xsd:string"/>
<xsd:element name="sync" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="notify" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="transId" type="xsd:string" minOccurs="0"
maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</element>
<element name="getPrinters">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="key" type="xsd:string"/>
<xsd:element name="sync" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="notify" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="transId" type="xsd:string" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="abort" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</element>
<element name="getPrintersResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="transId" type="xsd:string"/>
<xsd:element name="transDate" type="xsd:string"/>
<xsd:element name="status" type="pbns:Tstatus" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="response" type="xsd:string" minOccurs="0"
maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</element>
</schema>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:ftpacntns" elementFormDefault="qualified"
attributeFormDefault="qualified">
<xsd:import namespace="urn:pbns"/>
<xsd:complexType name="doCreateFTPUserAccountOut" >
<xsd:sequence>
<xsd:element name="UserLogin" type="xsd:string"/>
<xsd:element name="Password" type="xsd:string"/>
<xsd:element name="ServerDomain" type="xsd:string"/>
<xsd:element name="FTPPort" type="xsd:integer"/>
</xsd:sequence>
</xsd:complexType>
<element name="doCreateFTPUserAccount">
<xsd:complexType>
<xsd:sequence>
<xsd:sequence>
<xsd:element name="transId" type="xsd:string"/>
<xsd:element name="transDate" type="xsd:string"/>
<xsd:element name="status" type="pbns:Tstatus" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="response" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</element>
<element name="setFTPUserWelcomeMsg">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="key" type="xsd:string"/>
<xsd:element name="sync" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="notify" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="transId" type="xsd:string" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="abort" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="user" type="xsd:string"/>
<xsd:element name="message" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</element>
<element name="setFTPUserWelcomeMsgResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="transId" type="xsd:string"/>
<xsd:element name="transDate" type="xsd:string"/>
<xsd:element name="status" type="pbns:Tstatus" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="response" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</element>
<element name="doDisableFTPUserWelcomeMsg">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="key" type="xsd:string"/>
<xsd:element name="sync" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
</element>
<element name="updateStudentByIdResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="transId" type="xsd:string"/>
<xsd:element name="transDate" type="xsd:string"/>
<xsd:element name="status" type="pbns:Tstatus" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="response" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</element>
<xsd:complexType name="retArray">
<xsd:sequence>
<xsd:element name="nextid" type="xsd:string"/>
<xsd:element name="last" type="xsd:boolean"/>
</xsd:sequence>
</xsd:complexType>
<element name="getNextId">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="key" type="xsd:string"/>
<xsd:element name="sync" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="notify" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="transId" type="xsd:string" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="abort" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="id" type="xsd:string" minOccurs="0"
maxOccurs="unbounded"/>
<xsd:element name="filter" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</element>
<element name="getNextIdResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="transId" type="xsd:string"/>
<xsd:element name="transDate" type="xsd:string"/>
<xsd:element name="status" type="pbns:Tstatus" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="response" type="bdetuns:retArray" minOccurs="0"
maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</element>
</schema>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:SMSServicens" elementFormDefault="qualified"
attributeFormDefault="qualified">
<xsd:import namespace="urn:pbns"/>
<element name="doSendSMS">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="key" type="xsd:string"/>
<xsd:element name="sync" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="notify" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="transId" type="xsd:string" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="abort" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="destinataire" type="xsd:string"/>
<xsd:element name="message" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</element>
<element name="doSendSMSResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="transId" type="xsd:string"/>
<xsd:element name="transDate" type="xsd:string"/>
<xsd:element name="status" type="pbns:Tstatus" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="response" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</element>
</schema>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:apaclmanns" elementFormDefault="qualified"
attributeFormDefault="qualified">
<xsd:import namespace="urn:pbns"/>
<xsd:complexType name="doForwardMACaddrOut">
<xsd:sequence>
<xsd:element name="ssid" type="xsd:string"/>
<xsd:element name="auth_key" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<element name="doForwardMACaddr">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="key" type="xsd:string"/>
<xsd:element name="sync" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="notify" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="transId" type="xsd:string" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="abort" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="macaddr" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</element>
<element name="doForwardMACaddrResponse" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="transId" type="xsd:string"/>
<xsd:element name="transDate" type="xsd:string"/>
<xsd:element name="status" type="pbns:Tstatus" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="response" type="apaclmanns:doForwardMACaddrOut"
minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</element>
<element name="doRomoveForwordedMACaddr" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="key" type="xsd:string"/>
<xsd:element name="sync" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="notify" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="transId" type="xsd:string" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="abort" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="macaddr" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</element>
<element name="doRomoveForwordedMACaddrResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="transId" type="xsd:string"/>
<xsd:element name="transDate" type="xsd:string"/>
<xsd:element name="status" type="pbns:Tstatus" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="response" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</element>
</schema>
<schema xmlns="http://www.w3.org/2001/X MLSchema"
targetNamespace="urn:wwwsubscrns" elementFormDefault="qualified"
attributeFormDefault="qualified">
<xsd:import namespace="urn:pbns"/>
<xsd:complexType name="getAccuseOut">
<xsd:sequence>
<xsd:element name="refaccuse" type="xsd:string"/>
<xsd:element name="urlaccuse" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<element name="getAccuse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="key" type="xsd:string"/>
<xsd:element name="sync" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="notify" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="transId" type="xsd:string" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="abort" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="studentident" type="xsd:string"/>
<xsd:element name="au" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</element>
<element name="getAccuseResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="transId" type="xsd:string"/>
<xsd:element name="transDate" type="xsd:string"/>
</operation>
<operation name="doDeleteFTPUserAccount">
<input message="pbns:DoDeleteFTPUserAccountRequest"/>
<output message="pbns:DoDeleteFTPUserAccountResponse"/>
</operation>
<operation name="doFTPsendFile">
<input message="pbns:DoFTPsendFileRequest"/>
<output message="pbns:DoFTPsendFileResponse"/>
</operation>
<operation name="getStudentById">
<input message="pbns:GetStudentByIdRequest" />
<output message="pbns:GetStudentByIdResponse"/>
</operation>
<operation name="updateStudentById">
<input message="pbns:UpdateStudentByIdRequest" />
<output message="pbns:UpdateStudentByIdResponse"/>
</operation>
<operation name="getNextId">
<input message="pbns:GetNextIdRequest"/>
<output message="pbns:GetNextIdResponse"/>
</operation>
<operation name="doSendSMS">
<input message="pbns:DoSendSMSRequest"/>
<output message="pbns:DoSendSMSResponse"/>
</operation>
<operation name="doForwardMACaddr">
<input message="pbns:DoForwardMACaddrRequest"/>
<output message="pbns:DoForwardMACaddrResponse"/>
</operation>
<operation name="doRomoveForwordedMACaddr" >
<input message="pbns:DoRomoveForwordedMACaddrRequest"/>
<output message="pbns:DoRomoveForwordedMACaddrResponse" />
</operation>
<operation name="getAccuse">
<input message="pbns:GetAccuseRequest"/>
<output message="pbns:GetAccuseResponse"/>
</operation>
</portType>
<binding name="PodBridgeBinding" type="pbns:PodBridgePortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="ping">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="doPrintWebPage">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="doPrintInternalDocument">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="getPrinters">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="doCreateFTPUserAccount">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="setFTPUserAccountExpiryDate" >
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="setFTPUserWelcomeMsg">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="doDisableFTPUserWelcomeMsg">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="doChangeFTPUserPassword">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="doDeleteFTPUserAccount">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="doFTPsendFile">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="getStudentById">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="updateStudentById">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="getNextId">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="doSendSMS">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="doForwardMACaddr">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="doRomoveForwordedMACaddr" >
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="getAccuse">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<message name="PingRequest">
<part name="body" element="pbns:ping"/>
</message>
<message name="PingResponse">
<part name="body" element="pbns:pingResponse"/>
</message>
<message name="DoPrintWebPageRequest">
<part name="body" element="ippservicens:doPrintWebPage"/>
</message>
<message name="DoPrintWebPageResponse">
<part name="body" element="ippservicens:doPrintWebPageResponse" />
</message>
<message name="DoPrintInternalDocumentRequest">
<part name="body" element="ippservicens:doPrintInternalDocument"/>
</message>
<message name="DoPrintInternalDocumentResponse" >
<part name="body" element="ippservicens:doPrintInternalDocumentResponse" />
</message>
<message name="GetPrintersRequest">
<part name="body" element="ippservicens:getPrinters"/>
</message>
<message name="GetPrintersResponse">
<part name="body" element="ippservicens:getPrintersResponse" />
</message>
<message name="DoCreateFTPUserAccountRequest">
<part name="body" element="ftpacntns:doCreateFTPUserAccount" />
</message>
<message name="DoCreateFTPUserAccountResponse">
<part name="body" element="ftpacntns:doCreateFTPUserAccountResponse"/>
</message>
<message name="SetFTPUserAccountExpiryDateRequest">
<part name="body" element="ftpacntns:setFTPUserAccountExpiryDate"/>
</message>
<message name="SetFTPUserAccountExpiryDateResponse">
<part name="body" element="ftpacntns:setFTPUserAccountExpiryDateResponse"/>
</message>
<message name="SetFTPUserWelcomeMsgRequest">
<part name="body" element="ftpacntns:setFTPUserWelcomeMsg"/>
</message>
<message name="SetFTPUserWelcomeMsgResponse" >
<part name="body" element="ftpacntns:setFTPUserWelcomeMsgResponse" />
</message>
<message name="DoDisableFTPUserWelcomeMsgRequest">
<part name="body" element="ftpacntns:doDisableFTPUserWelcomeMsg"/>
</message>
<message name="DoDisableFTPUserWelcomeMsgResponse" >
<part name="body" element="ftpacntns:doDisableFTPUserWelcomeMsgResponse" />
</message>
<message name="DoChangeFTPUserPasswordRequest">
<part name="body" element="ftpacntns:doChangeFTPUserPassword"/>
</message>
<message name="DoChangeFTPUserPasswordResponse" >
<part name="body" element="ftpacntns:doChangeFTPUserPasswordResponse" />
</message>
<message name="DoDeleteFTPUserAccountRequest">
<part name="body" element="ftpacntns:doDeleteFTPUserAccount" />
</message>
<message name="DoDeleteFTPUserAccountResponse">
<part name="body" element="ftpacntns:doDeleteFTPUserAccountResponse"/>
</message>
<message name="DoFTPsendFileRequest">
<part name="body" element="ftpacntns:doFTPsendFile" />
</message>
<message name="DoFTPsendFileResponse">
<part name="body" element="ftpacntns:doFTPsendFileResponse"/>
</message>
<message name="GetStudentByIdRequest">
<part name="body" element="bdetuns:getStudentById"/>
</message>
<message name="GetStudentByIdResponse">
<part name="body" element="bdetuns:getStudentByIdResponse"/>
</message>
<message name="UpdateStudentByIdRequest">
<part name="body" element="bdetuns:updateStudentById"/>
</message>
<message name="UpdateStudentByIdResponse" >
<part name="body" element="bdetuns:updateStudentByIdResponse"/>
</message>
<message name="GetNextIdRequest">
</schema>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:pbns"
elementFormDefault="qualified" attributeFormDefault="qualified">
<xsd:import namespace="urn:tns"/>
<element name="ping">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="key" type="xsd:string"/>
<xsd:element name="sync" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="notify" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
</xsd:complexType>
</element>
</schema>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:mailacntns" elementFormDefault="qualified"
attributeFormDefault="qualified">
<xsd:import namespace="urn:tns"/>
<xsd:complexType name="retMailAccount2">
<xsd:sequence>
<xsd:element name="EmailAdress" type="xsd:string"/>
<xsd:element name="Password" type="xsd:string"/>
<xsd:element name="WebMailUrl" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<element name="doCreateMailUserAccount2" >
<xsd:complexType>
<xsd:sequence>
</xsd:sequence>
</xsd:complexType>
</element>
<element name="doCreateMailUserAccount2Response">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="transId" type="xsd:string"/>
<xsd:element name="transDate" type="xsd:string"/>
<xsd:element name="status" type="tns:Tstatus" minOccurs="0"
maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</element>
<xsd:complexType name="retMailAccount">
<xsd:sequence>
<xsd:element name="EmailAdress" type="xsd:string"/>
<xsd:element name="Password" type="xsd:string"/>
<xsd:element name="POP3Port" type="xsd:integer"/>
<element name="doCreateMailUserAccountResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="transId" type="xsd:string"/>
<xsd:element name="transDate" type="xsd:string"/>
<xsd:element name="status" type="tns:Tstatus" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="response" type="mailacntns:retMailAccount"
minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</element>
<xsd:sequence>
<xsd:element name="key" type="xsd:string"/>
<xsd:element name="sync" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="notify" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="transId" type="xsd:string" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="abort" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="emailaddr" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</element>
<element name="doDeleteMailUserAccountResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="transId" type="xsd:string"/>
<xsd:element name="transDate" type="xsd:string"/>
<xsd:element name="status" type="tns:Tstatus" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="response" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</element>
<element name="doUnlockMailUserAccount">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="key" type="xsd:string"/>
<xsd:element name="sync" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="notify" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="transId" type="xsd:string" minOccurs="0"
maxOccurs="1"/>
</element>
<element name="doLockMailUserAccount">
<xsd:complexType>
<xsd:sequence>
<element name="doLockMailUserAccountResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="transId" type="xsd:string"/>
<xsd:element name="transDate" type="xsd:string"/>
<xsd:element name="status" type="tns:Tstatus" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="response" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</element>
<element name="doSendMail">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="key" type="xsd:string"/>
<xsd:element name="sync" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="notify" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="transId" type="xsd:string" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="abort" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
<xsd:sequence>
<xsd:element name="transId" type="xsd:string"/>
<xsd:element name="transDate" type="xsd:string"/>
<xsd:element name="status" type="tns:Tstatus" minOccurs="0"
maxOccurs="1"/>
<xsd:element name="response" type="xsd:boolean" minOccurs="0"
maxOccurs="1"/>
</xsd:sequence>
</xsd:complexType>
</element>
</schema>
</types>
<portType name="PodBridgePortType">
<operation name="ping">
<input message="tns:PingRequest"/>
<output message="tns:PingResponse"/>
</operation>
<operation name="doCreateMailUserAccount2" >
<input message="tns:DoCreateMailUserAccount2Request" />
<output message="tns:DoCreateMailUserAccount2Response"/>
</operation>
<operation name="doCreateMailUserAccount">
<input message="tns:DoCreateMailUserAccountRequest"/>
<output message="tns:DoCreateMailUserAccountResponse"/>
</operation>
<operation name="doChangeMailUserPassword" >
<input message="tns:DoChangeMailUserPasswordRequest" />
<output message="tns:DoChangeMailUserPasswordResponse"/>
</operation>
<operation name="doDeleteMailUserAccount">
<input message="tns:DoDeleteMailUserAccountRequest"/>
<output message="tns:DoDeleteMailUserAccountResponse"/>
</operation>
<operation name="doUnlockMailUserAccount">
<input message="tns:DoUnlockMailUserAccountRequest"/>
<output message="tns:DoUnlockMailUserAccountResponse"/>
</operation>
<operation name="doLockMailUserAccount">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="ping">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="doChangeMailUserPassword" >
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="doDeleteMailUserAccount">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="doUnlockMailUserAccount">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="doLockMailUserAccount">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="doSendMail">
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<message name="PingRequest">
<part name="body" element="pbns:ping"/>
</message>
<message name="PingResponse">
<part name="body" element="pbns:pingResponse"/>
</message>
<message name="DoDeleteMailUserAccountRequest">
<part name="body" element="mailacntns:doDeleteMailUserAccount"/>
</message>
<message name="DoDeleteMailUserAccountResponse" >
<part name="body" element="mailacntns:doDeleteMailUserAccountResponse"/>
</message>
<message name="DoUnlockMailUserAccountRequest">
<part name="body" element="mailacntns:doUnlockMailUserAccount"/>
</message>
<message name="DoLockMailUserAccountResponse">
<part name="body" element="mailacntns:doLockMailUserAccountResponse"/>
</message>
<message name="DoSendMailRequest">
<part name="body" element="mailacntns:doSendMail"/>
</message>
<message name="DoSendMailResponse">
<part name="body" element="mailacntns:doSendMailResponse" />
</message>
<service name="PodBridgeService">
<port name="PodBridgePort" binding="tns:PodBridgeBinding">
<soap:address
location="http://ws.rnu.edu.demo/projects/unstable/podbridge1.2/web/api/index.php"
/>
</port>
</service>
</definitions>
<output name="processRUByIdResponse"
message="tns:processRUByIdOperationResponse"/>
</operation>
</portType>
<plnk:partnerLinkType name="processRUById">
<!-- A partner link type is automatically generated when a new port
type is added. Partner link types are used by BPEL processes.
In a BPEL process, a partner link represents the interaction between the BPEL
process and a partner service. Each partner link is associated with a partner link
type.
A partner link type characterizes the conversational relationship between two
services. The partner link type can have one or two roles. -->
<plnk:role name="processRUByIdPortTypeRole"
portType="tns:processRUByIdPortType"/>
</plnk:partnerLinkType>
</definitions>
20 <output name="output1"
message="tns:BatchProcessRUOperationResponse"/>
21 </operation>
22 </portType>
23 <plnk:partnerLinkType name="BatchProcessRU">
24 <!-- A partner link type is automatically generated when a new port
type is added. Partner link types are used by BPEL processes.
25 In a BPEL process, a partner link represents the interaction between the
BPEL process and a partner service. Each partner link is associated with a partner
link type.
26 A partner link type characterizes the conversational relationship between
two services. The partner link type can have one or two roles.-->
27 <plnk:role name="BatchProcessRUPortTypeRole"
portType="tns:BatchProcessRUPortType" />
28 </plnk:partnerLinkType>
29 </definitions>
30
31
Source : BatchProcessRUTypes.xsd
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://xml.netbeans.org/schema/BatchProcessRUTypes.xsd"
xmlns:tns="http://xml.netbeans.org/schema/BatchProcessRUTypes.xsd"
elementFormDefault="qualified">
<xsd:complexType name="input">
<xsd:sequence>
<xsd:element name="filter" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="output">
<xsd:sequence>
<xsd:element name="message" type="xsd:string"/>
<xsd:element name="statecode" type="xsd:integer"/>
<xsd:element name="date">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="start" type="xsd:string"/>
<xsd:element name="end" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
targetNamespace="http://enterprise.netbeans.org/bpel/processRUById/processRUById"
xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sxt="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/Trace"
xmlns:sxed="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/Editor"
xmlns:sxat="http://www.sun.com/wsbpel/2.0/proc ess/executable/SUNExtension/Attachme
nt"
xmlns:sxeh="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/ErrorHan
dling"
xmlns:tns="http://enterprise.netbeans.org/bpel/processRUById/processRUById"
xmlns:sxed2="http://www.sun.com/wsbpel/2.0/ process/executable/SUNExtension/Editor2
" xmlns:ns0="urn:wwwsubscrns" xmlns:ns1="urn:bdetuns" xmlns:ns2="urn:lprintns"
xmlns:pbns="urn:pbns" xmlns:ns3="urn:ftpacntns" xmlns:ns4="urn:mailacntns"
xmlns:sxxf="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/XPathFun
ctions" xmlns:ns5="urn:apaclmanns"
xmlns:sxtx="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/Transact
ion" sxtx:atomic="no" xmlns:ns6="urn:ippservicens" xmlns:ns7="urn:SMSServicens"
xmlns:ns8="urn:tns">
<import
namespace="http://j2ee.netbeans.org/wsdl/processRUById/processRUById"
location="processRUById.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/>
<import namespace="http://enterprise.netbeans.org/bpel/servicesWrapper"
location="servicesWrapper.wsdl" importType="http://schemas.xmlsoap.org/wsdl/"/>
<import namespace="urn:pbns" location="services.wsdl"
importType="http://schemas.xmlsoap.org/wsdl/"/>
<import namespace="http://enterprise.netbeans.org/bpel/services_rnuWrapper"
location="services_rnuWrapper.wsdl"
importType="http://schemas.xmlsoap.org/wsdl/"/>
<import namespace="urn:tns" location="services_rnu.wsdl"
importType="http://schemas.xmlsoap.org/wsdl/"/>
<partnerLinks>
<partnerLink name="pbServicesLocalPL"
xmlns:tns="http://enterprise.netbeans.org/bpel/servicesWrapper"
partnerLinkType="tns:PodBridgeLinkType" partnerRole="PodBridgeRole"/>
<partnerLink name="pbServicesRNUPL"
xmlns:tns="http://enterprise.netbeans.org/bpel/services_rnuWrapper"
partnerLinkType="tns:PodBridgeLinkType" partnerRole="PodBridgeRole"/>
<partnerLink name="processRUByIdPL"
xmlns:tns="http://j2ee.netbeans.org/wsdl/processRUById/processRUById"
partnerLinkType="tns:processRUById" myRole="processRUByIdPortTypeRole" />
</partnerLinks>
<variables>
<variable name="DoSendSMS_bienvenue_Out"
messageType="pbns:DoSendSMSResponse"/>
<variable name="DoSendSMS_bienvenue_In"
messageType="pbns:DoSendSMSRequest"/>
<variable name="MSG_BIENVENUE" type="xsd:string"/>
<variable name="DoSendMail_bienvenue_Out"
messageType="ns8:DoSendMailResponse"/>
<variable name="DoSendMail_bienvenue_In"
messageType="ns8:DoSendMailRequest"/>
<variable name="DoSendMail_wifi_Out"
messageType="ns8:DoSendMailResponse"/>
<variable name="DoSendMail_wifi_In"
messageType="ns8:DoSendMailRequest"/>
<variable name="DoSendMail_ftp_Out"
messageType="ns8:DoSendMailResponse"/>
<variable name="DoSendMail_ftp_In"
messageType="ns8:DoSendMailRequest"/>
<variable name="MSG_PARAM_WIFI" type="xsd:string"/>
<variable name="MSG_PARAM_FTP" type="xsd:string"/>
<variable name="MSG_PARAM_MAIL" type="xsd:string"/>
<variable name="DoSendMail_mail_Out"
messageType="ns8:DoSendMailResponse"/>
<variable name="DoSendMail_mail_In"
messageType="ns8:DoSendMailRequest"/>
<variable name="DoCreateMailUserAccount2Out"
messageType="ns8:DoCreateMailUserAccount2Response"/>
<variable name="DoCreateMailUserAccount2In"
messageType="ns8:DoCreateMailUserAccount2Request"/>
<variable name="DoSendSMSOut_wifi"
messageType="pbns:DoSendSMSResponse"/>
<variable name="DoSendSMSIn_wifi" messageType="pbns:DoSendSMSRequest"/>
<variable name="DoSendSMSOut_mail"
messageType="pbns:DoSendSMSResponse"/>
<variable name="DoSendSMSIn_mail" messageType="pbns:DoSendSMSRequest"/>
<variable name="DoSendSMSOut_ftp"
messageType="pbns:DoSendSMSResponse"/>
<variable name="DoSendSMSIn_ftp" messageType="pbns:DoSendSMSRequest"/>
<variable name="GetAccuseOut" messageType="pbns:GetAccuseResponse"/>
<variable name="GetAccuseIn" messageType="pbns:GetAccuseRequest"/>
<variable name="UpdateStudentByIdOut"
messageType="pbns:UpdateStudentByIdResponse"/>
<variable name="UpdateStudentByIdIn"
messageType="pbns:UpdateStudentByIdRequest" />
<variable name="SetFTPUserWelcomeMsgOut"
messageType="pbns:SetFTPUserWelcomeMsgResponse"/>
<variable name="SetFTPUserWelcomeMsgIn"
messageType="pbns:SetFTPUserWelcomeMsgReque st"/>
<variable name="DoFTPsendFileOut1"
messageType="pbns:DoFTPsendFileResponse" />
<variable name="DoFTPsendFileIn1"
messageType="pbns:DoFTPsendFileRequest"/>
<variable name="DoForwardMACaddrOut"
messageType="pbns:DoForwardMACaddrResponse"/>
<variable name="DoForwardMACaddrIn"
messageType="pbns:DoForwardMACaddrRequest"/>
<variable name="SetFTPUserAccountExpiryDateOut"
messageType="pbns:SetFTPUserAccountExpiryDateResponse"/>
<variable name="SetFTPUserAccountExpiryDateIn"
messageType="pbns:SetFTPUserAccountExpiryDateRequest"/>
<variable name="DoFTPsendFileOut"
messageType="pbns:DoFTPsendFileResponse" />
<variable name="DoFTPsendFileIn"
messageType="pbns:DoFTPsendFileRequest"/>
<variable name="processRUByIdOperationOut1"
xmlns:tns="http://j2ee.netbeans.org/wsdl/processRUById/processRUById"
messageType="tns:processRUByIdOperationResponse"/>
<variable name="DoCreateFTPUserAccountOut"
messageType="pbns:DoCreateFTPUserAccountResponse" />
<variable name="DoCreateFTPUserAccountIn"
messageType="pbns:DoCreateFTPUserAccountRequest"/>
<variable name="GetStudentByIdOut"
messageType="pbns:GetStudentByIdResponse"/>
<variable name="GetStudentByIdIn"
messageType="pbns:GetStudentByIdRequest"/>
<variable name="DoPrintWebPageOut" xmlns:pbns="urn:pbns"
messageType="pbns:DoPrintWebPageResponse"/>
<sequence name="Sequence1">
<sequence name="Sequence6">
<flow name="Flow22">
<sequence name="FlowSequence11">
<assign name="get_etudiant">
<copy>
<from variable="KEY"/>
<to>$GetStudentByIdIn.body/ns1:key</to>
</copy>
<copy>
<from variable="SYNC"/>
<to>$GetStudentByIdIn.body/ns1:sync </to>
</copy>
<copy>
<from variable="processRUByIdOperationIn"
part="identifiant"/>
<to>$GetStudentByIdIn.body/ns1:id</to>
</copy>
</assign>
<invoke name="GET_ETUDIANT"
partnerLink="pbServicesLocalPL" operation="getStudentById"
portType="pbns:PodBridgePortType" inputVariable="GetStudentByIdIn"
outputVariable="GetStudentByIdOut"/>
</sequence>
<sequence name="FlowSequence22">
<assign name="gataccuse">
<copy>
<from variable="KEY"/>
<to>$GetAccuseIn.body/ns0:key </to>
</copy>
<copy>
<from variable="SYNC"/>
<to>$GetAccuseIn.body/ns0:sync</to>
</copy>
<copy>
<from variable="processRUByIdOperationIn"
part="identifiant"/>
<to>$GetAccuseIn.body/ns0:studen tident</to>
</copy>
<copy>
<from>'2009/2010'</from>
<to>$GetAccuseIn.body/ns0:au</to>
</copy>
</assign>
<invoke name="GETACCUSE"
partnerLink="pbServicesLocalPL" operation="getAccuse"
portType="pbns:PodBridgePortType" inputVariable="GetAccuseIn"
outputVariable="GetAccuseOut"/>
</sequence>
</flow>
<if name="if_pai_check"
xmlns:tns="http://j2ee.netbeans.org/wsdl/processRUById/processRUById">
<condition>0 =
$GetAccuseOut.body/ns0:status/pbns:code</condition>
<sequence name="Sequence7">
<assign name="acc_updatedb">
<copy>
<from variable="KEY"/>
<to>$UpdateStudentByIdIn.body/ns1:key</to>
</copy>
<copy>
<from variable="SYNC"/>
<to>$UpdateStudentByIdIn.body/ns1:sync </to>
</copy>
<copy>
<from>$GetAccuseOut.body/ns0:response/ns0:refaccuse</from>
<to>$UpdateStudentByIdIn.body/ns1:refrecu </to>
</copy>
</assign>
<assign name="imprimer">
<copy>
<from variable="KEY"/>
<to>$DoPrintWebPageIn.body/ns6:key</to>
</copy>
<copy>
<from variable="SYNC"/>
<to>$DoPrintWebPageIn.body/ns6:sync </to>
</copy>
<copy>
<from>$GetAccuseOut.body/ns0:response/ns0:urlaccuse</from>
<to>$DoPrintWebPageIn.body/ns6:url</to>
</copy>
<copy>
<from>concat('ACCUSE-',
$processRUByIdOperationIn .identifiant)</from>
<to>$DoPrintWebPageIn.body/ns6:jobname </to>
</copy>
</assign>
<from>$GetStudentByIdOut.body/ns1:response/ns1:nom</from>
<to>$DoCreateMailUserAccount2In.body/ns4:lstname</to>
</copy>
<copy>
<from>$GetStudentByIdOut.body/ns1:response/ns1:prenom</from>
<to>$DoCreateMailUserAccount2In.body/ns4:fstname</to>
</copy>
<copy>
<from
variable="KEY_EMAIL"/>
<to>$DoCreateMailUserAccount2In.body/ns4:key</to>
</copy>
<copy>
<from>false()</from>
<to>$DoCreateMailUserAccount2In.body/ns4:genpswd</to>
</copy>
<copy>
<from
variable="processRUByIdOperationIn" part="identifiant"/>
<to>$DoCreateMailUserAccount2In.body/ns4:password </to>
</copy>
<copy>
<from variable="SYNC"/>
<to>$DoCreateMailUserAccount2In.body/ns4:sync</to>
</copy>
</assign>
<invoke name="CREATE_EMAIL2"
partnerLink="pbServicesRNUPL" operation="doCreateMailUserAccount2"
portType="ns8:PodBridgePortType" inputVariable="DoCreateMailUserAccount2In"
outputVariable="DoCreateMailUserAccount2Out"/>
<assign name="bd_email">
<copy>
<from
variable="SYNC"/>
<to>$UpdateStudentByIdIn.body/ns1:sync</to>
</copy>
<copy>
<from
variable="KEY"/>
<to>$UpdateStudentByIdIn.body/ns1:key </to>
</copy>
<copy>
<from>$DoCreateMailUserAccount2Out.body/ns4:response/ns4:EmailAdress</from>
<to>$UpdateStudentByIdIn.body/ns1:email</to>
</copy>
<copy>
<from>$DoCreateMailUserAccount2Out.body/ns4:response/ns4:EmailAdres s</from>
<to>$GetStudentByIdOut.body/ns1:response/ns1:email</to>
</copy>
</assign>
<assign name="message_mail">
<copy>
<from>concat('Parametres de
votre nouveau compte mail ', '* login: ',
$DoCreateMailUserAccount2Out.body/ns4:response/ns4:EmailAdress, ' * password: ',
$DoCreateMailUserAccount2Out.body/ns4:response/ns4:Password, ' * Port POP: ',
$DoCreateMailUserAccount2Out.body/ns4:response/ns4:POP3Port,
$DoCreateMailUserAccount2Out.body/ns4:response/ns4:SMTPPort, " * Port SMTP: '", '
* Consulter vos mails sur http://',
$DoCreateMailUserAccount2Out.body/ns4:response/ns4:WebMailUrl)</from>
<to
variable="MSG_PARAM_MAIL"/>
</copy>
</assign>
<flow name="mail_notifier">
<sequence name="mail_mail_seq">
<assign
name="sendmailmail">
<copy>
<from
variable="KEY_EMAIL"/>
<to>$DoSendMail_mail_In.body/ns4:key</to>
</copy>
<copy>
<from
variable="SYNC"/>
<to>$DoSendMail_mail_In.body/ns4:sync </to>
</copy>
<copy>
<from
variable="MAIL_SENDER"/>
<to>$DoSendMail_mail_In.body/ns4:from </to>
</copy>
<copy>
<from>$DoCreateMailUserAccount2Out.body/ns4:response/ns4:EmailAdress</from>
<to>$DoSendMail_mail_In.body/ns4:to</to>
</copy>
<copy>
<to>$DoSendMail_mail_In.body/ns4:subject </to>
</copy>
<copy>
<from
variable="MSG_PARAM_MAIL"/>
<to>$DoSendMail_mail_In.body/ns4:message </to>
</copy>
</assign>
<invoke
name="SENDMAILMAIL" partnerLink="pbServicesRNUPL" operation="doSendMail"
portType="ns8:PodBridgePortType" inputVariable="DoSendMail_mail_In"
outputVariable="DoSendMail_mail_Out"/>
</sequence>
<sequence
name="mail_sms_seq">
<if
name="ifhastel_mail">
<assign
name="smsmail">
<copy>
<from variable="KEY"/>
<to>$DoSendSMSIn_mail.body/ns7:key </to>
</copy>
<copy>
<from variable="SYNC"/>
<to>$DoSendSMSIn_mail.body/ns7:sync</to>
</copy>
<copy>
<from>$GetStudentByIdOut.body/ns1:response/ns1:tel</from>
<to>$DoSendSMSIn_mail.body/ns7:destinataire </to>
</copy>
<copy>
<from variable="MSG_PARAM_MAIL"/>
<to>$DoSendSMSIn_mail.body/ns7:message</to>
</copy>
</assign>
<if name="If_TI">
<condition>$GetStudentByIdOut.body/ns1:response/ns1:dep = 'TI'</condition>
<sequence name="Sequence2">
<if name="If_existe_ftp">
<condition>$GetStudentByIdOut.body/ns1:response/ns1:loginftp = ''</condition>
<sequence name="Sequence10">
<assign name="create_ftp">
<copy>
<from variable="KEY"/>
<to>$DoCreateFTPUserAccountIn.body/ns3:key</to>
</copy>
<copy>
<from variable="SYNC"/>
<to>$DoCreateFTPUserAccountIn.body/ns3:sync </to>
</copy>
<copy>
<from>'31/12/2019'</from>
<to>$DoCreateFTPUserAccountIn.body/ns3:expiry_date</to>
</copy>
<copy>
<from>concat('etu_',
$processRUByIdOperationIn.identifiant)</from>
<to>$DoCreateFTPUserAccountIn.body/ns3:user </to>
</copy>
<copy>
<from>false()</from>
<to>$DoCreateFTPUserAccountIn.body/ns3:use_welcome</to>
</copy>
</assign>
<invoke name="CREATE_FTP"
partnerLink="pbServicesLocalPL" operation="doCreateFTPUserAccount"
portType="pbns:PodBridgePortType" inputVariable="DoCreateFTPUserAccountIn"
outputVariable="DoCreateFTPUserAccountOut"/>
<assign name="bd_loginftp">
<copy>
<from>$DoCreateFTPUserAccountOut.body/ns3:response/ns3:UserLogin </from>
<to>$UpdateStudentByIdIn.body/ns1:loginftp</to>
</copy>
<copy>
<from>$DoCreateFTPUserAccountOut.body/ns3:response/ns3:UserLogin </from>
<to>$GetStudentByIdOut.body/ns1:response/ns1:loginftp</to>
</copy>
<copy>
<from>true()</from>
<to
variable="FTP_CREATED"/>
</copy>
</assign>
<assign
name="ftp_msg_bienvenu">
<copy>
<from
variable="KEY"/>
<to>$SetFTPUserWelcomeMsgIn.body/ns3:key </to>
</copy>
<copy>
<from
variable="SYNC"/>
<to>$SetFTPUserWelcomeMsgIn.body/ns3:sync</to>
</copy>
<copy>
<to>$SetFTPUserWelcomeMsgIn.body/ns3:message</to>
</copy>
<copy>
<from>$GetStudentByIdOut.body/ns1:response/ns1:loginftp </from>
<to>$SetFTPUserWelcomeMsgIn.body/ns3:user</to>
</copy>
</assign>
<invoke name="FTP_MSG_BIENVENU"
partnerLink="pbServicesLocalPL" operation="setFTPUserWelcomeMsg"
portType="pbns:PodBridgePortType" inputVariable="SetFTPUserWelcomeMsgIn"
outputVariable="SetFTPUserWelcomeMsgOut" />
<assign name="message_ftp">
<copy>
<to>$DoSendMail_ftp_In.body/ns4:sync</to>
</copy>
<copy>
<from
variable="MAIL_SENDER"/>
<to>$DoSendMail_ftp_In.body/ns4:from</to>
</copy>
<copy>
<from>$GetStudentByIdOut.body/ns1:response/ns1:email </from>
<to>$DoSendMail_ftp_In.body/ns4:to </to>
</copy>
<copy>
<to>$DoSendMail_ftp_In.body/ns4:subject</to>
</copy>
<copy>
<from
variable="MSG_PARAM_FTP"/>
<to>$DoSendMail_ftp_In.body/ns4:message</to>
</copy>
<copy>
<from
variable="KEY_EMAIL"/>
<to>$DoSendMail_ftp_In.body/ns4:key</to>
</copy>
</assign>
<invoke
name="SENDMAILFTP" partnerLink="pbServicesRNUPL" operation="doSendMail"
portType="ns8:PodBridgePortType" inputVariable="DoSendMail_ftp_In"
outputVariable="DoSendMail_ftp_Out"/>
</sequence>
<sequence
name="ftp_sms_seq">
<if
name="ifhastel_ftp">
<from variable="KEY"/>
<to>$DoSendSMSIn_ftp.body/ns7:key</to>
</copy>
<copy>
<from variable="SYNC"/>
<to>$DoSendSMSIn_ftp.body/ns7:sync</to>
</copy>
<copy>
<from variable="MSG_PARAM_FTP"/>
<to>$DoSendSMSIn_ftp.body/ns7:message </to>
</copy>
<copy>
<from>$GetStudentByIdOut.body/ns1:response/ns1:tel</from>
<to>$DoSendSMSIn_ftp.body/ns7:destinataire</to>
</copy>
</assign>
<invoke
name="SMSFTP" partnerLink="pbServicesLocalPL" operation="doSendSMS"
portType="pbns:PodBridgePortType" inputVariable="DoSendSMSIn_ftp"
outputVariable="DoSendSMSOut_ftp"/>
</sequence>
</if>
</sequence>
</flow>
</sequence>
<else>
<sequence name="Sequence11">
<assign
name="etendre_date_expiration">
<copy>
<from
variable="KEY"/>
<to>$SetFTPUserAccountExpiryDateIn.body/ ns3:key</to>
</copy>
<copy>
<from
variable="SYNC"/>
<to>$SetFTPUserAccountExpiryDateIn.body/ns3:sync</to>
</copy>
<copy>
<from>'31/12/2020'</from>
<to>$SetFTPUserAccountExpiryDateIn.body/ns3:expiry_date </to>
</copy>
<copy>
<from>$GetStudentByIdOut.body/ns1:response/ns1:loginftp </from>
<to>$SetFTPUserAccountExpiryDateIn.body/ns3:user</to>
</copy>
</assign>
<invoke
name="ETENDRE_DATE_EXPIRATION" partnerLink="pbServicesLocalPL"
operation="setFTPUserAccountExpiryDate" portType="pbns:PodBridgePortType"
inputVariable="SetFTPUserAccountExpiryDateIn"
outputVariable="SetFTPUserAccountExpiryDateOut"/>
</sequence>
</else>
</if>
<flow name="Flow3">
<sequence name="cours">
<assign name="envoyer_cours">
<copy>
<from variable="KEY"/>
<to>$DoFTPsendFileIn1.body/ns3:key </to>
</copy>
<copy>
<from variable="SYNC"/>
<to>$DoFTPsendFileIn1.body/ns3:sync</to>
</copy>
<copy>
<from>concat('cours_',
$GetStudentByIdOut.body/ns1:response/ns1:spec,
$GetStudentByIdOut.body/ns1:response/ns1:niveau)</from>
<to>$DoFTPsendFileIn1.body/ns3:file</to>
</copy>
<copy>
<from>$GetStudentByIdOut.body/ns1:response/ns1:loginftp </from>
<to>$DoFTPsendFileIn1.body/ns3: user</to>
</copy>
</assign>
<invoke name="ENVOYER_COURS"
partnerLink="pbServicesLocalPL" operation="doFTPsendFile"
portType="pbns:PodBridgePortType" inputVariable="DoFTPsendFileIn1"
outputVariable="DoFTPsendFileOut1"/>
</sequence>
<if name="If_niv2_ou_plus">
<to>$DoFTPsendFileIn.body/ns3:key</to>
</copy>
<copy>
<from
variable="SYNC"/>
<to>$DoFTPsendFileIn.body/ns3:sync </to>
</copy>
<copy>
<from>'Cours-
UML.pdf'</from>
<to>$DoFTPsendFileIn.body/ns3:file </to>
</copy>
<copy>
<from>$GetStudentByIdOut.body/ns1:response/ns1:loginftp </from>
<to>$DoFTPsendFileIn.body/ns3:user </to>
</copy>
</assign>
<invoke
name="ENVOYER_COURS_UML" partnerLink="pbServicesLocalPL" operation="doFTPsendFile"
portType="pbns:PodBridgePortType" inputVariable="DoFTPsendFileIn"
outputVariable="DoFTPsendFileOut"/>
</sequence>
</if>
</flow>
</sequence>
</if>
</sequence>
<sequence name="filtrage_mac">
<if name="if_adrmac">
<to>$DoForwardMACaddrIn.body/ns5:key</to>
</copy>
<copy>
<from variable="SYNC"/>
<to>$DoForwardMACaddrIn.body/ns5:sync </to>
</copy>
<copy>
<from>$GetStudentByIdOut.body/ns1:response/ns1:adrmac</from>
<to>$DoForwardMACaddrIn.body/ns5:macaddr </to>
</copy>
</assign>
<invoke name="AUTORISE_MAC"
partnerLink="pbServicesLocalPL" operation="doForwardMACaddr"
portType="pbns:PodBridgePortType" inputVariable="DoForwardMACaddrIn"
outputVariable="DoForwardMACaddrOut"/>
<assign name="settrue">
<copy>
<from>true()</from>
<to variable="MAC_FRWD"/>
</copy>
</assign>
<assign name="message_wifi">
<copy>
<from>concat("Dès maintenant
Vous etes autorisé à se connecter au réseau sans fil d'ISET Jerba ", ' * SSID : ',
$DoForwardMACaddrOut.body/ns5:response/ns5:ssid, ' * Clé : ',
$DoForwardMACaddrOut.body/ns5:response/ns5:auth_key) </from>
<to variable="MSG_PARAM_WIFI"/>
</copy>
</assign>
<flow name="wifi_notifier">
<sequence name="mail_wifi_seq">
<assign
name="sendmailwifi">
<copy>
<from
variable="SYNC"/>
<to>$DoSendMail_wifi_In.body/ns4:sync </to>
</copy>
<copy>
<from
variable="MAIL_SENDER"/>
<to>$DoSendMail_wifi_In.body/ns4:from </to>
</copy>
<copy>
<from
variable="MSG_PARAM_WIFI"/>
<to>$DoSendMail_wifi_In.body/ns4:message </to>
</copy>
<copy>
<from>$GetStudentByIdOut.body/ns1:response/ns1:email </from>
<to>$DoSendMail_wifi_In.body/ns4:to</to>
</copy>
<copy>
<from>"Vous etes
autoriser à se connecté au réseau sans Fil d'ISET Jerba"</from>
<to>$DoSendMail_wifi_In.body/ns4:subject</to>
</copy>
<copy>
<from
variable="KEY_EMAIL"/>
<to>$DoSendMail_wifi_In.body/ns4:key</to>
</copy>
</assign>
<invoke
name="SENDMAILWIFI" partnerLink="pbServicesRNUPL" operation="doSendMail"
portType="ns8:PodBridgePortType" inputVariable="DoSendMail_wifi_In"
outputVariable="DoSendMail_wifi_Out"/>
</sequence>
<sequence name="wifi_sms_seq">
<if name="ifhastel_wifi">
<condition>$GetStudentByIdOut.body/ns1:response/ns1:tel != ''</condition>
<sequence
name="Sequence15">
<assign
name="smswifi">
<copy>
<from
variable="KEY"/>
<to>$DoSendSMSIn_wifi.body/ns7:key </to>
</copy>
<copy>
<from
variable="SYNC"/>
<to>$DoSendSMSIn_wifi.body/ns7:sync</to>
</copy>
<copy>
<from>$GetStudentByIdOut.body/ns1:response/ns1:tel</from>
<to>$DoSendSMSIn_wifi.body/ns7:destinataire </to>
</copy>
<copy>
<from
variable="MSG_PARAM_WIFI"/>
<to>$DoSendSMSIn_wifi.body/ns7:message</to>
</copy>
</assign>
<invoke
name="SMSWIFI" partnerLink="pbServicesLocalPL" operation="doSendSMS"
portType="pbns:PodBridgePortType" inputVariable="DoSendSMSIn_wifi"
outputVariable="DoSendSMSOut_wifi"/>
</sequence>
</if>
</sequence>
</flow>
</sequence>
</if>
</sequence>
</flow>
<assign name="message_bienvenue">
<copy>
<from>concat('Bienvenu ',
$GetStudentByIdOut.body/ns1:response/ns1:nom, ' ',
$GetStudentByIdOut.body/ns1:response/ns1:prenom, ' ISET Djerba vous souhaite une
bonne rentrée universiaire 2009/2010.')</from>
<to variable="MSG_BIENVENUE"/>
</copy>
</assign>
<flow name="Flow23">
<sequence name="FlowSequence">
<assign name="sendmailbienvenue">
<copy>
<from variable="SYNC"/>
<to>$DoSendMail_bienvenue_In.body/ns4:sync</to>
</copy>
<copy>
<from>$GetStudentByIdOut.body/ns1:response/ns1:email </from>
<to>$DoSendMail_bienvenue_In.body/ns4:to </to>
</copy>
<copy>
<from variable="MAIL_SENDER"/>
<to>$DoSendMail_bienvenue_In.body/ns4:from</to>
</copy>
<copy>
<from variable="MSG_BIENVENUE"/>
<to>$DoSendMail_bienvenue_In.body/ns4:message</to>
</copy>
<copy>
<from>'bienvenue'</from>
<to>$DoSendMail_bienvenue_In.body/ns4:subject</to>
</copy>
<copy>
<from variable="KEY_EMAIL"/>
<to>$DoSendMail_bienvenue_In.body/ns4:key</to>
</copy>
</assign>
<invoke name="SENDMAILBIENVENUE"
partnerLink="pbServicesRNUPL" operation="doSendMail"
portType="ns8:PodBridgePortType" inputVariable="DoSendMail_bienvenue_In"
outputVariable="DoSendMail_bienvenue_Out"/>
</sequence>
<sequence name="FlowSequence1">
<assign name="smsbienvenue">
<copy>
<from variable="KEY"/>
<to>$DoSendSMS_bienvenue_In.body/ns7:key</to>
</copy>
<copy>
<from variable="SYNC"/>
<to>$DoSendSMS_bienvenue_In.body/ns7:sync</to>
</copy>
<copy>
<from>$GetStudentByIdOut.body/ns1:response/ns1:tel</from>
<to>$DoSendSMS_bienvenue_In.body/ns7:destinataire</to>
</copy>
<copy>
<from variable="MSG_BIENVENUE"/>
<to>$DoSendSMS_bienvenue_In.body/n s7:message</to>
</copy>
</assign>
<invoke name="SMSBIENVENUE"
partnerLink="pbServicesLocalPL" operation="doSendSMS"
portType="pbns:PodBridgePortType" inputVariable="DoSendSMS_bienvenue_In"
outputVariable="DoSendSMS_bienvenue_Out" />
</sequence>
</flow>
<assign name="reply_bdetu_ok">
<copy>
<from>'OK'</from>
<to variable="processRUByIdOperationOut"
part="statut"/>
</copy>
<copy>
<from>'OK'</from>
<to>$UpdateStudentByIdIn.body/ns1:process </to>
</copy>
</assign>
</sequence>
<else>
<sequence>
<assign name="reply_bdetu_pai">
<copy>
<from>'PAI'</from>
<to variable="processRUByIdOperationOut"
part="statut"/>
</copy>
<copy>
<from>'PAI'</from>
<to>$UpdateStudentByIdIn.body/ns1:process</to>
</copy>
</assign>
</sequence>
</else>
</if>
</sequence>
</sequence>
<assign name="mettre_a_jour_bdetu">
<copy>
<from variable="KEY"/>
<to>$UpdateStudentByIdIn.body/ns1:key</to>
</copy>
<copy>
<from variable="SYNC"/>
<to>$UpdateStudentByIdIn.body/ns1:sync</to>
</copy>
<copy>
<from variable="processRUByIdOperationIn" part="identifiant"/>
<to>$UpdateStudentByIdIn.body/ns1:id </to>
</copy>
</assign>
<invoke name="METTRE_A_JOUR_BDETU" partnerLink="pbServicesLocalPL"
operation="updateStudentById" xmlns:pbns="urn:pbns"
portType="pbns:PodBridgePortType" inputVariable="UpdateStudentByIdIn"
outputVariable="UpdateStudentByIdOut"/>
<reply name="Reply" partnerLink="processRUByIdPL"
operation="processRUByIdOperation"
xmlns:tns="http://j2ee.netbeans.org/wsdl/processRUById/processRUById"
portType="tns:processRUByIdPortType" variable="processRUByIdOperationOut" />
</sequence>
</process>
targetNamespace="http://enterprise.netbeans.org/bpel/BatchProcessRU/batchProcessRU
"
xmlns="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sxt="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/Trace"
xmlns:sxed="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/Editor"
xmlns:sxat="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/Attachme
nt"
xmlns:sxeh="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/ErrorHan
dling"
xmlns:tns="http://enterprise.netbeans.org/bpel/BatchProcessRU/batchProcessRU"
xmlns:sxed2="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/Editor2
" xmlns:ns0="http://xml.netbeans.org/schema/BatchProcessRUTypes.xsd"
xmlns:sxxf="http://www.sun.com/wsbpel/2.0/process/executable/SUNExtension/XPathFun
<to>$GetNextIdIn.body/ns1:filter</to>
</copy>
</assign>
<repeatUntil name="RepeatUntil_lastid">
<sequence name="Sequence1">
<invoke name="GETNEXTID" partnerLink="getNextIdPL"
operation="getNextId" xmlns:pbns="urn:pbns"
portType="pbns:PodBridgeGetNextIdPortType" inputVariable="GetNextIdIn"
outputVariable="GetNextIdOut"/>
<if name="ifexist">
<condition>$GetNextIdOut.body/ns1:status/ns2:code =
0</condition>
<sequence name="Sequence2">
<assign name="getnextid">
<copy>
<from>$GetNextIdOut.body/ns1:response/ns1:nextid</from>
<to>$GetNextIdIn.body/ns1:id</to>
</copy>
<copy>
<from variable="KEY_LOCAL"/>
<to>$GetNextIdIn.body/ns1:key </to>
</copy>
<copy>
<from>true()</from>
<to>$GetNextIdIn.body/ns1:sync</to>
</copy>
<copy>
<from>$BatchProcessRUOperationIn.part1/ns0:filter </from>
<to>$GetNextIdIn.body/ns1:filter </to>
</copy>
</assign>
<assign name="processrubyid">
<copy>
<from>$GetNextIdOut.body/ns1:response/ns1:nextid</from>
<to variable="ProcessRUByIdOperationIn"
part="identifiant"/>
</copy>
</assign>
<invoke name="PROCESSRUBYID"
partnerLink="processByIdPL" operation="processRUByIdOperation"
xmlns:tns="http://j2ee.netbeans.org/wsdl/processRUById/processRUById"
portType="tns:processRUByIdPortType" inputVariable="ProcessRUByIdOperationIn"
outputVariable="ProcessRUByIdOperationOut"/>
</sequence>
</if>
</sequence>
<condition>$GetNextIdOut.body/ns1:response/ns1:last = true() or
$GetNextIdOut.body/ns1:status/ns2:code != 0 </condition>
</repeatUntil>
<assign name="message">
<copy>
<from>concat('Exécution de ProcessRUById est Terminée avec
succès !', '* Démarré : ', $BatchProcessRUOperationOut.part1/ns0:date/ns0:start,
' * Fin : ', sxxf:current -dateTime())</from>
<to variable="MSG"/>
</copy>
</assign>
<flow name="notify_admin">
<sequence name="FlowSequence">
<assign name="mail">
<copy>
<from variable="KEY_RNU"/>
<to>$DoSendMailIn.body/ns4:key</to>
</copy>
<copy>
<from>true()</from>
<to>$DoSendMailIn.body/ns4:sync </to>
</copy>
<copy>
<from>'sunbpelengine@rnu.edu.demo' </from>
<to>$DoSendMailIn.body/ns4:from </to>
</copy>
<copy>
<from>'walid@rnu.edu.demo'</from>
<to>$DoSendMailIn.body/ns4:to</to>
</copy>
<copy>
<from>'Exéction de BatchProcessRU terminée !'</from>
<to>$DoSendMailIn.body/ns4:subject </to>
</copy>
<copy>
<from variable="MSG"/>
<to>$DoSendMailIn.body/ns4:message </to>
</copy>
</assign>
<invoke name="MAIL" partnerLink="doSendMailPL"
operation="doSendMail" portType="ns3:PodBridgeDoSendMailPortT ype"
inputVariable="DoSendMailIn" outputVariable="DoSendMailOut"/>
</sequence>
<sequence name="FlowSequence1">
<assign name="sms">
<copy>
<from variable="KEY_LOCAL"/>
<to>$DoSendSMSIn.body/ns5:key</to>
</copy>
<copy>
<from>true()</from>
<to>$DoSendSMSIn.body/ns5:sync</to>
</copy>
<copy>
<from>'22939968'</from>
<to>$DoSendSMSIn.body/ns5:destinataire</to>
</copy>
<copy>
<from variable="MSG"/>
<to>$DoSendSMSIn.body/ns5:message</to>
</copy>
</assign>
<invoke name="SMS" partnerLink="doSendSMSPL"
operation="doSendSMS" portType="ns2:PodBridgeDoSendSMSPortType"
inputVariable="DoSendSMSIn" outputVariable="DoSendSMSOut"/>
</sequence>
</flow>
<assign name="reply">
<copy>
<from>'success'</from>
<to>$BatchProcessRUOperationOut.part1/ns0:message</to>
</copy>
<copy>
<from>0</from>
<to>$BatchProcessRUOperationOut.part1/ns0:statecode </to>
</copy>
<copy>
<from>sxxf:current-dateTime()</from>
<to>$BatchProcessRUOperationOut.part1/ns0: date/ns0:end</to>
</copy>
</assign>
<reply name="REPLY" partnerLink="BatchProcessRUPL"
operation="BatchProcessRUOperation"
xmlns:tns="http://j2ee.netbeans.org/wsdl/BatchProcessRU/BatchProcessRU"
portType="tns:BatchProcessRUPortType" variable="BatchProcessRUOperationOut"/>
</sequence>
</process>
38 'sync'=>'1',
39 'notify'=>'',
40 'abort'=>'',
41 'id'=>$_POST['id'],
42 'tel'=>$_POST['tel'],
43 'email'=>$_POST['mail'],
44 'loginftp'=>'',
45 'adrmac'=>$_POST['mac'],
46 'refrecu'=>'',
47 'process'=>''
48 ) ;
49
50 $updateStudentById_out = $client-
>updateStudentById($arguments);
51
52 if ($updateStudentById_out->status->code=='0') {
53 $updated=true;
54 }else {
55 if ($updateStudentById_out->status->code=='2')
56 ?><h3><?php echo ($updateStudentById_out-
>status->msg); ?></h3><?php
57 }
58
59
60 }
61
62 }
63 catch (SoapFault $e) {
64 print $e->getMessage();
65 }
66 }
67
68 ?>
69 <form id="formulaire" method="post" >
70 <h2>
71 <?php if ( $connected ) { ?>Bienvenu <?php echo
$getStudentById_out->response->nom.' '.$getStudentById_out->response->prenom.' !'
;
72 } ?>
73 </h2>
74 <h1>
75 <?php if (! $connected) { ?>Authentification<?php } else { ?>Remplir le
formulaire<?php } ?>
76 </h1>
77 <table>
3. CAPTURES D’ECRAN