First commit

This commit is contained in:
Yorick Barbanneau 2016-04-05 16:52:05 +02:00
commit ef4ee4c38a
11 changed files with 496 additions and 0 deletions

6
.gitattributes vendored Normal file
View file

@ -0,0 +1,6 @@
*.ps1 diff
*.cmd diff
*.ini diff
*.txt diff
*.svg diff
*.conf diff

111
assets/avatar.svg Normal file
View file

@ -0,0 +1,111 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="90"
height="90"
viewBox="0 0 90.000001 90.000001"
id="svg2"
version="1.1"
inkscape:version="0.91 r13725"
sodipodi:docname="avatar.svg"
inkscape:export-filename="/home/ephase/Documents/Projets/Code/powershell.PersonnalHelpdesk/res/avatar.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<defs
id="defs4">
<linearGradient
inkscape:collect="always"
id="linearGradient4175">
<stop
style="stop-color:#17bbe1;stop-opacity:1;"
offset="0"
id="stop4177" />
<stop
style="stop-color:#0f768f;stop-opacity:1"
offset="1"
id="stop4179" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4175"
id="linearGradient4181"
x1="109.04489"
y1="954.77094"
x2="15.805369"
y2="1048.4626"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(0,-8)" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.959798"
inkscape:cx="46.539868"
inkscape:cy="50.599728"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
borderlayer="true"
inkscape:showpageshadow="false"
inkscape:snap-page="true"
inkscape:snap-bbox="true"
inkscape:bbox-paths="true"
inkscape:bbox-nodes="true"
inkscape:snap-bbox-edge-midpoints="true"
inkscape:snap-bbox-midpoints="true"
inkscape:window-width="1280"
inkscape:window-height="736"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:snap-global="false" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-962.36216)">
<path
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:url(#linearGradient4181);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:8.69999981;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.63492067;marker:none;enable-background:accumulate"
d="m 45.271484,970.44224 a 26.078413,26.078413 0 0 0 -26.080078,26.07816 26.078413,26.078413 0 0 0 26.080078,26.0781 26.078413,26.078413 0 0 0 26.078125,-26.0781 26.078413,26.078413 0 0 0 -26.078125,-26.07816 z m -11.1875,52.57426 c -14.92337,0 -27.7311761,8.7128 -33.6542965,21.3457 l 89.1406245,0 c -5.923727,-12.6329 -18.732879,-21.3457 -33.65625,-21.3457 l -21.830078,0 z"
id="rect3336"
inkscape:connector-curvature="0" />
<path
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#f09900;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.0999999;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
d="m 45.029297,967.0731 0,0.002 c -8.974094,-0.0572 -17.958489,2.41603 -24.757812,7.54492 -6.33265,4.77687 -10.7201773,11.92006 -11.2558597,21.22848 -0.7220794,0.1376 -1.265625,0.768 -1.265625,1.5312 0,0.8646 0.6978627,1.5625 1.5625,1.5625 l 0.7792967,0 a 8.8893294,8.8893294 0 0 0 4.064453,5.8496 l 9.31836,14.7248 12.261718,0 c 0.2548,0.614 0.859817,1.0429 1.56836,1.0429 l 3.21289,0 c 0.939822,0 1.697266,-0.7555 1.697266,-1.6954 0,-0.9398 -0.757444,-1.6973 -1.697266,-1.6973 l -3.21289,0 c -0.747133,0 -1.371913,0.482 -1.59961,1.1504 l -11.570312,0 -7.982422,-12.6152 a 8.8893294,8.8893294 0 0 0 0.916016,0.2441 c 0.360348,0.7518 1.123191,1.2735 2.015625,1.2735 1.240569,0 2.238281,-0.9997 2.238281,-2.2403 l 0,-15.87881 c 0,-1.24057 -0.997712,-2.23828 -2.238281,-2.23828 -1.058662,0 -1.93581,0.72865 -2.171875,1.71289 a 8.8893294,8.8893294 0 0 0 -5.042969,3.14649 c 1.359035,-6.55124 4.923396,-11.59878 9.787109,-15.26758 6.302239,-4.75393 14.820077,-7.13646 23.359375,-7.08203 8.539299,0.0544 17.073626,2.54598 23.404297,7.35351 4.86251,3.69261 8.442762,8.71559 9.845703,15.16016 a 8.8893294,8.8893294 0 0 0 -5.177734,-3.31055 c -0.236065,-0.98424 -1.11126,-1.71289 -2.169922,-1.71289 -1.240569,0 -2.240234,0.99771 -2.240234,2.23828 l 0,15.87881 c 0,1.2406 0.999665,2.2403 2.240234,2.2403 0.892434,0 1.653324,-0.5217 2.013672,-1.2735 a 8.8893294,8.8893294 0 0 0 6.978515,-7.0039 l 0.779297,0 c 0.864638,0 1.560547,-0.6979 1.560547,-1.5625 0,-0.7061 -0.468019,-1.2925 -1.109375,-1.4863 -0.6167,-9.12704 -5.017811,-16.20638 -11.330078,-20.99994 -6.815534,-5.17574 -15.807155,-7.76312 -24.78125,-7.82031 z"
id="path4147"
inkscape:connector-curvature="0" />
<rect
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.20000005;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="rect4187"
width="90"
height="24.496199"
x="0"
y="1027.866" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.9 KiB

148
buildscript.ps1 Normal file
View file

@ -0,0 +1,148 @@
param([string]$appconf="", [string]$hotliners="")
#PS build script for PersonnalHelpDesk
#
#Version 0.1
$VERSION = "0.1"
$WORKING_DIR = Split-Path -path $($MyInvocation.MyCommand.Definition)
$BUILD_DIR = $WORKING_DIR + "\build"
$UTILS_DIR = $WORKING_DIR + "\utils"
$TMP_DIR = $WORKING_DIR + "\tmp"
$SRC_DIR = $WORKING_DIR + "\src"
$PS_EXEC_NAME = "launcher.exe"
$FINAL_EXEC_NAME = "helpdesk.exe"
$VNC_URL = "http://www.uvnc.com/component/jdownloads/finish/5-bins/295-ultravnc-1210-all-bin-zip/0.html"
$PS2EXE_URL = "https://gallery.technet.microsoft.com/PS2EXE-Convert-PowerShell-9e4e07f1/file/134627/1/"
$7Z_URL = "http://www.7-zip.org/a/7za920.zip"
$7ZSFX_URL = "http://7zsfx.info/files/7zsd_160_2712.7z"
function create_dir {
param([string]$dir)
if (Test-Path $dir){
return $false
}
New-Item $dir -type directory | Out-Null
return $true
}
function extract{
param(
[string]$dest_path,
[string]$zip_path
)
$shell = new-object -com Shell.Application
Try {
$shell.NameSpace($dest_path).CopyHere($zip_path) | Out-Null
Write-Host -ForegroundColor Green "done"
}
Catch {
Write-Host -ForegroundColor Red " Error "
}
}
function download_util{
param(
[string]$util,
[string]$source,
[string]$file_to_extract
)
create_dir "$UTILS_DIR\$VERSION\$util"
Write-Host -ForegroundColor white -NoNewline "Downloading $util please wait ... "
Try {
(New-Object System.Net.WebClient).DownloadFile($source,"$TMP_DIR\$util.zip")
}
Catch {
Write-Host -ForegroundColor Red " Error bad URL? "
return
}
Write-Host -ForegroundColor Green -NoNewline "done"
if ($file_to_extract -ne "false"){
Write-Host -ForegroundColor white -NoNewLine " ... extracting : "
extract "$UTILS_DIR\$VERSION\$util\" "$TMP_DIR\$util.zip\$file_to_extract"
}
}
if ( -Not $appconf -Or -Not (Test-Path $appconf) ){
Write-Host -ForegroundColor White "Application configuration file $appconf not found, using default"
$appconf = "$SRC_DIR\res\conf\app.conf.ps1"
}
if ( -Not $hotliners -Or -Not (Test-Path $hotliners) ){
Write-Host -ForegroundColor White "Application configuration file $hotliners not found, using default"
$hotliners = "$SRC_DIR\res\conf\hotliners.conf.ps1"
}
if (-not (create_dir $BUILD_DIR)){
Remove-Item $BUILD_DIR\* -recurse
}
create_dir $UTILS_DIR | Out-Null
create_dir $TMP_DIR | Out-Null
if ( create_dir $UTILS_DIR\$VERSION ) {
#then download VNC + PS2EXE
download_util "vnc" $VNC_URL "win7\winvnc.exe"
download_util "ps2exe" $PS2EXE_URL "*"
download_util "7z" $7Z_URL "7za.exe"
(New-Object System.Net.WebClient).DownloadFile($7ZSFX_URL,"$TMP_DIR\7zsd.7z")
cmd -ArgumentList @("/c", "$UTILS_DIR/$VERSION/7z/7za.exe", "e", "$TMP_DIR\7zsd.7z", "7zsd.sfx","-o$UTILS_DIR/$VERSION/", "-y")
}
#applying personnal parameters
$patched_source = @()
Get-Content $SRC_DIR\helpdesk.ps1 | ForEach-Object {
switch ($_) {
{$_ -match "app.conf.ps1"} {
ForEach ($line in Get-Content $appconf) {
$patched_source += $line
}
break
}
{$_ -match "hotliners.conf.ps1"} {
ForEach ($line in Get-Content $hotliners){
$patched_source += $line
}
break
}
default{$patched_source += $_}
}
}
$patched_source | Set-Content $BUILD_DIR\helpdesk.ps1 -Encoding "UTF8"
# Build executable from our PS script
Invoke-Expression "$UTILS_DIR\$VERSION\ps2exe\ps2exe.ps1 $BUILD_DIR\helpdesk.ps1 $BUILD_DIR\$PS_EXEC_NAME -noconsole -nested"
Remove-Item $BUILD_DIR\$PS_EXEC_NAME.config
Set-Location $WORKING_DIR
# Copy all file to build Dir
create_dir $BUILD_DIR\res\ | Out-Null
Copy-Item $SRC_DIR\UltraVNC.ini $BUILD_DIR\res\
Copy-Item $SRC_DIR\res\* $BUILD_DIR\res\
Copy-Item $UTILS_DIR\$VERSION\vnc\winvnc.exe $BUILD_DIR\res\
create_dir $BUILD_DIR\res\conf\ | Out-Null
if ($appconf -ne "") {
$txtfile = Get-Content $appconf
}
else {
$txtfile = Get-Content $BUILD_DIR\res\conf\app.conf.ps1
}
if ($hotliners -ne "") {
Copy-Item $hotliners $BUILD_DIR\res\conf\hotliners.conf.ps1
}
else {
Copy-Item $SRC_DIR\res\conf\hotliners.conf.ps1 $BUILD_DIR\res\conf\hotliners.conf.ps1
}
#Zip all elements
Set-Location $BUILD_DIR
cmd -ArgumentList @("/c", "$UTILS_DIR/$VERSION/7z/7za.exe", "a", "installer.7z", "*")
#copy file for autoSFX archive.
Copy-Item $WORKING_DIR\src\config.txt $BUILD_DIR\
Copy-Item $UTILS_DIR\$VERSION\7zsd.sfx $BUILD_DIR\
#concatenate binary files for creating ou auto-SFX file
cmd -ArgumentList @("/c", "copy", "/b","7zsd.sfx", "+", "config.txt", "+", "installer.7z", $FINAL_EXEC_NAME)
#Remove-Item $BUILD_DIR -recurse

12
make.cmd Normal file
View file

@ -0,0 +1,12 @@
@echo off
REM Make.cmd
REM --------
REM Helpdesk.exe build script for PernonnalHelpdesk
cd /d "%~dp0"
echo .
echo Launch build powershell script ...
powershell -ExecutionPolicy Bypass "%~dp0buildscript.ps1"
REM Exemple of build script with personnal parameters
REM powershell -ExecutionPolicy Bypass "%~dp0buildscript.ps1" -appconf ".\personnal_conf\app.conf.ps1" -hotliners ".\personnal_conf\hotliners.conf.ps1"
PAUSE

69
src/UltraVNC.ini Normal file
View file

@ -0,0 +1,69 @@
[Permissions]
[admin]
FileTransferEnabled=1
FTUserImpersonation=1
BlankMonitorEnabled=1
BlankInputsOnly=0
DefaultScale=1
UseDSMPlugin=0
DSMPlugin=No Plugin Detected
primary=1
secondary=0
SocketConnect=0
HTTPConnect=0
AutoPortSelect=1
InputsEnabled=1
LocalInputsDisabled=0
IdleTimeout=0
EnableJapInput=0
QuerySetting=2
QueryTimeout=10
QueryAccept=0
LockSetting=0
RemoveWallpaper=1
RemoveEffects=0
RemoveFontSmoothing=0
RemoveAero=1
DebugMode=0
Avilog=0
path=C:\Users\tech\Desktop\win7
DebugLevel=10
AllowLoopback=1
LoopbackOnly=0
AllowShutdown=1
AllowProperties=1
AllowEditClients=1
FileTransferTimeout=30
KeepAliveInterval=5
IdleInputTimeout=0
DisableTrayIcon=0
rdpmode=0
MSLogonRequired=0
NewMSLogon=0
ConnectPriority=0
UseRegistry=0
kickrdp=0
service_commandline=
AuthRequired=1
AuthHosts=
PortNumber=5900
HTTPPortNumber=5800
QueryIfNoLogon=0
clearconsole=0
accept_reject_mesg=
[UltraVNC]
passwd=D1495AE77835039EA9
passwd2=47F0AE72FB5DE16CFC
[poll]
TurboMode=1
PollUnderCursor=0
PollForeground=0
PollFullScreen=1
OnlyPollConsole=0
OnlyPollOnEvent=0
EnableDriver=0
EnableHook=1
EnableVirtual=0
SingleWindow=0
SingleWindowName=
MaxCpu=40

6
src/config.txt Normal file
View file

@ -0,0 +1,6 @@
;!@Install@!UTF-8!
Title="ACAQB Helpdesk V0.1A"
GUIMode="1"
BeginPrompt="Vous allez demander une prise de contrôle, voulez-vous continuer?"
ExecuteFile="launcher.exe"
;!@InstallEnd@!

123
src/helpdesk.ps1 Normal file
View file

@ -0,0 +1,123 @@

[reflection.assembly]::LoadWithPartialName( "System.Windows.Forms") | Out-Null
#$ErrorActionPreference = "SilentlyContinue"
$VERSION = "0.1"
. .\res\conf\app.conf.ps1
. .\res\conf\hotliners.conf.ps1
#Variables
$buttons = @()
$Global:vnc_process = @()
function start_vnc_session {
param([string]$port)
$Global:vnc_process = Start-Process res\$VNC_EXEC -ArgumentList ("-connect","$VNC_CLIENT_ADDR::$port","-run") -PassThru
$label.text = $MSG_VNC_STARTED
}
function disable_buttons {
$buttons | ForEach {
$_.Enabled = $false
}
}
if ( -Not (Test-Path res\$VNC_EXEC)){
Write-Host -ForegroundColor Red "Error : VNC executable not found, exiting"
break
}
$hotliners | Foreach {
$current_btn = New-Object Windows.Forms.Button
$current_btn.text = $_.name
$current_btn.Tag = @{port=$_.port} #Tag=@{Script=$script}
$current_btn.height = $DEFAULT_BTN_HEIGHT
$current_btn.Width = $DEFAULT_BTN_WIDTH
$current_btn.FlatStyle = "Flat"
if ($USE_AVATAR) {
$current_btn.TextAlign = $HOTLINER_BTN_TEXEALIGN
$current_btn.ForeColor = $HOTLINER_BTN_FORECOLOR
if ($_.img){
$file = Get-Item($_.img)
if (Test-Path $_.img ){
$file = Get-Item($_.img)
}
else{
$file = Get-Item("res\avatar.png")
Write-Host -ForegroundColor Yellow "$($_.img) not found, using default image for $($_.name)"
}
}
else {
$file = Get-Item("res\avatar.png")
}
Try {
$current_btn.BackgroundImage = [system.drawing.image]::FromFile($file)
}
Catch { Write-Host -ForegroundColor Red "Error : can't load $file, is this an image?" }
}
$current_btn.add_click({
start_vnc_session $this.Tag.port
disable_buttons
})
$buttons += $current_btn
}
# Application window definition
$window= New-Object Windows.Forms.Form
$window.text = $WINDOW_TITLE
$window.autosize = $true
$window.AutoSizeMode = "GrowAndShrink"
$window.FormBorderStyle = "FixedDialog"
$window.ControlBox = $false
$window.Padding = $DEFAULT_MARGIN
$window.StartPosition = "CenterScreen"
$window.icon = "res\icon.ico"
# ControlBox containing label and Buttons
$ctrlbox = New-Object Windows.Forms.GroupBox
$ctrlbox.Location = New-Object Drawing.Point $DEFAULT_MARGIN,$DEFAULT_MARGIN
$ctrlbox.AutoSize=$true
$ctrlbox.Width = $DEFAULT_WINDOW_WIDTH
$ctrlbox.Height = $DEFAULT_MARGIN
$window.controls.add($ctrlbox)
$xpos = $DEFAULT_MARGIN
$ypos = $DEFAULT_MARGIN * 2
$label = New-Object Windows.Forms.Label
$label.Height = 40
$label.Width = $DEFAULT_WINDOW_WIDTH - $DEFAULT_MARGIN * 2
$label.Location = New-Object Drawing.Point $xpos,$ypos
$label.text = $MSG_HOME
$ctrlbox.controls.add($label)
$ypos = $label.Bottom + $DEFAULT_MARGIN
$xpos = $DEFAULT_MARGIN
$buttons | ForEach {
$t = $xpos + $_.Width + $DEFAULT_MARGIN
if ($t -ge $DEFAULT_WINDOW_WIDTH) {
$ypos += ( $DEFAULT_BTN_HEIGHT + $DEFAULT_MARGIN )
$xpos = $DEFAULT_MARGIN
}
$_.Location = New-Object Drawing.Point $xpos,$ypos
$xpos += $_.Width + $DEFAULT_MARGIN
$ctrlbox.controls.add($_)
}
$btnClose = New-Object Windows.Forms.Button
$btnClose.text = "Quitter"
$btnClose.Top = $ctrlbox.Bottom + $DEFAULT_MARGIN
$btnClose.Left = $ctrlbox.Right - $btnClose.Width
$btnClose.BackColor = "#ffaa99"
$btnClose.FlatStyle = "Flat"
$window.controls.add($btnClose)
$btnClose.add_click({
if ($Global:vnc_process) {
$Global:vnc_process | Stop-Process
}
$window.hide()
})
$window.ShowDialog() | Out-Null

BIN
src/res/avatar.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

17
src/res/conf/app.conf.ps1 Normal file
View file

@ -0,0 +1,17 @@
$VNC_EXEC = "winvnc.exe"
$VNC_CLIENT_ADDR = ""
#Textual information
$WINDOW_TITLE = "Robco Personnal Helpdesk v.$VERSION"
$MSG_VNC_STARTED = "Hotliner get the control, please leave keyboard and mouse"
$MSG_HOME = "Welcome to our helpdesk program, which technician do you have on phone?"
# Interface Constants
$DEFAULT_MARGIN = 10
$DEFAULT_WINDOW_WIDTH = 300
$DEFAULT_WINDOW_HEIGHT = 0
$DEFAULT_BTN_HEIGHT = 90
$DEFAULT_BTN_WIDTH = 90
$USE_AVATAR = 1
$HOTLINER_BTN_FORECOLOR = "#FFFFFF"
$HOTLINER_BTN_TEXEALIGN = "BottomCenter"

View file

@ -0,0 +1,4 @@
$hotliners = (
@{name = "John Doe"; port = "5500"; img = ""},
@{name = "Marty Mc Fly"; port = "5501"; img = ""}
)

BIN
src/res/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB