# <center>7^th^ August, 2019</center> ###### tags: `Daily Internship Documentation` --- ## 26^th^ Day of Internship ## Summary Today I simplify the Home page in Repairman App & attend a cyber security seminar. URL: * [**NTUST_RepairmanApp Github ver 2019.08.07](https://github.com/ianjoseph2204/NTUST_RepairmanApp/tree/111d2993e8304e68420c10d5fe90c699cf4e21c1) --- ## Cyber Security Seminar Result * Website about Google vulnerability: [google dorks](https://www.exploit-db.com/google-hacking-database?category=9) conter : robots.txt admin login.asp site:pk * SQL injection 1'or'1'='1 **Result**: userID canthave 特殊字元 94fbr 金鑰格式 * Website for IoT: shodan.io * 釣魚網站 DONT EVER TRUST URL 設一個網站會跟你要以下資訊 phone - whatsapp - databace - msgstore.db.crypt * ip loger/ click bate https://grabify.link/ * 測試連結檔案病毒 virultotal.com * 正面清除工具 https://www.deseat.me/ * Step to learn cyber Security: 1. hack 2. protocal 3. os 4. server 5. network --- ## Repairman App Documentation ### 1. Home Page #### 1.1 home.page.ts 1. Remove unused testing part from Home page. ```typescript= import {Component, ViewChild} from '@angular/core'; import {IonSlides, ModalController} from '@ionic/angular'; import {DetailPage} from '../detail/detail.page'; import {DispenserAPIService} from 'src/app/services/DispenserAPI/dispenser-api.service'; import {PreferenceManagerService} from 'src/app/services/PreferenceManager/preference-manager.service'; import {UnitConverter} from 'src/app/classes/UnitConverter/unit-converter'; import {StaticVariables} from '../../classes/StaticVariables/static-variables'; @Component({ selector: 'app-home', templateUrl: 'home.page.html', styleUrls: ['home.page.scss'], }) export class HomePage { // initial configuration for ion-slide slideOpts = { initialSlide: 1 }; // field variable doneMissionList = null; todayMissionList = null; futureMissionList = null; missionTodayDate: string; fragmentTitle: string; device_id: string; employee_id: string; loadReady: boolean = false; currentTime: string; // constant array dayNameArray = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; monthNameArray = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "Desember"]; fragmentTitleArray = ["What I've Done", "Today's Mission", "Future"]; constructor( public modalController: ModalController, private api: DispenserAPIService, private pref: PreferenceManagerService ) { } async ngOnInit() { // initialize this.loadReady = false; this.fragmentTitle = this.fragmentTitleArray[1]; this.currentTime = UnitConverter.convertDateToApiTimeFormat(new Date()); // dummy data this.device_id = "MA_03_01"; this.employee_id = "1"; let doneMissionRawData = await this.api.getAssignmentDone(this.device_id, this.employee_id); if (doneMissionRawData.length !== 0) { this.doneMissionList = await this.processDataDoneMission(doneMissionRawData); } else { this.doneMissionList = null; } let todayMissionRawData = await this.api.getAssignmentToday(this.device_id, this.employee_id, this.currentTime); if (todayMissionRawData.length !== 0) { this.todayMissionList = await this.processDataTodayMission(todayMissionRawData); } else { this.todayMissionList = null; } let futureMissionRawData = await this.api.getAssignmentNext(this.device_id, this.employee_id, this.currentTime); if (futureMissionRawData.length !== 0) { this.futureMissionList = await this.processDataFutureMission(futureMissionRawData); } else { this.futureMissionList = null; } this.loadReady = true; } /** * gETet the index of ion-slides when being * drag and changes slide occured by the user. Initial slide is 1 * and will change the value to up or down based on user does. * Also this function is to choose the title of the Home page where * is it Done, Today, or Future mission. * * Using @ViewChild class to get detect slides index from HTML * and IonSlides to use getActiveIndex function. */ @ViewChild('slides') slides: IonSlides; async slideChanges () { let index = await this.slides.getActiveIndex(); this.fragmentTitle = this.fragmentTitleArray[index]; } /** * Safe the Report Detail to Preference. */ async setDetailReportToPref(data: any){ await this.pref.setData(StaticVariables.KEY__DEVICE_ID, data['DeviceID']); await this.pref.setData(StaticVariables.KEY__DEVICE_TYPE, data['DeviceType']); await this.pref.setData(StaticVariables.KEY__EMPLOYEE_NAME, data['Repairman']); await this.pref.setData(StaticVariables.KEY__DEVICE_BUILDING_LOC, data['DeviceBuildingLocation']); await this.pref.setData(StaticVariables.KEY__DEVICE_PLACEMENT_LOC, data['DevicePlacementPosition']); await this.pref.setData(StaticVariables.KEY__PROBLEM_DESCRIPTION, data['ProblemDescription']); } /** * Display the modal for of every quest. */ async openDetail(missionNumber: number, isDoneMission: boolean) { let missionList = []; let getMission: any; if (isDoneMission) { for (let i = 0 ; i < this.doneMissionList.length ; i++) { let dataInsideDoneMissionList = this.doneMissionList[i]['Data']; for (let j = 0 ; j < dataInsideDoneMissionList.length ; j++) { missionList.push(dataInsideDoneMissionList[j]); } } } else { missionList = this.todayMissionList['Data']; } for (let i = 0 ; i < missionList.length ; i++) { if (missionList[i]['MissionNumber'] === missionNumber) { getMission = missionList[i]; break; } } await this.setDetailReportToPref(getMission); let buildNewMission = { 'Date': this.missionTodayDate, 'Data': getMission, 'DoneMission': isDoneMission }; const modal = await this.modalController.create({ component: DetailPage, componentProps: buildNewMission, cssClass: 'my-custom-modal-css' }); await modal.present(); } /** * Get year, month, and date from API in String format * and return each of them in JSON format. * @param dateString * @returns new array of json contains date divided by day, * month, and year */ static getDateDetail (dateString: string) { let splitDate = dateString.split(" "); let getDate = splitDate[0]; let splitDateDetails = getDate.split("-"); return { 'Year': splitDateDetails[0], 'Month': splitDateDetails[1], 'Day': splitDateDetails[2] }; } /** * Group by the quest order by the same date. * @param dataArray * @returns new array of json with grouping by date */ static groupByDate (dataArray: any) { // initial date, month, year based on first data let lastDate = dataArray[0]['dateDetails']['Day']; let lastMonth = dataArray[0]['dateDetails']['Month']; let lastYear = dataArray[0]['dateDetails']['Year']; // initialize data array let arrayData = []; let arrayPerDate = []; for (let i = 0 ; i < dataArray.length ; i++) { let currentData = dataArray[i]; let currentDate = currentData['dateDetails']['Day']; let currentMonth = currentData['dateDetails']['Month']; let currentYear = currentData['dateDetails']['Year']; if ( currentDate === lastDate && currentMonth === lastMonth && currentYear === lastYear ) { arrayPerDate.push({ "Data": currentData['Data'], "machineDetails": currentData['machineDetails'] }); } else { let dateDetails = dataArray[i-1]['dateDetails']; arrayData.push({ "Data": arrayPerDate, dateDetails }); arrayPerDate = []; arrayPerDate.push({ "Data": currentData['Data'], "machineDetails": currentData['machineDetails'] }); lastDate = dataArray[i]['dateDetails']['Day']; lastMonth = dataArray[i]['dateDetails']['Month']; lastYear = dataArray[i]['dateDetails']['Year']; } } // after loop when last data still not included let dateDetails = dataArray[dataArray.length - 1]['dateDetails']; arrayData.push({ "Data": arrayPerDate, dateDetails }); return arrayData; } /** * Add after processed time stamp data into JSON. * @param Data Array of processed data. */ addTimeToJSON (Data: any){ let newDate = UnitConverter.convertApiTimeToDate(Data[0]['MissionTime']); let newDayString = this.dayNameArray[newDate.getDay()]; let newMonthString = this.monthNameArray[newDate.getMonth()]; let DateString = newMonthString + " " + newDate.getDate(); return { "DateString": DateString , "DayString": newDayString , "Date": newDate , "Data": Data }; } /** * Add time stamp & machine detail to JSON. * @param dataJSON rawData from api. */ async addDetailsToJSON(dataJSON: any){ // add time stamp and machine details into json let dataAddOn = []; for (let i = 0 ; i < dataJSON.length ; i++) { let Data = dataJSON[i]; let dateDetails = HomePage.getDateDetail(Data['RepairCallTime']); let machineDetails = await this.api.getDispenserDetail(Data['Device_ID']); let newJson = { dateDetails, Data, machineDetails }; dataAddOn.push(newJson); } // grouping by date return dataAddOn; } /** * Process the data for Done Mission page. * @param dataJson The raw data for Done Mission page. */ async processDataDoneMission (dataJson: any) { // grouping by date let dataAddDetails = await this.addDetailsToJSON(dataJson); let dataGroupingDate = await HomePage.groupByDate(dataAddDetails); // processing data into new json form let resultArray = []; for (let i = 0 ; i < dataGroupingDate.length ; i++) { let getObject = dataGroupingDate[i]; let Data = []; for (let j = 0 ; j < getObject['Data'].length ; j++) { let getData = getObject['Data'][j]['Data']; let ReportImages = []; if (getData['Complete_Index'] === 3) { ReportImages.push({"ReportImage": UnitConverter.convertBase64ToImage(getData['Complete_Source'])}); ReportImages.push({"ReportImage": UnitConverter.convertBase64ToImage(getData['Complete_Source2'])}); ReportImages.push({"ReportImage": UnitConverter.convertBase64ToImage(getData['Complete_Source3'])}); } else if (getData['Complete_Index'] === 2) { ReportImages.push({"ReportImage": UnitConverter.convertBase64ToImage(getData['Complete_Source'])}); ReportImages.push({"ReportImage": UnitConverter.convertBase64ToImage(getData['Complete_Source2'])}); } else if (getData['Complete_Index'] === 1) { ReportImages.push({"ReportImage": UnitConverter.convertBase64ToImage(getData['Complete_Source'])}); } let MissionTimeOnlyHour = UnitConverter.convertDateStringToHourMinuteOnly(getData['RepairCallTime']); let newData = { "ClientName": "..." , "ClientAddress": "..." , "MissionTime": getData['RepairCallTime'] , "MissionTimeOnlyHour": MissionTimeOnlyHour , "ClientPhone": "..." , "ClientContactPerson": "..." , "DeviceID": "...", "DeviceType": getObject['Data'][j]['machineDetails']['Type'] , "DeviceNumber": "..." , "DeviceBuildingLocation": "...", "DevicePlacementPosition": "...", "ErrorCode": getData['ErrorType'] , "ProblemDescription": getData['Description'] , "NotificationTime": getData['NotifyTime'] , "Repairman": getData['Maintainer'] , "ClientNumber": "..." , "MissionNumber": getData['MissionNumber'] , "ReportIndex": getData['Complete_Index'] , "ReportImages": ReportImages }; Data.push(newData); } resultArray.push(this.addTimeToJSON(Data)); } return resultArray; } /** * Process the data for Today Mission page. * @param dataJson The raw data for Today Mission. */ async processDataTodayMission (dataJson: any) { let dataAddOn = await this.addDetailsToJSON(dataJson); // processing data into new json form let resultArray = []; for (let i = 0 ; i < dataAddOn.length ; i++) { let getObject = dataAddOn[i]; let MissionTimeOnlyHour = UnitConverter.convertDateStringToHourMinuteOnly(getObject['Data']['RepairCallTime']); let newData = { "ClientName": "..." , "ClientAddress": "..." , "MissionTime": getObject['Data']['RepairCallTime'] , "MissionTimeOnlyHour": MissionTimeOnlyHour , "ClientPhone": "..." , "ClientContactPerson": "..." , "DeviceID": "...", "DeviceType": getObject['machineDetails']['Type'] , "DeviceNumber": "..." , "DeviceBuildingLocation": "...", "DevicePlacementPosition": "...", "ErrorCode": getObject['Data']['ErrorType'] , "ProblemDescription": getObject['Data']['Description'] , "NotificationTime": getObject['Data']['NotifyTime'] , "Repairman": getObject['Data']['Maintainer'] , "ClientNumber": "..." , "MissionNumber": getObject['Data']['MissionNumber'] , }; resultArray.push(newData); } let newDate = this.monthNameArray[dataAddOn[0]['dateDetails']['Month'] - 1] + " " + dataAddOn[0]['dateDetails']['Day']; return { "Date": newDate, "Data": resultArray }; } /** * Process the data for Future Mission page. * @param dataJson The raw data for Future Mission. */ async processDataFutureMission(dataJson: any) { let dataAddDetails = await this.addDetailsToJSON(dataJson); let dataGroupingDate = await HomePage.groupByDate(dataAddDetails); // processing data into new json form let resultArray = []; for (let i = 0 ; i < dataGroupingDate.length ; i++) { let getObject = dataGroupingDate[i]; let Data = []; for (let j = 0 ; j < getObject['Data'].length ; j++) { let getData = getObject['Data'][j]['Data']; let MissionTimeOnlyHour = UnitConverter.convertDateStringToHourMinuteOnly(getData['RepairCallTime']); let newData = { "ClientName": "..." , "ClientAddress": "..." , "MissionTime": getData['RepairCallTime'] , "MissionTimeOnlyHour": MissionTimeOnlyHour , "ClientPhone": "..." , "ClientContactPerson": "..." , "DeviceID": "...", "DeviceType": getObject['Data'][j]['machineDetails']['Type'] , "DeviceNumber": "..." , "DeviceBuildingLocation": "...", "DevicePlacementPosition": "...", "ErrorCode": getData['ErrorType'] , "ProblemDescription": getData['Description'] , "NotificationTime": getData['NotifyTime'] , "Repairman": getData['Maintainer'] , "ClientNumber": "..." , "MissionNumber": getData['MissionNumber'] , }; Data.push(newData); } let newDate = UnitConverter.convertApiTimeToDate(Data[0]['MissionTime']); let newDayString = this.dayNameArray[newDate.getDay()]; let newMonthString = this.monthNameArray[newDate.getMonth()]; let DateString = newMonthString + " " + newDate.getDate(); let newData = { "DateString": DateString , "DayString": newDayString , "Date": newDate , "Data": Data }; resultArray.push(newData); } return resultArray; } } ```