View difference between Paste ID: 2L7jQZnK and DdSVM2Fx
SHOW: | | - or go back to the newest paste.
1
-- This is the first time setup so the computer will
2
-- Download all the required scripts.
3
local args = { ... }
4
running = true
5
elements = {}
6
-- Checking System Support
7
if not http then
8
  error "You Must Enable HTTP In Computer-craft Con-figs To Use The System!"
9
end
10
11
if not term.isColor() then
12
  error "This Computer Does Not Appear To Be Advanced, If It Is Advanced, Then Please Report This"
13
end
14
15
function create(text, width, height, x, y, tc, bg, otc, obg, func, toggle, secBG, secTC, secText, parent) --Return the new button so it can be called later to be drawn
16
	local new = {} --New Table To Store Details
17
	setmetatable( new, {__index = self} ) --New Metatable To Set Index To Self
18
	new.text = text or 'Nil Text' --Button Text
19
	new.width = width or #text + 2	--Button width
20
	if secText then new.secWidth = #secText + 2 else new.secWidth = #text + 2 end
21
	new.height = height or 1 --Button Height
22
	new.pad = pad or 2 --Padding Variable
23
	new.x = x or 1 --Button X Positioning
24
	new.y = y or 1 --Button Y Positioning
25
	new.tc = tc or colors.white --Button Text Color
26
	new.bg = bg or 128 --Button Background Color
27
	new.otc = otc or colors.white --Original Background Color
28
	new.obg = obg or 256 --Orignial Text Color
29
	new.func = func or nil --Function on click
30
	new.toggle = toggle or false --Whether the button should change state on click
31
	new.secondaryBackground = secBG	or bg --Toggle Background Color
32
	new.secondaryTextColor = secTC or tc --Toggle Text Color
33
	new.toggleState = 1 --Set toggle state to default
34
	new.secondaryText = secText or text
35
	new.visible = true
36
	new.parent = parent or 'Nil'
37
	return new
38
end
39
40
function tryClick(elementTable, x, y) --On Click Check Co-Ords, If match run the function assigned to the button
41
	if elementTable then
42
		for i, v in ipairs(elementTable) do
43
			if x >= v.x and x < v.x + v.width then
44
				if y == v.y then
45
					if v.visible then 
46
						if v.toggle then element.toggle(v) end
47
						if v.parent then
48
							for i, p in ipairs(elementTable) do
49
								if p.parent == v.parent then
50
									if p ~= v then p.toggleState = 1 else p.toggleState = 2 end
51
									draw(p)
52
								end
53
							end
54
						end
55
						if v.func then return(v.func) end
56
					end
57
				end
58
			end
59
		end
60
	end
61
end
62
63
function eraseCurrent(elem)
64
	if elem then
65
		if elem.toggleState == 2 then textSpec = elem.secondaryText widthSpec = elem.secWidth else textSpec = elem.text widthSpec = elem.width end 
66
		term.setCursorPos(elem.x, elem.y)
67
		term.setBackgroundColor(elem.obg)
68
		if elem.width and elem.secWidth then
69
			if elem.toggleState == 1 then
70
				write(string.rep(' ', elem.secWidth ))
71
			elseif elem.toggleState == 2 then
72
				write(string.rep(' ', elem.width ))
73
			end	
74
		end
75
	end
76
end
77
78
function draw(elem) --Visually Draw The Button Provided
79
	if elem then eraseCurrent(elem) end
80
	if elem.visible then
81
		if elem.toggleState == 2 then term.setTextColor(elem.secondaryTextColor) else term.setTextColor(elem.tc) end
82
		if elem.toggleState == 2 then term.setBackgroundColor(elem.secondaryBackground) else term.setBackgroundColor(elem.bg) end
83
		term.setCursorPos(elem.x, elem.y)
84
		write(string.rep(' ', elem.width )) --Create The Background Panel
85
		if elem.toggleState == 2 then textSpec = elem.secondaryText widthSpec = elem.secWidth else textSpec = elem.text widthSpec = elem.width end 
86
		term.setCursorPos(elem.x + (widthSpec - #textSpec)/2, elem.y) --Set The Cursor Pos In The Correct Padding Pos So The Text Appears In The Correct Location
87
		write(textSpec)--Print The Button Text On The Button
88
	else
89
		term.setTextColor(elem.otc)
90
		term.setBackgroundColor(elem.obg)
91
		term.setCursorPos(elem.x, elem.y)
92
		write(string.rep(' ', elem.width )) --Create The Background Panel
93
		term.setCursorPos(elem.x, elem.y) --Set The Cursor Pos In The Correct Padding Pos So The Text Appears In The Correct Location
94
	end
95
	term.setTextColor(elem.otc)
96
	term.setBackgroundColor(elem.obg)
97
end
98
99
function toggle(elem)
100
	if elem.toggle then
101
		if elem.toggleState == 1 then elem.toggleState = 2
102
		elseif elem.toggleState == 2 then elem.toggleState = 1 end
103
		draw(elem)
104
	end
105
end
106
107
function opacity(elem, state) --Set or toggle visibility of a button, if invisible the BG color will be what you assigned when creating the button
108
	if elem then
109
		if state ~= 't' then --Manual Adjust
110
			elem.visible = state
111
		else --Toggle Auto
112
			if elem.visible == true then elem.visible = false else elem.visible = true end
113
		end
114
		draw(elem)
115
	end
116
end
117
118
function btnInit(btnText, btnWidth, btnHeight, btnX, btnY, btnTC, btnBG, oTC, oBG, onClick, toggle, secBG, secTC, secText) --Function to create button
119
	local btn = create(btnText, btnWidth, btnHeight, btnX, btnY, btnTC, btnBG, oTC, oBG, onClick, toggle, secBG, secTC, secText) --Calls API to generate button
120
	table.insert(elements, btn) --Inserts into table so it can be scanned later
121
	opacity(btn, true) --Sets visibility to true
122
	return btn
123
end
124
125
function doClick(event, btn, x, y)
126
	functionToRun = tryClick(elements, x, y)
127
	if functionToRun then --Check click location
128
		functionToRun()
129
	end
130
end
131
132
function PrintCentered(text, y)
133
    term.setTextColor(1)
134
	local w, h = term.getSize()
135
    x = math.ceil(math.ceil((w / 2) - (#text / 2)), 0)+1
136
    term.setCursorPos(x, y)
137
	term.clearLine()
138
    write(text)
139
end
140
141
function initBackground(color) --Draw The Background In The Specified Color
142
  term.setBackgroundColor(color)
143
  term.clear()
144
end
145
146
function drawTitleBar()
147
  term.setBackgroundColor(128)
148
  term.setCursorPos(1,1)
149
  term.clearLine()
150
  term.setTextColor(colors.cyan)
151
  write "HbombOS Security Solutions"
152
  term.setCursorPos(1,2)
153
  term.clearLine()
154
  term.setTextColor(256)
155
  write "Installer"
156
  term.setTextColor(1)
157
end
158
initBackground(256)
159
drawTitleBar()
160
161
local function checkSite()
162
  local response = http.get("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/version")
163
  if response then
164
    return true
165
  else
166
    return false
167
  end
168
end
169
170
termX, termY = term.getSize()
171
172
function start()
173
  if args[1] == 'auto' then
174
	  return true
175
  else
176
	  term.setBackgroundColor(256)
177
	  PrintCentered('Welcome To The', 7)
178
	  PrintCentered('Hbomb Security Suite', 8)
179
	  PrintCentered('Install Wizzard', 9)
180
	  PrintCentered('BEWARE',13)
181
	  PrintCentered('All Files Already In Destination Will Be',14)
182
	  PrintCentered('Overwritten',15)	
183
	  yes = btnInit('Install', nil, nil, termX-#'Install'-2, termY-1, 1, colors.green, 1, 256, function() os.queueEvent('continue') end, false, nil, nil, nil, nil)
184
	  no = btnInit('Dont Install', nil, nil, 2, termY-1, 1, colors.red, 1, 256, function() os.reboot() end, false, nil, nil, nil, nil)
185
	  while true do
186
		event, btn, x, y = os.pullEvent()
187
		if event == "mouse_click" then
188
			doClick(event, btn, x, y)
189
		elseif event == "continue" then
190
			break
191
		end
192
	  end
193
	  return true
194
  end
195
end
196
197
function open()
198
start()
199
opacity(yes ,false)
200
opacity(no ,false)
201
term.clear()
202
drawTitleBar()
203
term.setBackgroundColor(256)
204
term.setTextColor(1)
205
  PrintCentered("Starting Download", 6)
206
  PrintCentered("Establishing Connection With Github", 8)
207
  PrintCentered("Reading GitHub Repository", 18)
208
  if not checkSite() then
209
    PrintCentered("The GitHub Version File Does Not", 18)
210
    PrintCentered("Appear To Be At The Destination URL", 19)
211
	term.setTextColor(colors.red)
212
	PrintCentered("The Installer Has Encountered An Issue!", 2)
213
	return false
214
  end
215
  PrintCentered("Connection With Github Established", 8)
216
  PrintCentered("GitHub Repository Located", 18)
217
  sleep(1)
218
  PrintCentered("GitHub Repository Connection Established", 18)
219
  sleep(0)
220
  PrintCentered("Downloading And Installing Files", 8)
221
  PrintCentered("Starting Download Sequence", 18)
222
  sleep(0.1)
223
  return true
224
end
225
226
function downloadFiles(getUrl, toPath)
227
term.setTextColor(1)
228
term.setBackgroundColor(256)
229
-- Download the files and scripts from github
230
  for i = 1, 3 do
231
    local response = http.get(getUrl)
232
	if response then
233
	  data = response.readAll()
234
	      if fs.exists(toPath) then
235
		  fs.delete(toPath)
236
		  PrintCentered ("Delete: "..toPath, 19)
237
		end
238
		if toPath then
239
		  if fs.exists(toPath) then fs.delete(toPath) end
240
		  local file = fs.open(toPath, "w")
241
		  file.write(data)
242
		  file.close()
243
		  PrintCentered ("Download: "..toPath, 19)
244
		  return true
245
		else
246
		  print "We Believe The Path Specified Is Invalid, Report If Not Your Fault"
247
		  sleep(3)
248
		  os.shutdown()
249
		end
250
	else
251
	  print ("The File Or Files At: "..getUrl.." Do Not Appear To Exist! Please Report This Issue On Forums Or Through GitHub")
252
	  sleep(3)
253
	  os.shutdown()
254
	end
255
  end
256
  print ("Failed To Download The File From URL: "..getUrl.." Please try again later, If this is the 2nd time you've seen this, then report it on the fourms")
257
  sleep(3)
258
  os.shutdown()
259
end
260
261
function createDirectory() --Used to create directories for version 1.5 and below
262
  fs.makeDir('/systemFiles/')
263
  fs.makeDir('/systemFiles/Images/BootLogos/')
264
  fs.makeDir('/systemFiles/Images/Update/')
265
  fs.makeDir('/systemFiles/Images/progressBar/')
266
  fs.makeDir('/systemFiles/Install/')
267
  fs.makeDir('/api/')
268
  fs.makeDir('/Documentation/')
269
  fs.makeDir('/systemFiles/Programs/')
270
  fs.makeDir('/systemFiles/Security/')
271
end
272
273
function thanks()
274
  term.clear()
275
  drawTitleBar()
276
  term.setBackgroundColor(256)
277
  term.setTextColor(1)
278
  PrintCentered ("Thank You For Downloading And Installing The", 6)
279
  PrintCentered ("Latest Version Of My Security Suite", 7)
280
  PrintCentered ("Report Any Issues You Come Across", 8)
281
  local f = fs.open('version', 'r')
282
  currVer = f.readLine()
283
  f.close()
284
  PrintCentered ("You Are Now Running The Latest Version: "..currVer, 10)
285
  PrintCentered ("Hope You Enjoy, Click Anywhere To Get Started", 19)
286
  if args[1] ~= 'auto' then os.pullEvent('mouse_click') else return end
287
  os.reboot()
288
end
289
290
function download() --Download Files From GitHub And Install Them On The Local Computer
291
term.setBackgroundColor(256)
292
PrintCentered ("Creating Directories... Please Wait", 19)
293
sleep(0)
294
createDirectory() --Creates The Directories To Stop The Program From Crashing
295
PrintCentered ("Downloading Scripts... Please Wait", 19)
296
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/startup", "startup")
297
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/version", "version")
298
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Install/installer", "systemFiles/Install/installer")
299
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Install/updater", "systemFiles/Install/updater")
300
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Install/setup", "systemFiles/Install/setup")
301
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Images/BootLogos/boot0.nfp", "systemFiles/Images/BootLogos/boot0.nfp")
302
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Images/BootLogos/boot1.nfp", "systemFiles/Images/BootLogos/boot1.nfp")
303
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Images/BootLogos/boot2.nfp", "systemFiles/Images/BootLogos/boot2.nfp")
304
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Images/BootLogos/boot3.nfp", "systemFiles/Images/BootLogos/boot3.nfp")
305
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Images/BootLogos/boot4.nfp", "systemFiles/Images/BootLogos/boot4.nfp")
306
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Images/BootLogos/boot5.nfp", "systemFiles/Images/BootLogos/boot5.nfp")
307
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Images/BootLogos/boot6.nfp", "systemFiles/Images/BootLogos/boot6.nfp")
308
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Images/BootLogos/boot7.nfp", "systemFiles/Images/BootLogos/boot7.nfp")
309
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Images/Update/update1.nfp", "systemFiles/Images/Update/update1.nfp")
310
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Images/Update/update2.nfp", "systemFiles/Images/Update/update2.nfp")
311
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Images/Update/update3.nfp", "systemFiles/Images/Update/update3.nfp")
312
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Images/progressBar/load0.nfp", "systemFiles/Images/progressBar/load0.nfp")
313
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Images/progressBar/load1.nfp", "systemFiles/Images/progressBar/load1.nfp")
314
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Images/progressBar/load2.nfp", "systemFiles/Images/progressBar/load2.nfp")
315
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Images/progressBar/load3.nfp", "systemFiles/Images/progressBar/load3.nfp")
316
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Images/progressBar/load4.nfp", "systemFiles/Images/progressBar/load4.nfp")
317
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Images/progressBar/load5.nfp", "systemFiles/Images/progressBar/load5.nfp")
318
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Images/progressBar/load6.nfp", "systemFiles/Images/progressBar/load6.nfp")
319
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Images/progressBar/load7.nfp", "systemFiles/Images/progressBar/load7.nfp")
320
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Images/progressBar/load8.nfp", "systemFiles/Images/progressBar/load8.nfp")
321
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/api/download", "/api/download")
322
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/api/systemCheck", "/api/systemCheck")
323
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/api/update", "/api/update")
324
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/api/printer", "/api/printer")
325
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/api/titleBar", "/api/titleBar")
326
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/api/LogFile", "/api/LogFile")
327
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/api/element", "/api/element")
328
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/api/uInput", "/api/uInput")
329
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/api/errora", "/api/errora")
330
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Programs/dualKey", "/systemFiles/Programs/dualKey")
331
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Programs/keycard", "/systemFiles/Programs/keycard")
332
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Programs/keycardDual", "/systemFiles/Programs/keycardDual")
333
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Programs/pin", "/systemFiles/Programs/pin")
334
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Programs/rangeLock", "/systemFiles/Programs/rangeLock")
335
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Programs/reactor", "/systemFiles/Programs/reactor")
336
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Programs/OpenPDetect", "/systemFiles/Programs/OpenPDetect")
337
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/systemFiles/Programs/remoteControl.lua", "/systemFiles/Programs/remoteControl.lua")
338
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/README", "/Documentation/README")
339
downloadFiles("https://raw.githubusercontent.com/hbomb79/securitySystemPro/master/LICENSE", "/Documentation/LICENSE")
340
PrintCentered("Complete", 19)
341
thanks()
342
return
343
end
344
345
if open() then 
346
  download()
347
  return
348
else
349
  sleep(3)
350
  os.reboot()
351
end