Gå til innhold

UserActivation MA

Management Agent for ActivationCodes tabellen i VigoBAS-Util databasen.

Type: Sql Server

Versjonsnummer: 1.7.0

Dato: 08.10.2020

Objecttype: person

Beskrivelse

Management agent for ActivationCode tabellen i VigoBAS-Util databasen. Frem til ver 1.7 har aktiveringskoder blitt sendt ut vha provisionskoden til AD-MA. Denne MA'n gjør det mulig å sende aktiveringskode vha attibutt flyt. Se figur øverst på siden :

  • Bruker blir opprettet i AD MA
  • userPrincipalName fra AD flyter til basUserPrincipalName i MetaVers
  • Ny rad i ActivationCodes tabellen blir provisjonert av denne MA'n
  • Inngående flyt på denne MA'n setter basActivationCode i MetaVers og trigger webservicen som sender aktiveringskode til brukeren.

Parametre

  • Server : navn på server hvor VigoBAS-Util ligger
  • Database : VigoBAS-Util
  • Table/view : ActivationCodes

Autentication mode Velg sql eller windows authentication avhengig av hva dere benytter i deres eget sql miljø. Brukeren må ha db_datareader og db_datawriter-roller på VigoBAS-Util databasen.

Flow

Import

CS Object Type CS Attributes Mapping Type MV Object Type MV Attribute Advanced Rule
person activationcode Advanced person activationcode UserActivationMA_Activationcode

Export

Det exporters ingen data fra Metaverse fra ActivationCodestabellen utover det som skjer i provisioning koden.

Flow rules

UserActivationMA_Activationcode

#UserActivationMA_Activationcode
#vigobas.util.activationcodes.activationcode -> MV 
# -*- coding: utf-8 -*- 

from System.Net import WebRequest  
from System.Net import CredentialCache 

import sys 
import string 

domain = 'vigobas.local'

sourceActCodeAttribute = 'activationcode'
targetActCodeAttribute = 'basActivationCode'
usernameAttribute = 'basUserPrincipalName'

activationcode = source[sourceActCodeAttribute].Value

if target[usernameAttribute].IsPresent:
    username = target[usernameAttribute].Value

    #Will only send activationcode if basActivationcode is empty or different
    if not target[targetActCodeAttribute].IsPresent or target[targetActCodeAttribute].Value != activationcode:

        if target['basHomeMobile'].IsPresent or target['basWorkMobile'].IsPresent:
            SendCodeMethod ='http://vigobas-services.' + domain + '/Users/ActivationCodes.svc/SendActivationCodeForUserBySMS'
            querystring = '?username=' + username +'&activationcode=' + activationcode
            request = WebRequest.Create(SendCodeMethod + querystring)
            request.Credentials= CredentialCache.DefaultNetworkCredentials 
            response = request.GetResponse() 

        elif target['basHomeEmail'].IsPresent:
            mail = target['basHomeEmail'].Value

            SendEmailMethod ='http://vigobas-services.' + domain + '/Users/ActivationCodes.svc/SendActivationCodeForUserByEmail'
            querystring = '?username=' + username +'&activationcode=' + activationcode + '&emailAddress=' + '&bodyIsHtml=' + "0"            
            request = WebRequest.Create(SendEmailMethod + querystring)
            request.Credentials= CredentialCache.DefaultNetworkCredentials
            response = request.GetResponse()

        target[targetActCodeAttribute].Value = source[sourceActCodeAttribute].Value

Provisioning rule

import datetime
from datetime import datetime

# Use datelimit to restrict old users from having new activationcode
datelimit = datetime(2020,8,1)

basCreateDateTime =  entry['basCreateDateTime'].Value

createdate = datetime.strptime(basCreateDateTime.replace('-','')[:8],'%Y%m%d')

# 
if createdate >= datelimit and entry['basUserPrincipalName'].IsPresent:
    return True

else:
    return False

Initial Flow rule

# -*- coding: utf-8 -*- 
from System.Text import Encoding
from System import Guid
import datetime
from datetime import datetime
import sys 
import random 
import string 

def randomString():
    # alternatives for generating random sting for activationcode
    #tmpString = random.choice(string.ascii_lowercase) 
    #tmpString += random.choice(string.ascii_uppercase) 
    #tmpString += random.choice(string.digits) 
    #tmpString += random.choice(string.punctuation)

    tmpString=''
    randomSource = string.digits
    for i in range(7): 
        tmpString += random.choice(randomSource) 

    tmpStringList = list(tmpString) 
    random.SystemRandom().shuffle(tmpStringList) 
    finalString = ''.join(tmpStringList) 
    return finalString 

DAYS_VALID = 15

# generate guid to start with "AAAAAAA0" in order to separate from activationcodes
# used by startportal
newId = str(Guid.NewGuid()).upper()
newId = newId[-28:]
newId = '{AAAAAAA0' + newId + '}'

target['ID'].Value = newId
target['type'].Value = 'Start'
target['Username'].Value = source['basUserPrincipalname'].Value
date = datetime.today()
target['createdtimestamp'].Value = date.strftime('%Y-%m-%d %H:%M:%S')

expirydate = date + timedelta(days=DAYS_VALID)
target['expires'].Value = expirydate.strftime('%Y-%m-%d %H:%M:%S')

target['invalidated'].BooleanValue = False
target['used'].BooleanValue = False

activationcode = randomString()

target['activationcode'].Value = activationcode

Annet

MV attributter

UserActivation MA'n krever følgende nye MetaVers attributter:

  • basActivationCode
  • basWorkMobile
  • basHomeMobile
  • basHomeEmail
  • basUserPrincipalName

Disse attibuttene er implementert i 1.7 skjema til MetaVers.

webservice

For selve utsendingen av aktiveringskoden er det laget to nye webservicer:

  • /Users/ActivationCodes.svc/SendActivationCodeForUserBySMS
  • /Users/ActivationCodes.svc/SendActivationCodeForUserEmail

Disse er med i ver 1.7 av VigoBAS-Services

web.config for users webservice

Disse elemementene må være med i web.config for users servicen:

<add key="SMSSenderName" value=" VIGO-BAS fylkeskommune" />
<add key="StartEmailTitleEmployee" value="Brukeraktivering Viken fylkeskommune"/>
<add key="StartEmailMessageEmployee" value ="{0}Velkommen som bruker i VIGO-fylkeskommune.{0}{0}Nytt brukernavn:   {1}{0}Aktiveringskode:   {2}{0}{0}Følg denne lenken for veiledning til hvordan du aktiverer din bruker:{0}{0}https://vigobas.no/for-ansatte/start"/>
<add key="StartEmailTitleStudent" value="Brukeraktivering VIGO-BAS fylkeskommune"/>
<add key="StartEmailMessageStudent" value ="{0}Velkommen som bruker i VIGO-BAS fylkeskommune.{0}{0}Nytt brukernavn:   {1}{0}Aktiveringskode:   {2}{0}{0}Følg denne lenken for veiledning til hvordan du aktiverer din bruker:{0}{0}https://vigobas.no/for-elev/start "/>
<add key="OrganizationName" value="VigoBAS fylkeskommune"/>
<add key="EmailSenderAddress" value="noreply@vigobas.no"/>
<add key="EmailSenderSystem" value=" VIGOBAS"/>