-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwtool1cd.os
144 lines (86 loc) · 4.83 KB
/
wtool1cd.os
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#!C:/home/dmpas/workspace/onescript/src/oscript/bin/Debug/oscript.exe -cgi
//#!C:/opt/oscript/bin/oscript.exe -cgi
//#!oscript -cgi
#Использовать tool1cd
#Использовать tempfiles
Перем ПараметрыЗапроса;
Перем ПутьКБазе;
Процедура ПодготовитьДанныеИзВходящегоЗапроса()
ПараметрыЗапроса = Новый Соответствие;
Для Каждого мКЗ Из ВебЗапрос.GET Цикл
Если мКЗ.Значение = Неопределено Тогда
// Возникает в случаях, если путь передан как /some/thing?flag1&flag2&flag3 :
// Ключ flag1 присутствует, но ВебЗапрос.GET["flag1"] = Неопределено
ПараметрыЗапроса.Вставить(мКЗ.Ключ, Истина);
Иначе
ПараметрыЗапроса.Вставить(мКЗ.Ключ, мКЗ.Значение);
КонецЕсли
КонецЦикла;
ПутьКБазе = ВебЗапрос.ENV["PATH_TRANSLATED"];
КонецПроцедуры
Процедура ОшибкаЗапроса(Знач КодОшибки, Знач ТекстОшибки)
ВывестиЗаголовок("Status", КодОшибки + " " + ТекстОшибки);
ЗавершитьРаботу(0);
КонецПроцедуры
Процедура ВыполнитьОперацию(Знач ИмяОперации)
Если ИмяОперации = "drc" Тогда
// Отдать версию конфигурации
Версия = ПараметрыЗапроса.Получить("ver");
Если Версия = Неопределено Тогда
Версия = 0;
Иначе
Попытка
Версия = Число(Версия);
Исключение
ОшибкаЗапроса("400", "Неверно указана версия хранилища");
Возврат;
КонецПопытки;
КонецЕсли;
ИмяФайла = ПолучитьИмяВременногоФайла("cf");
ЧтениеХранилища = Новый ЧтениеХранилищаКонфигурации;
ЧтениеХранилища.ВыгрузитьВерсиюКонфигурации(ПутьКБазе, ИмяФайла, Версия);
ОтправитьФайл(ИмяФайла, "v" + Версия + ".cf");
УдалитьФайлы(ИмяФайла);
ИначеЕсли ИмяОперации = "ex" Тогда
ИмяТаблицы = ПараметрыЗапроса["name"];
Если Не ЗначениеЗаполнено(ИмяТаблицы) Тогда
ОшибкаЗапроса("400", "Не указано имя таблицы");
Возврат;
КонецЕсли;
ЧтениеТаблиц = Новый ЧтениеТаблицФайловойБазыДанных;
ЧтениеТаблиц.ОткрытьФайл(ПутьКБазе);
Попытка
ФайлыТаблиц = ЧтениеТаблиц.ВыгрузитьТаблицыВXML(ИмяТаблицы);
Исключение
ОшибкаЗапроса("404", "Таблица не найдена");
Возврат;
КонецПопытки;
ИмяФайлаТаблицы = ФайлыТаблиц[ИмяТаблицы];
ОтправитьФайл(ИмяФайлаТаблицы);
ЧтениеТаблиц.ЗакрытьФайл();
КонецЕсли;
КонецПроцедуры
КаталогВременныхФайлов = "C:\temp\"; // TODO: Разобраться, почему каталог временных файлов отправляет нас в C:\Windows
ВывестиЗаголовок("Content-type", "text/plain");
ВывестиЗаголовок("Content-encoding", "utf-8");
ПодготовитьДанныеИзВходящегоЗапроса();
ИзвестныеКлючи = СтрРазделить("ex,drc", ",");
Операция = Неопределено;
Для Каждого мКлюч Из ИзвестныеКлючи Цикл
Если ПараметрыЗапроса.Получить(мКлюч) = Истина Тогда
Операция = мКлюч;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(Операция) Тогда
ВременныеФайлы.БазовыйКаталог = КаталогВременныхФайлов;
Попытка
ВыполнитьОперацию(Операция);
Исключение
ВывестиЗаголовок("Status", "500 Unknown command");
Сообщить(ОписаниеОшибки());
КонецПопытки;
ВременныеФайлы.Удалить();
Иначе
ВывестиЗаголовок("Status", "400 Unknown command");
КонецЕсли;