Omdat alle interne website's bij aserver beveiligd zijn via SSL, moest het asset management system ook over SSL worden aangeboden. Daarom is de login-pagina vervangen door SSL-Authentication
De layout van de website is behouden (zie vorige posts).
Deze week heb ik ook de resultpage van het zoekvenster aangepast. Het probleem was het volgende:
Omdat de tabellen maar in 1 richting naar elkaar linken, en ik van elke query die opgezocht werd ook het IP-adres, het MAC-adres, enz wou ophalen, werd er eerst gezocht door alle IP-addressen van de verschillende machine's en dan gekeken welke naam ze hadden. Deze naam werd vervolgens vergeleken met de query.
Probleem: Wat als een bepaalde asset geen IP-Adres heeft? Het management systeem bevat even goed assets die in de stock liggen bijvoorbeeld.
Dus werd dit alles aangepast en werd er gezocht op naam. Eénmaal alle gezochte assets gevonden waren, werden ze opgenomen in 1 lijst, waar dan vervolgens de bijkomende info zoals vb. IP-Adres werd toegevoegd. Wanneer er bepaalde zaken niet werden gevonden in de database, werden deze vervangen door een "/"
Hier ook nog even een screenshot ter verduidelijking:
Nadat dit probleem opgelost was ben ik begonnen aan de'Phone-To' gedeelte. Er werd namelijk gevraagd om het mogelijk te maken te telefoneren vanop het cmdb, zowel intern als extern.
Hoe?: Iedereen in het bedrijf is in het bezit van een IP-Phone. Daarbij heeft elke gebruiker zijn eigen SIP (id). Via deze IP-Phone's is het mogelijk om naar anderen te bellen zowel intern als extern. Wat nu nog nodig was, was een script dat het via Python/Django mogelijk maakt deze telefoons te gebruiken.
Het eerste wat we doen is kijken of er een gebruiker is ingelogd en enkele variabelen definieren indien het SIP van de ingelogde gebruiker geldig is! Het asterisk_ip & port zijn het ip en de poort van de telefoon-server:
def phonecall(request, usersto, usersip, phonenumber):
currentuser = checkvaliduser(request, request.META['REMOTE_USER'])
if currentuser:
if usersip != "None":
asterisk_ip = "172.19.0.8"
asterisk_port = 5038
callerid = "93242577"
errno = 0
errstr = 0
connectingto = Users.objects.get(user_id=usersto)
Daarna gaan we aan de hand van volgende code het telefoonnummer controleren van de gebruiker die we willen contacteren. Onderaan kijken we ook of de lengte van de contactpersoon gelijk is aan '3'. Indien dat zo is, wil dit zeggen dat we intern willen bellen naar een andere contactpersoon (via zijn SIP):
phonenumber = phonenumber.strip()
if phonenumber.find("(0)") > -1:
phonenumber = phonenumber.replace("(0)", "")
phonenumber = phonenumber.replace(" ", "")
phonenumber = phonenumber.replace("/", "")
phonenumber = phonenumber.replace(".", "")
phonenumber = phonenumber.replace("-", "")
phonenumber = phonenumber.replace("+", "00")
if phonenumber.find("0", 0, 1) > -1 and phonenumber.find("00", 0, 2) == -1:
phonenumber = "0032" + phonenumber[1:]
if len(phonenumber) == 3:
phonenumber = "SIP/" + phonenumber
else:
phonenumber = "IAX2/Hold/" + phonenumber
Tenslotten nog het in stand brengen van de eigenlijke connectie:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((asterisk_ip, asterisk_port))
s.send("Action: login\r\n")
s.send("Username: admin\r\n")
s.send("Secret: amp111\r\n")
s.send("Events: off\r\n\r\n")
sys.stdout.flush()
time.sleep(1)
s.send("Action: Originate\r\n")
s.send("Channel: SIP/" + usersip + "\r\n")
s.send("Context: callout\r\n")
s.send("Exten: s\r\n")
s.send("Priority: 1\r\n")
s.send("CallerID: Central\r\n")
s.send("Variable: number_to_dial=" + phonenumber + "|callerid=" + callerid + "\r\n\r\n")
sys.stdout.flush()
time.sleep(2)
s.close()
return dialing(request, currentuser, connectingto)
Geen opmerkingen:
Een reactie posten