#!/usr/bin/python
# -*- coding: utf-8 -*-

'''
Created on Apr 20, 2016

@author: karli
'''

from ConfigParser import SafeConfigParser
parser = SafeConfigParser()
parser.read("/home/karli/Eclipse/oVirt/vpscreate.conf")

from ovirtsdk.api import API
import smtplib

URL             = parser.get('vpscreate', 'url')
CACERT          = parser.get('vpscreate', 'cacert')
USERNAME        = parser.get('vpscreate', 'username')
PASSWORD        = parser.get('vpscreate', 'password')
CLUSTER_NAME    = parser.get('vpscreate', 'cluster_name')
SNAPSHOT_NAME   = parser.get('vpscreate', 'snapshot_name')
ROLE_NAME       = parser.get('vpscreate', 'role_name')
DOMAIN_NAME     = parser.get('vpscreate', 'domain_name')

api = API(url=URL, ca_file=CACERT, username=USERNAME, password=PASSWORD)

def sendInformationEmail(EMAIL_ADDRESS):
    try:
        smtpObj = smtplib.SMTP('smtp.slu.se', 25)
        for USER_LIST_OBJECT in api.users.list(query='*'):
            try:
                USER_OBJECT_ID = USER_LIST_OBJECT.get_id()
                USER_OBJECT = api.users.get(id='%s' % (USER_OBJECT_ID))
                USER_EMAIL_ADDRESS = USER_OBJECT.get_email()
                if USER_EMAIL_ADDRESS == EMAIL_ADDRESS:
                    RECEIVER = USER_OBJECT
                    RECEIVER_EMAIL = USER_EMAIL_ADDRESS
            except Exception as e:
                print e
        SPLIT_EMAIL_ADDRESS = RECEIVER_EMAIL.split('@')
        PRINCIPAL_NAME = SPLIT_EMAIL_ADDRESS[0].lower()
        RECEIVER_FIRSTNAME = RECEIVER.get_name().encode('utf-8')
        RECEIVER_LASTNAME = RECEIVER.get_last_name().encode('utf-8')
        SENDER_EMAIL = 'vpsorderportal@slu.se'
        MESSAGE = """From: VPS Orderportal <%s>
To: %s %s <%s>
Subject: Login change in oVirt / Inloggningsändring i oVirt

Hello %s!

You are receiving this email because you have a virtual machine created in oVirt.

Earlier you have used your user name in our Active Directory, e.g. "abyz0001" to log in to the WebAdmin or UserPortal to start, stop, or snapshot the machine, but since the latest update that has changed.

You now need to use your userPrincipalName, which in most cases is "firstname.lastname". For you that should be "%s" as far as we can tell, but for some that may not be the case.

However, confusingly enough, when logging in to the orderportal or when logging in to your virtual machine, be it over SSH, RDP, or something, it´s still the samAccountName (abyz0001) that applies.

So to sum it up:
WebAdmin/Userportal = userPricipalName
Orderportal/SSH/RDP = samAccountName

If you encounter any problems logging in, please send an email to "kundstod@slu.se" or call "(018-67)6600".

Best wishes
IT-Operations

--------------------------------------------------------------------------------

Hej %s!

Du får det här mailet eftersom du har en virtuell maskin skapad i oVirt.

Tidigare har man använt sitt användarnamn i vårat Active Directory, t.ex. "abyz0001" för att logga in i WebAdmin eller Användarportalen när man vill starta, stoppa, eller ta en ögonblicksbild av en maskin, men sedan den senaste uppdateringen har det ändrats.

Man kommer nu istället att använda sitt userPrincipalName, vilket i de flesta fallen är "förnamn.efternamn". I ditt fall borde det vara "%s", men för vissa kanske inte det är fallet.

Förvirrande nog så är det fortfarande samAccountName (abyz0001) som skall användas för att logga in i orderportalen, eller för att logga in i den virtuella maskinen över SSH eller RDP.

Så för att sammanfatta:
WebAdmin/Användarportalen = userPrincipalName
Orderportalen/SSH/RDP = samAccountName

Om man stöter på några problem med att logga in, skicka då ett email till "kundstod@slu.se" eller ring "(018-67)6600".

Med Vänliga Hälsningar
IT-Driften""" % (SENDER_EMAIL,RECEIVER_FIRSTNAME,RECEIVER_LASTNAME,RECEIVER_EMAIL,RECEIVER_FIRSTNAME,PRINCIPAL_NAME,RECEIVER_FIRSTNAME,PRINCIPAL_NAME)
        smtpObj.sendmail(SENDER_EMAIL,RECEIVER_EMAIL,MESSAGE)
    except Exception as e:
        print e

USER_EMAIL_LIST = []

for VM in api.vms.list():
    VM_NAME = VM.name
    for VM_PERMISSIONS_LIST_OBJECT in api.vms.get(VM_NAME).permissions.list():
        try:
            USER_NAME = VM_PERMISSIONS_LIST_OBJECT.get_user()
            if USER_NAME:
                USER_NAME_ID = USER_NAME.get_id()
                USER_OBJECT = api.users.get(id='%s' % (USER_NAME_ID))
                USER_EMAIL_ADDRESS = USER_OBJECT.get_email()
                if USER_EMAIL_ADDRESS:
                    USER_EMAIL_LIST.append(USER_EMAIL_ADDRESS)
        except Exception as e:
            print e

SET = set(USER_EMAIL_LIST)
UNIQUE_EMAIL_ADDRESSES = list(SET)
for EMAIL_ADDRESS in UNIQUE_EMAIL_ADDRESSES:
    sendInformationEmail(EMAIL_ADDRESS)

api.disconnect()
