3
N9V                 @   s   d dl Z d dlZd dlZd dlZdZG dd dejZG dd dejZG dd dejZdd
dZ	dd Z
dd Zdd Zdd Zdd Zdd ZdS )    Nz/etc/default/keyboardc               @   s   e Zd ZdZdS )UnknownProxyTypeErrorz" an unknown proxy type was passed N)__name__
__module____qualname____doc__ r   r   ;/usr/lib/python3/dist-packages/UbuntuSystemService/utils.pyr      s   r   c               @   s   e Zd ZdZdS )InvalidKeyboardTypeErrorz an invalid keyboard was set N)r   r   r   r   r   r   r   r   r	      s   r	   c               @   s   e Zd ZdZdS )PermissionDeniedErrorz permission denied by policy N)r   r   r   r   r   r   r   r   r
      s   r
      c             C   sj   t j }|jddd}t j|d}ddt j| ddif}ddi}t j|}	d}
|j||||	|
\}}}|S )	Nzorg.freedesktop.PolicyKit1z%/org/freedesktop/PolicyKit1/Authorityz$org.freedesktop.PolicyKit1.Authorityzsystem-bus-namenamer   )Zvariant_level )dbusZ	SystemBusZ
get_objectZ	InterfaceStringZUInt32ZCheckAuthorization)ZsenderZ
connectionZprivinteractiveZ
system_busobjZ	policykitZsubjectZdetailsflagsZ	cancel_idokZnotusedr   r   r   authWithPolicyKit   s     
r   c              C   s   d} d}d}d}yt t}x|D ]}|jdrD|jdd jd} q |jdrd|jdd jd}q |jdr|jdd jd}q |jdr |jdd jd}q W |j  t| ||| W n tk
r   td	t Y nX | |||fS )
za 
    helper that reads /etc/default/console-setup and gets the 
    keyboard settings there
    r   z	XKBMODEL==r   z"
z
XKBLAYOUT=zXKBVARIANT=zXKBOPTIONS=zCouldn't read )openCONSOLE_SETUP_DEFAULT
startswithsplitstripcloseprint	Exception)modellayoutvariantoptionsfliner   r   r   get_keyboard_from_etc(   s(    




r$   c              C   s$   t jddg} t jddg | dkS )z
    helper that runs setupcon to activate the settings, taken from 
    oem-config (/usr/lib/oem-config/console/console-setup-apply)
    Zsetupconz--save-onlyz/usr/sbin/update-initramfsz-ur   )
subprocesscallPopen)retr   r   r   run_setupconD   s    r)   c             C   s   | s0d} |dkrd} n|dkr$d} n|dkr0d} t | |||sFtdg }xhttD ]\}|jd	rld
|  }n:|jdrd| }n&|jdrd| }n|jdrd| }|j| qTW |ttj krttd djdj| t	j
td t t sdS dS )z9 
    helper that writes /etc/default/console-setup 
    Zpc105usZpc104brZabnt2ZjpZjp106zInvalid keyboard setz	XKBMODEL=zXKBMODEL="%s"
z
XKBLAYOUT=zXKBLAYOUT="%s"
zXKBVARIANT=zXKBVARIANT="%s"
zXKBOPTIONS=zXKBOPTIONS="%s"
z.newwr   FT)verify_keyboard_settingsr	   r   r   r   append	readlineswritejoinosrenamer)   )r   r   r    r!   Zcontentr#   r   r   r   set_keyboard_to_etcM   s8    







r4   c             C   s   d}x$| |||fD ]}t j||sdS qW dg}| r@|d| g7 }|rP|d|g7 }|r`|d|g7 }|rp|d|g7 }tj|ttjd}|d	kS )
z" helper that verfies the settings z^[0-9a-zA-Z:,_]*$FZckbcompz-modelz-layoutz-variantz-option)stdoutr   )rematchr%   r&   r   r2   devnull)r   r   r    r!   Zallowedscmdr(   r   r   r   r-   {   s    r-   c             C   s   d|  }t j||sdS dS )zk
    This verifies a proxy string. It works by whitelisting
    certain charackters: 0-9a-zA-Z:/?=-;~+
    z%s://[a-zA-Z0-9.-]+:[0-9]+/*$FT)r6   r7   )Z
proxy_typeproxy
verify_strr   r   r   verify_proxy   s    r=   c             C   s   d}t j|| sdS dS )zk
    This verifies a proxy string. It works by whitelisting
    certain charackters: 0-9a-zA-Z:/?=-;~+
    z[a-zA-Z0-9.-:,]+FT)r6   r7   )r;   r<   r   r   r   verify_no_proxy   s    r>   )r   )r2   r6   r   r%   r   ZDBusExceptionr   r	   r
   r   r$   r)   r4   r-   r=   r>   r   r   r   r   <module>   s   
	.