-
Notifications
You must be signed in to change notification settings - Fork 0
/
auth.ps1
111 lines (91 loc) · 3.16 KB
/
auth.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<#
SonyTVRemote
Version 0.2
Description: Remote Control Sony TV with the powershell scripts.
Pavel Satin (c) 2016
#>
$returnStateOK = 0
$returnStateWarning = 1
$returnStateCritical = 2
$returnStateUnknown = 3
#Проверяем существует ли файл с ip адресом телевизора и читаем его
if ( Test-Path "tvip.cfg" ) {
$tv_ip = Get-Content "tvip.cfg"
} else {
$returnState = $returnStateCritical
# [System.Environment]::Exit($returnState)
Write-Host $returnState
Break
}
#Задаем названия и guid нащего устройства управления
$my_device = "openhab"
$my_nick = "HomeControl"
$my_uuid = [guid]::NewGuid()
#Проверяем были ли уже получены куки и если да завершаем работу
if ( Test-Path "auth_cookie" ) {
$returnState = $returnStateWarning
Write-Host "Файл auth_cookie уже существует, сначала удалите его."
# [System.Environment]::Exit($returnState)
Write-Host $returnState
Break
}
#Проверяем все параметры
if ( $tv_ip -eq "" -Or $my_nick -eq "" -Or $my_device -eq "" ) {
$returnState = $returnStateWarning
Write-Host "Отсутсвуют параметры для продолжения работы."
# [System.Environment]::Exit($returnState)
Write-Host $returnState
Break
}
#Формируем JSON запрос для регистрации устройства управления
$data = @"
{
"method" : "actRegister",
"params" : [{
"clientid" : "${my_nick}:${my_uuid}",
"nickname" : "${my_nick} ( ${my_device} )",
"level" : "private"
},[
{
"value" : "yes",
"function" :"WOL"
}]],
"id" : 8,
"version" : "1.0"
}
"@
$url = "http://${tv_ip}/sony/accessControl"
#Отправляем запрос на регистрацию
Invoke-WebRequest -Method Post -Uri $url -Body $data
#Запрашиваем ПИН код отобразившийся на телевизоре у пользователя
$tv_challenge = Read-Host "Enter PIN code"
#Формируем заголовок с ПИН кодом в base64
$encodedpin = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(":${tv_challenge}"))
$basicAuthValue = "Basic $encodedpin"
$Headers = @{
Authorization = $basicAuthValue
}
#Формируем JSON запрос с отправкой ПИН кода
$data2 = @"
{
"method" : "actRegister",
"params" : [{
"clientid" : "${my_nick}:${my_uuid}",
"nickname" : "${my_nick} ( ${my_device} )"
},[
{
"clientid" : "${my_nick}:${my_uuid}",
"nickname" : "${my_nick} ( ${my_device} )",
"value" : "yes",
"function" :"WOL"
}]],
"id" : 8,
"version" : "1.0"
}
"@
#Отправляем запрос с ПИН кодом
$Request = Invoke-WebRequest -Method Post -Headers $Headers -Uri $url -Body $data2
#Забираем куки из ответа и записываем в файл
$cookie = $Request.Headers["Set-Cookie"].Split(";")[0]
$cookie | Out-File "auth_cookie"