Showing
25 changed files
with
3607 additions
and
64 deletions
... | @@ -4,8 +4,10 @@ | ... | @@ -4,8 +4,10 @@ |
4 | <component name="GradleSettings"> | 4 | <component name="GradleSettings"> |
5 | <option name="linkedExternalProjectsSettings"> | 5 | <option name="linkedExternalProjectsSettings"> |
6 | <GradleProjectSettings> | 6 | <GradleProjectSettings> |
7 | + <compositeConfiguration> | ||
8 | + <compositeBuild compositeDefinitionSource="SCRIPT" /> | ||
9 | + </compositeConfiguration> | ||
7 | <option name="delegatedBuild" value="false" /> | 10 | <option name="delegatedBuild" value="false" /> |
8 | - <option name="testRunner" value="PLATFORM" /> | ||
9 | <option name="distributionType" value="DEFAULT_WRAPPED" /> | 11 | <option name="distributionType" value="DEFAULT_WRAPPED" /> |
10 | <option name="externalProjectPath" value="$PROJECT_DIR$" /> | 12 | <option name="externalProjectPath" value="$PROJECT_DIR$" /> |
11 | <option name="modules"> | 13 | <option name="modules"> |
... | @@ -15,6 +17,7 @@ | ... | @@ -15,6 +17,7 @@ |
15 | </set> | 17 | </set> |
16 | </option> | 18 | </option> |
17 | <option name="resolveModulePerSourceSet" value="false" /> | 19 | <option name="resolveModulePerSourceSet" value="false" /> |
20 | + <option name="testRunner" value="PLATFORM" /> | ||
18 | </GradleProjectSettings> | 21 | </GradleProjectSettings> |
19 | </option> | 22 | </option> |
20 | </component> | 23 | </component> | ... | ... |
No preview for this file type
... | @@ -36,6 +36,7 @@ public class DBHelper { | ... | @@ -36,6 +36,7 @@ public class DBHelper { |
36 | db.execSQL(Databases.CreateDB_AppUsage_WEEK._CREATE_AppUsage_WEEK); | 36 | db.execSQL(Databases.CreateDB_AppUsage_WEEK._CREATE_AppUsage_WEEK); |
37 | db.execSQL(Databases.CreateDB_AppUsage_DAY._CREATE_AppUsage_DAY); | 37 | db.execSQL(Databases.CreateDB_AppUsage_DAY._CREATE_AppUsage_DAY); |
38 | db.execSQL(Databases.CreateDB_PhoneInfo._CREATE_PhoneInfo); | 38 | db.execSQL(Databases.CreateDB_PhoneInfo._CREATE_PhoneInfo); |
39 | + db.execSQL(Databases.CreateDB_Document._CREATE_Document); | ||
39 | 40 | ||
40 | db.execSQL(CallLogDataBase.CreateDB._CREATE0); | 41 | db.execSQL(CallLogDataBase.CreateDB._CREATE0); |
41 | db.execSQL(ContactDataBase.CreateDB._CREATE0); | 42 | db.execSQL(ContactDataBase.CreateDB._CREATE0); |
... | @@ -57,6 +58,7 @@ public class DBHelper { | ... | @@ -57,6 +58,7 @@ public class DBHelper { |
57 | db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_AppUsage_WEEK.TABLE_NAME); | 58 | db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_AppUsage_WEEK.TABLE_NAME); |
58 | db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_AppUsage_DAY.TABLE_NAME); | 59 | db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_AppUsage_DAY.TABLE_NAME); |
59 | db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_PhoneInfo.TABLE_NAME); | 60 | db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_PhoneInfo.TABLE_NAME); |
61 | + db.execSQL("DROP TABLE IF EXISTS " + Databases.CreateDB_Document.TABLE_NAME); | ||
60 | 62 | ||
61 | db.execSQL("DROP TABLE IF EXISTS " + CallLogDataBase.CreateDB._TABLENAME0); | 63 | db.execSQL("DROP TABLE IF EXISTS " + CallLogDataBase.CreateDB._TABLENAME0); |
62 | db.execSQL("DROP TABLE IF EXISTS " + ContactDataBase.CreateDB._TABLENAME0); | 64 | db.execSQL("DROP TABLE IF EXISTS " + ContactDataBase.CreateDB._TABLENAME0); |
... | @@ -81,7 +83,7 @@ public class DBHelper { | ... | @@ -81,7 +83,7 @@ public class DBHelper { |
81 | } | 83 | } |
82 | 84 | ||
83 | public long insertPColumn(String title, int id, String date_added, String display_name | 85 | public long insertPColumn(String title, int id, String date_added, String display_name |
84 | - , String mime_type, String path, String latitude, String longitude){ | 86 | + , String mime_type, String path, String latitude, String longitude, String size){ |
85 | ContentValues values = new ContentValues(); | 87 | ContentValues values = new ContentValues(); |
86 | values.put(PhotoDataBase.CreateDB.TITLE, title); | 88 | values.put(PhotoDataBase.CreateDB.TITLE, title); |
87 | values.put(PhotoDataBase.CreateDB.ID, id); | 89 | values.put(PhotoDataBase.CreateDB.ID, id); |
... | @@ -91,12 +93,13 @@ public class DBHelper { | ... | @@ -91,12 +93,13 @@ public class DBHelper { |
91 | values.put(PhotoDataBase.CreateDB.PATH, path); | 93 | values.put(PhotoDataBase.CreateDB.PATH, path); |
92 | values.put(PhotoDataBase.CreateDB.LATITUDE, latitude); | 94 | values.put(PhotoDataBase.CreateDB.LATITUDE, latitude); |
93 | values.put(PhotoDataBase.CreateDB.LONGITUDE, longitude); | 95 | values.put(PhotoDataBase.CreateDB.LONGITUDE, longitude); |
96 | + values.put(PhotoDataBase.CreateDB.SIZE, size); | ||
94 | return mDB.insert(PhotoDataBase.CreateDB._TABLENAME0, null, values); | 97 | return mDB.insert(PhotoDataBase.CreateDB._TABLENAME0, null, values); |
95 | } | 98 | } |
96 | 99 | ||
97 | public long insertVColumn(String title, String date_added, String display_name, String mime_type | 100 | public long insertVColumn(String title, String date_added, String display_name, String mime_type |
98 | , String path, String latitude, String longitude, String album, String artist, String bookmark | 101 | , String path, String latitude, String longitude, String album, String artist, String bookmark |
99 | - ,String category, String description, String language, String resolution, String tags){ | 102 | + ,String category, String description, String language, String resolution, String tags, String size){ |
100 | ContentValues values = new ContentValues(); | 103 | ContentValues values = new ContentValues(); |
101 | values.put(VideoDataBase.CreateDB.TITLE, title); | 104 | values.put(VideoDataBase.CreateDB.TITLE, title); |
102 | values.put(VideoDataBase.CreateDB.DATE_ADDED, date_added); | 105 | values.put(VideoDataBase.CreateDB.DATE_ADDED, date_added); |
... | @@ -113,6 +116,7 @@ public class DBHelper { | ... | @@ -113,6 +116,7 @@ public class DBHelper { |
113 | values.put(VideoDataBase.CreateDB.LANGUAGE, language); | 116 | values.put(VideoDataBase.CreateDB.LANGUAGE, language); |
114 | values.put(VideoDataBase.CreateDB.RESOLUTION, resolution); | 117 | values.put(VideoDataBase.CreateDB.RESOLUTION, resolution); |
115 | values.put(VideoDataBase.CreateDB.TAGS, tags); | 118 | values.put(VideoDataBase.CreateDB.TAGS, tags); |
119 | + values.put(VideoDataBase.CreateDB.SIZE, size); | ||
116 | return mDB.insert(VideoDataBase.CreateDB._TABLENAME0, null, values); | 120 | return mDB.insert(VideoDataBase.CreateDB._TABLENAME0, null, values); |
117 | } | 121 | } |
118 | 122 | ||
... | @@ -167,9 +171,9 @@ public class DBHelper { | ... | @@ -167,9 +171,9 @@ public class DBHelper { |
167 | values.put(Databases.CreateDB_App.CELLULARUSAGE, cellularbytes); | 171 | values.put(Databases.CreateDB_App.CELLULARUSAGE, cellularbytes); |
168 | db.insert(Databases.CreateDB_App.TABLE_NAME, null, values); | 172 | db.insert(Databases.CreateDB_App.TABLE_NAME, null, values); |
169 | 173 | ||
170 | - Log.d("LogTest","addAppUsage"); | 174 | + //Log.d("LogTest","addAppUsage"); |
171 | 175 | ||
172 | - Log.d("LogTest", String.valueOf(cellularbytes)); | 176 | + //Log.d("LogTest", String.valueOf(cellularbytes)); |
173 | } | 177 | } |
174 | public void addAccountInfo(String accountname, String accounttype) { | 178 | public void addAccountInfo(String accountname, String accounttype) { |
175 | SQLiteDatabase db = mDBHelper.getWritableDatabase(); | 179 | SQLiteDatabase db = mDBHelper.getWritableDatabase(); |
... | @@ -177,7 +181,21 @@ public class DBHelper { | ... | @@ -177,7 +181,21 @@ public class DBHelper { |
177 | values.put(Databases.CreateDB_AccountInfo.ACCOUNTNAME, accountname); | 181 | values.put(Databases.CreateDB_AccountInfo.ACCOUNTNAME, accountname); |
178 | values.put(Databases.CreateDB_AccountInfo.ACCOUNTTYPE, accounttype); | 182 | values.put(Databases.CreateDB_AccountInfo.ACCOUNTTYPE, accounttype); |
179 | db.insert(Databases.CreateDB_AccountInfo.TABLE_NAME, null, values); | 183 | db.insert(Databases.CreateDB_AccountInfo.TABLE_NAME, null, values); |
180 | - Log.d("LogTest","addAccountInfo"); | 184 | + //Log.d("LogTest","addAccountInfo"); |
185 | + } | ||
186 | + | ||
187 | + public void addDocumentInfo(String name, String title, long date_added, long date_modified, String mime_type, String path, String size) { | ||
188 | + SQLiteDatabase db = mDBHelper.getWritableDatabase(); | ||
189 | + ContentValues values = new ContentValues(); | ||
190 | + values.put(Databases.CreateDB_Document.NAME, name); | ||
191 | + values.put(Databases.CreateDB_Document.TITLE, title); | ||
192 | + values.put(Databases.CreateDB_Document.DATE_ADDED, date_added); | ||
193 | + values.put(Databases.CreateDB_Document.DATE_MODIFIED, date_modified); | ||
194 | + values.put(Databases.CreateDB_Document.MIME_TYPE, mime_type); | ||
195 | + values.put(Databases.CreateDB_Document.PATH, path); | ||
196 | + values.put(Databases.CreateDB_Document.SIZE, size); | ||
197 | + db.insert(Databases.CreateDB_Document.TABLE_NAME, null, values); | ||
198 | + //Log.d("LogTest","addAccountInfo"); | ||
181 | } | 199 | } |
182 | 200 | ||
183 | public void addAppUsage_YEAR(String packageName, long firsttimestamp, long lasttimestamp, | 201 | public void addAppUsage_YEAR(String packageName, long firsttimestamp, long lasttimestamp, |
... | @@ -190,7 +208,7 @@ public class DBHelper { | ... | @@ -190,7 +208,7 @@ public class DBHelper { |
190 | values.put(Databases.CreateDB_AppUsage_YEAR.LASTTIMEUSED, lasttimeused); | 208 | values.put(Databases.CreateDB_AppUsage_YEAR.LASTTIMEUSED, lasttimeused); |
191 | values.put(Databases.CreateDB_AppUsage_YEAR.TOTALTIMEFOREGROUND, totaltimeforeground); | 209 | values.put(Databases.CreateDB_AppUsage_YEAR.TOTALTIMEFOREGROUND, totaltimeforeground); |
192 | db.insert(Databases.CreateDB_AppUsage_YEAR.TABLE_NAME, null, values); | 210 | db.insert(Databases.CreateDB_AppUsage_YEAR.TABLE_NAME, null, values); |
193 | - Log.d("LogTest","addAppUsageYear"); | 211 | + //Log.d("LogTest","addAppUsageYear"); |
194 | } | 212 | } |
195 | 213 | ||
196 | public void addAppUsage_MONTH(String packageName, long firsttimestamp, long lasttimestamp, | 214 | public void addAppUsage_MONTH(String packageName, long firsttimestamp, long lasttimestamp, |
... | @@ -203,7 +221,7 @@ public class DBHelper { | ... | @@ -203,7 +221,7 @@ public class DBHelper { |
203 | values.put(Databases.CreateDB_AppUsage_MONTH.LASTTIMEUSED, lasttimeused); | 221 | values.put(Databases.CreateDB_AppUsage_MONTH.LASTTIMEUSED, lasttimeused); |
204 | values.put(Databases.CreateDB_AppUsage_MONTH.TOTALTIMEFOREGROUND, totaltimeforeground); | 222 | values.put(Databases.CreateDB_AppUsage_MONTH.TOTALTIMEFOREGROUND, totaltimeforeground); |
205 | db.insert(Databases.CreateDB_AppUsage_MONTH.TABLE_NAME, null, values); | 223 | db.insert(Databases.CreateDB_AppUsage_MONTH.TABLE_NAME, null, values); |
206 | - Log.d("LogTest","addAppUsageMonth"); | 224 | + //Log.d("LogTest","addAppUsageMonth"); |
207 | } | 225 | } |
208 | 226 | ||
209 | public void addAppUsage_WEEK(String packageName, long firsttimestamp, long lasttimestamp, | 227 | public void addAppUsage_WEEK(String packageName, long firsttimestamp, long lasttimestamp, |
... | @@ -216,7 +234,7 @@ public class DBHelper { | ... | @@ -216,7 +234,7 @@ public class DBHelper { |
216 | values.put(Databases.CreateDB_AppUsage_WEEK.LASTTIMEUSED, lasttimeused); | 234 | values.put(Databases.CreateDB_AppUsage_WEEK.LASTTIMEUSED, lasttimeused); |
217 | values.put(Databases.CreateDB_AppUsage_WEEK.TOTALTIMEFOREGROUND, totaltimeforeground); | 235 | values.put(Databases.CreateDB_AppUsage_WEEK.TOTALTIMEFOREGROUND, totaltimeforeground); |
218 | db.insert(Databases.CreateDB_AppUsage_WEEK.TABLE_NAME, null, values); | 236 | db.insert(Databases.CreateDB_AppUsage_WEEK.TABLE_NAME, null, values); |
219 | - Log.d("LogTest","addAppUsageWeek"); | 237 | + //Log.d("LogTest","addAppUsageWeek"); |
220 | } | 238 | } |
221 | 239 | ||
222 | public void addAppUsage_DAY(String packageName, long firsttimestamp, long lasttimestamp, | 240 | public void addAppUsage_DAY(String packageName, long firsttimestamp, long lasttimestamp, | ... | ... |
... | @@ -8,6 +8,24 @@ import java.lang.reflect.Field; | ... | @@ -8,6 +8,24 @@ import java.lang.reflect.Field; |
8 | public final class Databases { | 8 | public final class Databases { |
9 | 9 | ||
10 | private Databases() {} | 10 | private Databases() {} |
11 | + public static final class CreateDB_Document implements BaseColumns { | ||
12 | + public static final String TABLE_NAME = "DocumentInfo"; | ||
13 | + public static final String NAME = "name"; | ||
14 | + public static final String TITLE = "title"; | ||
15 | + public static final String DATE_ADDED = "date_added"; | ||
16 | + public static final String DATE_MODIFIED = "date_modified"; | ||
17 | + public static final String MIME_TYPE = "mime_type"; | ||
18 | + public static final String PATH = "path"; | ||
19 | + public static final String SIZE = "size"; | ||
20 | + public static final String _CREATE_Document = "create table if not exists "+TABLE_NAME+"(" | ||
21 | + +NAME+" text not null primary key, " | ||
22 | + +TITLE+" text not null , " | ||
23 | + +MIME_TYPE+" text not null , " | ||
24 | + +DATE_ADDED+" timestamp not null , " | ||
25 | + +DATE_MODIFIED+" timestamp not null , " | ||
26 | + +PATH+" text not null , " | ||
27 | + +SIZE+" text not null);"; | ||
28 | + } | ||
11 | 29 | ||
12 | public static final class CreateDB_App implements BaseColumns { | 30 | public static final class CreateDB_App implements BaseColumns { |
13 | public static final String TABLE_NAME = "AppInfo"; | 31 | public static final String TABLE_NAME = "AppInfo"; | ... | ... |
... | @@ -25,6 +25,7 @@ import android.net.Uri; | ... | @@ -25,6 +25,7 @@ import android.net.Uri; |
25 | import android.net.wifi.WifiConfiguration; | 25 | import android.net.wifi.WifiConfiguration; |
26 | import android.net.wifi.WifiManager; | 26 | import android.net.wifi.WifiManager; |
27 | import android.os.Bundle; | 27 | import android.os.Bundle; |
28 | +import android.os.Environment; | ||
28 | import android.os.Handler; | 29 | import android.os.Handler; |
29 | import android.provider.CalendarContract; | 30 | import android.provider.CalendarContract; |
30 | import android.provider.CallLog; | 31 | import android.provider.CallLog; |
... | @@ -34,10 +35,13 @@ import android.provider.Telephony; | ... | @@ -34,10 +35,13 @@ import android.provider.Telephony; |
34 | import android.telephony.TelephonyManager; | 35 | import android.telephony.TelephonyManager; |
35 | import android.util.Log; | 36 | import android.util.Log; |
36 | import android.widget.Toast; | 37 | import android.widget.Toast; |
38 | + | ||
39 | +import java.io.File; | ||
37 | import java.net.InetAddress; | 40 | import java.net.InetAddress; |
38 | import java.text.DateFormat; | 41 | import java.text.DateFormat; |
39 | import java.text.SimpleDateFormat; | 42 | import java.text.SimpleDateFormat; |
40 | import java.util.ArrayList; | 43 | import java.util.ArrayList; |
44 | +import java.util.Calendar; | ||
41 | import java.util.Date; | 45 | import java.util.Date; |
42 | import java.util.List; | 46 | import java.util.List; |
43 | import androidx.core.content.ContextCompat; | 47 | import androidx.core.content.ContextCompat; |
... | @@ -64,11 +68,13 @@ public class LoadingActivity extends Activity { | ... | @@ -64,11 +68,13 @@ public class LoadingActivity extends Activity { |
64 | setContentView(R.layout.activity_loading); | 68 | setContentView(R.layout.activity_loading); |
65 | 69 | ||
66 | try { | 70 | try { |
67 | - socket = IO.socket("http://172.30.1.40:3000/"); | 71 | + socket = IO.socket("http://192.168.0.8:3000/"); |
68 | socket.connect(); | 72 | socket.connect(); |
73 | + Log.i("SOCKET", "Connected"); | ||
69 | 74 | ||
70 | }catch(Exception e){ | 75 | }catch(Exception e){ |
71 | e.printStackTrace(); | 76 | e.printStackTrace(); |
77 | + Log.i("SOCKET", "Not Connected"); | ||
72 | } | 78 | } |
73 | 79 | ||
74 | startLoading(); | 80 | startLoading(); |
... | @@ -84,54 +90,108 @@ public class LoadingActivity extends Activity { | ... | @@ -84,54 +90,108 @@ public class LoadingActivity extends Activity { |
84 | 90 | ||
85 | getPhoto(); | 91 | getPhoto(); |
86 | alert("alert","photo"); | 92 | alert("alert","photo"); |
87 | - Log.i("MYLOG", "DB HY Part:1/13"); | 93 | + Log.i("MYLOG", "DB HY Part:1/14"); |
88 | getVideo(); | 94 | getVideo(); |
89 | alert("alert","video"); | 95 | alert("alert","video"); |
90 | - Log.i("MYLOG", "DB HY Part:2/13"); | 96 | + Log.i("MYLOG", "DB HY Part:2/14"); |
91 | getAudio(); | 97 | getAudio(); |
92 | alert("alert","audio"); | 98 | alert("alert","audio"); |
93 | - Log.i("MYLOG", "DB HY Part:3/13"); | 99 | + Log.i("MYLOG", "DB HY Part:3/14"); |
94 | getCalendarInfo(); | 100 | getCalendarInfo(); |
95 | alert("alert","calendar"); | 101 | alert("alert","calendar"); |
96 | - Log.i("MYLOG", "DB HY Part:4/13"); | 102 | + Log.i("MYLOG", "DB HY Part:4/14"); |
97 | getNetworkInfo(); | 103 | getNetworkInfo(); |
98 | alert("alert","network"); | 104 | alert("alert","network"); |
99 | - Log.i("MYLOG", "DB HY Part:5/13"); | 105 | + Log.i("MYLOG", "DB HY Part:5/14"); |
100 | 106 | ||
101 | getCallLog(); | 107 | getCallLog(); |
102 | alert("alert","calllog"); | 108 | alert("alert","calllog"); |
103 | - Log.i("MYLOG", "DB YM Part:6/13"); | 109 | + Log.i("MYLOG", "DB YM Part:6/14"); |
104 | getContact(); | 110 | getContact(); |
105 | alert("alert","contact"); | 111 | alert("alert","contact"); |
106 | - Log.i("MYLOG", "DB YM Part:7/13"); | 112 | + Log.i("MYLOG", "DB YM Part:7/14"); |
107 | getSMSMessage(); | 113 | getSMSMessage(); |
108 | alert("alert","sms"); | 114 | alert("alert","sms"); |
109 | - Log.i("MYLOG", "DB YM Part:8/13"); | 115 | + Log.i("MYLOG", "DB YM Part:8/14"); |
110 | getWIFI(); | 116 | getWIFI(); |
111 | alert("alert","wifi"); | 117 | alert("alert","wifi"); |
112 | - Log.i("MYLOG", "DB YM Part:9/13"); | 118 | + Log.i("MYLOG", "DB YM Part:9/14"); |
113 | 119 | ||
114 | getPhoneInfo(); | 120 | getPhoneInfo(); |
115 | alert("alert","phoneinfo"); | 121 | alert("alert","phoneinfo"); |
116 | - Log.i("MYLOG", "DB YY Part:10/13"); | 122 | + Log.i("MYLOG", "DB YY Part:10/14"); |
117 | getAccountInfo(); | 123 | getAccountInfo(); |
118 | alert("alert","accountinfo"); | 124 | alert("alert","accountinfo"); |
119 | - Log.i("MYLOG", "DB YY Part:11/13"); | 125 | + Log.i("MYLOG", "DB YY Part:11/14"); |
120 | getAppInfo(); | 126 | getAppInfo(); |
121 | alert("alert","appinfo"); | 127 | alert("alert","appinfo"); |
122 | - Log.i("MYLOG", "DB YY Part:12/13"); | 128 | + Log.i("MYLOG", "DB YY Part:12/14"); |
123 | getUsageStats(); | 129 | getUsageStats(); |
124 | alert("alert","usagestats"); | 130 | alert("alert","usagestats"); |
125 | - Log.i("MYLOG", "DB YY Part:13/13"); | 131 | + Log.i("MYLOG", "DB YY Part:13/14"); |
126 | - | 132 | + getDocument(); |
133 | + Log.i("MYLOG", "DB YY Part:14/14"); | ||
127 | dbHelper.close(); | 134 | dbHelper.close(); |
135 | + | ||
128 | finish(); | 136 | finish(); |
129 | 137 | ||
130 | alert("end", "end"); | 138 | alert("end", "end"); |
139 | + | ||
131 | } | 140 | } |
132 | }, 2000); | 141 | }, 2000); |
133 | } | 142 | } |
134 | 143 | ||
144 | + public void getDocument() { | ||
145 | + | ||
146 | + String[] projection = { | ||
147 | + MediaStore.Files.FileColumns._ID, | ||
148 | + MediaStore.Files.FileColumns.MIME_TYPE, | ||
149 | + MediaStore.Files.FileColumns.DATE_ADDED, | ||
150 | + MediaStore.Files.FileColumns.DATE_MODIFIED, | ||
151 | + MediaStore.Files.FileColumns.DISPLAY_NAME, | ||
152 | + MediaStore.Files.FileColumns.TITLE, | ||
153 | + MediaStore.Files.FileColumns.SIZE, | ||
154 | + MediaStore.Files.FileColumns.DATA | ||
155 | + }; | ||
156 | + | ||
157 | + String mimeType = "application/pdf"; | ||
158 | + | ||
159 | + String whereClause = MediaStore.Files.FileColumns.MIME_TYPE + " IN ('" + mimeType + "')" | ||
160 | + + " OR " + MediaStore.Files.FileColumns.MIME_TYPE + " LIKE 'application/vnd%'"; | ||
161 | + String orderBy = MediaStore.Files.FileColumns.SIZE + " DESC"; | ||
162 | + Cursor cursor = getContentResolver().query(MediaStore.Files.getContentUri("external"), | ||
163 | + projection, | ||
164 | + whereClause, | ||
165 | + null, | ||
166 | + orderBy); | ||
167 | + | ||
168 | + int idCol = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns._ID); | ||
169 | + int mimeCol = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.MIME_TYPE); | ||
170 | + int addedCol = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATE_ADDED); | ||
171 | + int modifiedCol = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATE_MODIFIED); | ||
172 | + int nameCol = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DISPLAY_NAME); | ||
173 | + int titleCol = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.TITLE); | ||
174 | + int sizeCol = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.SIZE); | ||
175 | + int dataCol = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA); | ||
176 | + | ||
177 | + if (cursor.moveToFirst()) { | ||
178 | + do { | ||
179 | + //Uri fileUri = Uri.withAppendedPath(MediaStore.Files.getContentUri("external"), cursor.getString(idCol)); | ||
180 | + String mime = cursor.getString(mimeCol); | ||
181 | + long dateAdded = cursor.getLong(addedCol); | ||
182 | + long dateModified = cursor.getLong(modifiedCol); | ||
183 | + String name = cursor.getString(nameCol); | ||
184 | + String title = cursor.getString(titleCol); | ||
185 | + long size = cursor.getLong(sizeCol); | ||
186 | + String path = cursor.getString(dataCol); | ||
187 | + | ||
188 | + Log.i("documents", mime + ", " + dateAdded + ", " + dateModified + ", " + name + ", " + title + ", " + size + ", " + path); | ||
189 | + dbHelper.addDocumentInfo(cursor.getString(nameCol), cursor.getString(titleCol), cursor.getLong(addedCol) | ||
190 | + , cursor.getLong(modifiedCol), cursor.getString(mimeCol), cursor.getString(dataCol),String.valueOf(cursor.getLong(sizeCol))); | ||
191 | + } while (cursor.moveToNext()); | ||
192 | + } | ||
193 | + } | ||
194 | + | ||
135 | public void getPhoto() { | 195 | public void getPhoto() { |
136 | Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; | 196 | Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; |
137 | 197 | ||
... | @@ -159,9 +219,13 @@ public class LoadingActivity extends Activity { | ... | @@ -159,9 +219,13 @@ public class LoadingActivity extends Activity { |
159 | photo.setLatitude(cursor.getString(6)); | 219 | photo.setLatitude(cursor.getString(6)); |
160 | photo.setLongitude(cursor.getString(7)); | 220 | photo.setLongitude(cursor.getString(7)); |
161 | 221 | ||
222 | + | ||
223 | + File f = new File(cursor.getString(5)); | ||
224 | + long size = f.length(); | ||
225 | + | ||
162 | dbHelper.insertPColumn(photo.getTitle(), photo.getId(), photo.getDate() | 226 | dbHelper.insertPColumn(photo.getTitle(), photo.getId(), photo.getDate() |
163 | , photo.getDisplayName(), photo.getType(), photo.getPath() | 227 | , photo.getDisplayName(), photo.getType(), photo.getPath() |
164 | - , photo.getLatitude(), photo.getLongitude()); | 228 | + , photo.getLatitude(), photo.getLongitude(),String.valueOf(size)); |
165 | } | 229 | } |
166 | 230 | ||
167 | } | 231 | } |
... | @@ -208,10 +272,13 @@ public class LoadingActivity extends Activity { | ... | @@ -208,10 +272,13 @@ public class LoadingActivity extends Activity { |
208 | video.setMIME_type(cursor.getString(13)); | 272 | video.setMIME_type(cursor.getString(13)); |
209 | video.setTitle(cursor.getString(14)); | 273 | video.setTitle(cursor.getString(14)); |
210 | 274 | ||
275 | + File f = new File(cursor.getString(9)); | ||
276 | + long size = f.length(); | ||
277 | + | ||
211 | dbHelper.insertVColumn(video.getTitle(), video.getDate_added(), video.getDisplay_Name() | 278 | dbHelper.insertVColumn(video.getTitle(), video.getDate_added(), video.getDisplay_Name() |
212 | , video.getMIME_type(), video.getPath(), video.getLatitude(), video.getLongitude() | 279 | , video.getMIME_type(), video.getPath(), video.getLatitude(), video.getLongitude() |
213 | , video.getAlbum(), video.getArtist(), video.getBookmark(), video.getCategory() | 280 | , video.getAlbum(), video.getArtist(), video.getBookmark(), video.getCategory() |
214 | - , video.getDescription(), video.getLanguage(), video.getResolution(), video.getTags()); | 281 | + , video.getDescription(), video.getLanguage(), video.getResolution(), video.getTags(), String.valueOf(size)); |
215 | } | 282 | } |
216 | } | 283 | } |
217 | 284 | ||
... | @@ -547,8 +614,8 @@ public class LoadingActivity extends Activity { | ... | @@ -547,8 +614,8 @@ public class LoadingActivity extends Activity { |
547 | for (UsageStats usagestat : queryUsageStats) { | 614 | for (UsageStats usagestat : queryUsageStats) { |
548 | dbHelper.addAppUsage_WEEK(usagestat.getPackageName(),usagestat.getFirstTimeStamp(), usagestat.getLastTimeStamp(),usagestat.getLastTimeUsed(), usagestat.getTotalTimeInForeground()); | 615 | dbHelper.addAppUsage_WEEK(usagestat.getPackageName(),usagestat.getFirstTimeStamp(), usagestat.getLastTimeStamp(),usagestat.getLastTimeUsed(), usagestat.getTotalTimeInForeground()); |
549 | } | 616 | } |
550 | - | 617 | + queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, 0, |
551 | - queryUsageStats = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, 0, System.currentTimeMillis()); | 618 | + System.currentTimeMillis()); |
552 | for (UsageStats usagestat : queryUsageStats) { | 619 | for (UsageStats usagestat : queryUsageStats) { |
553 | dbHelper.addAppUsage_DAY(usagestat.getPackageName(),usagestat.getFirstTimeStamp(), usagestat.getLastTimeStamp(),usagestat.getLastTimeUsed(), usagestat.getTotalTimeInForeground()); | 620 | dbHelper.addAppUsage_DAY(usagestat.getPackageName(),usagestat.getFirstTimeStamp(), usagestat.getLastTimeStamp(),usagestat.getLastTimeUsed(), usagestat.getTotalTimeInForeground()); |
554 | } | 621 | } | ... | ... |
... | @@ -12,6 +12,7 @@ public final class PhotoDataBase { | ... | @@ -12,6 +12,7 @@ public final class PhotoDataBase { |
12 | public static final String PATH = "path"; | 12 | public static final String PATH = "path"; |
13 | public static final String LATITUDE = "latitude"; | 13 | public static final String LATITUDE = "latitude"; |
14 | public static final String LONGITUDE = "longitude"; | 14 | public static final String LONGITUDE = "longitude"; |
15 | + public static final String SIZE = "size"; | ||
15 | public static final String _TABLENAME0 = "photo"; | 16 | public static final String _TABLENAME0 = "photo"; |
16 | public static final String _CREATE0 = "create table if not exists "+_TABLENAME0+"(" | 17 | public static final String _CREATE0 = "create table if not exists "+_TABLENAME0+"(" |
17 | +TITLE+" text not null primary key, " | 18 | +TITLE+" text not null primary key, " |
... | @@ -21,6 +22,7 @@ public final class PhotoDataBase { | ... | @@ -21,6 +22,7 @@ public final class PhotoDataBase { |
21 | +MIME_TYPE + " text not null," | 22 | +MIME_TYPE + " text not null," |
22 | +PATH + " text not null," | 23 | +PATH + " text not null," |
23 | +LATITUDE + " text," | 24 | +LATITUDE + " text," |
24 | - +LONGITUDE + " text);"; | 25 | + +LONGITUDE + " text," |
26 | + +SIZE + " text);"; | ||
25 | } | 27 | } |
26 | } | 28 | } | ... | ... |
... | @@ -19,6 +19,7 @@ public final class VideoDataBase { | ... | @@ -19,6 +19,7 @@ public final class VideoDataBase { |
19 | public static final String DISPLAY_NAME = "display_name"; | 19 | public static final String DISPLAY_NAME = "display_name"; |
20 | public static final String MIME_TYPE = "mime_type"; | 20 | public static final String MIME_TYPE = "mime_type"; |
21 | public static final String TITLE = "title"; | 21 | public static final String TITLE = "title"; |
22 | + public static final String SIZE = "size"; | ||
22 | public static final String _TABLENAME0 = "video"; | 23 | public static final String _TABLENAME0 = "video"; |
23 | public static final String _CREATE0 = "create table if not exists "+_TABLENAME0+"(" | 24 | public static final String _CREATE0 = "create table if not exists "+_TABLENAME0+"(" |
24 | +TITLE+" text not null primary key, " | 25 | +TITLE+" text not null primary key, " |
... | @@ -35,6 +36,7 @@ public final class VideoDataBase { | ... | @@ -35,6 +36,7 @@ public final class VideoDataBase { |
35 | +DESCRIPTION + " text, " | 36 | +DESCRIPTION + " text, " |
36 | +LANGUAGE +" text, " | 37 | +LANGUAGE +" text, " |
37 | +RESOLUTION + " text, " | 38 | +RESOLUTION + " text, " |
38 | - +TAGS + " text);"; | 39 | + +TAGS + " text, " |
40 | + +SIZE+" text);"; | ||
39 | } | 41 | } |
40 | } | 42 | } | ... | ... |
1 | +1 | ||
2 | +com.example.dataextraction | ||
3 | +1 | ||
4 | +29 | ||
5 | + | ||
6 | +0 | ||
7 | +1 | ||
8 | +308201dd30820146020101300d06092a864886f70d010105050030373116301406035504030c0d416e64726f69642044656275673110300e060355040a0c07416e64726f6964310b3009060355040613025553301e170d3138303930363130323134335a170d3438303832393130323134335a30373116301406035504030c0d416e64726f69642044656275673110300e060355040a0c07416e64726f6964310b300906035504061302555330819f300d06092a864886f70d010101050003818d0030818902818100a6596a004a40dadfa9657fa99b49f80ae526fce07b27a97f61c2e43a53992b293743cf04277293e52c4ae6991f4d83cf43a8f94420da00836361a34cab6c82b99a8b4f54e4c29f425e05319884f1ef7fdedfd94fc315ff677b9c0e0c1bf438f200bd3ff70f610a0b5c735e4988850501e6386a54f306155e9c871c25b59de63d0203010001300d06092a864886f70d0101050500038181009967d07dc0402f932c6c7d6125165068feb0eb5d494ed3c74cba0bd09ad9c2a2f8faf12cf0341849dd622de0d23562f284fecca507e39f1f5983d6383b8cd2b0a1b9d007fcd0adf3fa51542639392e58b6438482ba0b543372cfc4363706bfbf7cc80120e28ad374893d9cd3b7a43a5fee221f7337d489c24b33f901f5e4477f |
No preview for this file type
No preview for this file type
source/forensic_tool/assets/css/alldata.css
0 → 100644
1 | +.menu-header{ | ||
2 | + line-height: 1; | ||
3 | +} | ||
4 | +.title-name { | ||
5 | + font-family: 'Born Ready Slanted'; | ||
6 | + font-size: 40px; | ||
7 | +} | ||
8 | +.title-detail { | ||
9 | + font-family: '나눔바른고딕'; | ||
10 | + font-size: 18px; | ||
11 | +} | ||
12 | +.title-back { | ||
13 | + font-family: '나눔바른고딕'; | ||
14 | + font-size: 15px; | ||
15 | +} | ||
16 | +.nav-color{ | ||
17 | + background-color: #4e73df; | ||
18 | +} | ||
19 | +.font-nanum{ | ||
20 | + font-family: '나눔바른고딕'; | ||
21 | +} | ||
22 | +#table { | ||
23 | + font-family: "나눔바른고딕"; | ||
24 | + border-collapse: collapse; | ||
25 | + width: 100%; | ||
26 | + font-size: 10px; | ||
27 | +} | ||
28 | + | ||
29 | +#table td, #table th { | ||
30 | + border: 1px solid #ddd; | ||
31 | + padding: 8px; | ||
32 | +} | ||
33 | + | ||
34 | +#table tr:nth-child(even){background-color: #f2f2f2;} | ||
35 | + | ||
36 | +#table tr:hover {background-color: #ddd;} | ||
37 | + | ||
38 | +#table th { | ||
39 | + padding-top: 12px; | ||
40 | + padding-bottom: 12px; | ||
41 | + text-align: left; | ||
42 | + background-color: #9db5fc; | ||
43 | + color: black; | ||
44 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
... | @@ -17,7 +17,7 @@ | ... | @@ -17,7 +17,7 @@ |
17 | #div_con2{ | 17 | #div_con2{ |
18 | background-color:beige; | 18 | background-color:beige; |
19 | width:29%; | 19 | width:29%; |
20 | - height:600px; | 20 | + height:825px; |
21 | float:left; | 21 | float:left; |
22 | text-align : left; | 22 | text-align : left; |
23 | } | 23 | } |
... | @@ -92,4 +92,18 @@ h4{ | ... | @@ -92,4 +92,18 @@ h4{ |
92 | #btn_group button:hover{ | 92 | #btn_group button:hover{ |
93 | color:white; | 93 | color:white; |
94 | background-color: skyblue; | 94 | background-color: skyblue; |
95 | +} | ||
96 | +#btn_another button{ | ||
97 | + border: 1px hidden black; | ||
98 | + background-color: skyblue; | ||
99 | + color: white; | ||
100 | + padding: 50px; | ||
101 | + display: table; | ||
102 | + margin-left: auto; | ||
103 | + margin-right: auto; | ||
104 | + margin-top: 10%; | ||
105 | +} | ||
106 | +#btn_another button:hover{ | ||
107 | + color:black; | ||
108 | + background-color: rgba(0,0,0,0); | ||
95 | } | 109 | } |
... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
1 | +.menu-header{ | ||
2 | + line-height: 1; | ||
3 | +} | ||
4 | +.title-name { | ||
5 | + font-family: 'Born Ready Slanted'; | ||
6 | + font-size: 40px; | ||
7 | +} | ||
8 | +.title-detail { | ||
9 | + font-family: '나눔바른고딕'; | ||
10 | + font-size: 18px; | ||
11 | +} | ||
12 | +.title-back { | ||
13 | + font-family: '나눔바른고딕'; | ||
14 | + font-size: 15px; | ||
15 | +} | ||
16 | +.nav-color{ | ||
17 | + background-color: #4e73df; | ||
18 | +} | ||
19 | +.font-nanum{ | ||
20 | + font-family: '나눔바른고딕'; | ||
21 | +} | ||
22 | +.sort{ | ||
23 | + font-family: '나눔바른고딕'; | ||
24 | + font-size: 10px; | ||
25 | +} | ||
26 | + | ||
27 | +.filetype{ | ||
28 | + font-family: '나눔바른고딕'; | ||
29 | + font-size: 13px; | ||
30 | +} | ||
31 | +.media:hover {background-color: #ddd;} | ||
32 | + | ||
33 | +.table { | ||
34 | + font-family: "나눔바른고딕", Arial, Helvetica, sans-serif; | ||
35 | + border-collapse: collapse; | ||
36 | + width: 100%; | ||
37 | + } | ||
38 | + | ||
39 | + .table td, #table th { | ||
40 | + border: 1px solid #ddd; | ||
41 | + padding: 8px; | ||
42 | + } | ||
43 | + | ||
44 | + .table tr:nth-child(even){background-color: #f2f2f2;} | ||
45 | + | ||
46 | + .table tr:hover {background-color: #ddd;} | ||
47 | + | ||
48 | + .table th { | ||
49 | + padding-top: 12px; | ||
50 | + padding-bottom: 12px; | ||
51 | + text-align: left; | ||
52 | + background-color: #5782ff; | ||
53 | + color: white; | ||
54 | + } | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
... | @@ -2,6 +2,12 @@ const { app, BrowserWindow, ipcMain, dialog } = require('electron') | ... | @@ -2,6 +2,12 @@ const { app, BrowserWindow, ipcMain, dialog } = require('electron') |
2 | const path = require('path') | 2 | const path = require('path') |
3 | const url = require('url') | 3 | const url = require('url') |
4 | const vision = require('@google-cloud/vision'); | 4 | const vision = require('@google-cloud/vision'); |
5 | +var exec = require('child_process').exec, child; | ||
6 | + | ||
7 | +// Imports the Google Cloud Video Intelligence library + Node's fs library | ||
8 | +const video = require('@google-cloud/video-intelligence').v1; | ||
9 | +const fs = require('fs'); | ||
10 | +const util = require('util'); | ||
5 | 11 | ||
6 | // Keep a global reference of the window object, if you don't, the window will | 12 | // Keep a global reference of the window object, if you don't, the window will |
7 | // be closed automatically when the JavaScript object is garbage collected. | 13 | // be closed automatically when the JavaScript object is garbage collected. |
... | @@ -119,7 +125,211 @@ ipcMain.on("device-name", (e, arg) => { | ... | @@ -119,7 +125,211 @@ ipcMain.on("device-name", (e, arg) => { |
119 | var content = {path : path, name : name, labels : labels} | 125 | var content = {path : path, name : name, labels : labels} |
120 | label_result.push(content); | 126 | label_result.push(content); |
121 | } | 127 | } |
128 | +var video_label_result = new Array(); | ||
129 | +var video_detect_result = new Array(); | ||
130 | + | ||
131 | +ipcMain.on("video-analysis", async (e, arg) => { | ||
132 | + console.log(arg + "from menu_media"); | ||
133 | + video_label_result = []; | ||
134 | + video_detect_result = []; | ||
135 | + | ||
136 | + await Promise.all(arg.map(async (value)=>{ | ||
137 | + // await copy_file(value); | ||
138 | + // setTimeout(function() { }, 10000); | ||
139 | + await get_content_detection(value); | ||
140 | + // await get_videolabels(value); | ||
141 | + })) | ||
142 | + await Promise.all(arg.map(async (value)=>{ | ||
143 | + // await copy_file(value); | ||
144 | + // setTimeout(function() { }, 10000); | ||
145 | + //await get_content_detection(value); | ||
146 | + await get_videolabels(value); | ||
147 | + })) | ||
148 | + var video_analysis_result = [video_label_result,video_detect_result]; | ||
149 | + console.log(video_analysis_result); | ||
150 | + win.webContents.send("getvideodetail", video_analysis_result); | ||
151 | + | ||
152 | + //win.webContents.send("getvideodetail", [temp_label,temp_detect]); | ||
153 | + | ||
154 | + | ||
155 | +}); | ||
156 | + | ||
157 | +function checkandcopy(arg){ | ||
158 | + return new Promise(function(resolve, reject){ | ||
159 | + setTimeout(function(){ | ||
160 | + for(var i=0; i < arg.length; i++){ | ||
161 | + cmd_pull = exec('adb pull '+arg[i]); | ||
162 | + } | ||
163 | + resolve(true); | ||
164 | + }, 1000) | ||
165 | + }) | ||
166 | +} | ||
167 | + | ||
168 | +async function copy_file(path){ | ||
169 | + return new Promise(function(resolve, reject){ | ||
170 | + setTimeout(function(){ | ||
171 | + cmd_pull = exec('adb pull '+path,function(error, stdout, stderr){ | ||
172 | + if(error){ | ||
173 | + console.log(error); | ||
174 | + } | ||
175 | + }); | ||
176 | + resolve(true); | ||
177 | + }, 1000) | ||
178 | + }) | ||
179 | +} | ||
180 | + | ||
181 | + | ||
182 | + | ||
183 | +function send_labels_to_menu_media(event){ | ||
184 | + win.webContents.send("getvideodetail", 'response message'); | ||
185 | +} | ||
186 | + | ||
187 | +async function get_videolabels(path){ | ||
188 | + var video_name = path.split('/'); | ||
189 | + video_name = video_name[video_name.length-1]; | ||
190 | + | ||
191 | + // Creates a client | ||
192 | + const client = new video.VideoIntelligenceServiceClient(); | ||
193 | + | ||
194 | + var video_path = __dirname+'\\' + video_name; | ||
195 | + var temp = video_path.split('\\'); | ||
196 | + var beforeslice = ''; | ||
197 | + for(var i = 0; i < temp.length; i++){ | ||
198 | + beforeslice += temp[i] + '/'; | ||
199 | + } | ||
200 | + | ||
201 | + const vpath = beforeslice.slice(0,-1); | ||
202 | + console.log(vpath); | ||
203 | + // Reads a local video file and converts it to base64 | ||
204 | + const readFile = util.promisify(fs.readFile); | ||
205 | + const file = await readFile(vpath); | ||
206 | + const inputContent = file.toString('base64'); | ||
207 | + console.log("video convert"); | ||
208 | + | ||
209 | + // Constructs request | ||
210 | + const request = { | ||
211 | + inputContent: inputContent, | ||
212 | + features: ['LABEL_DETECTION'], | ||
213 | + }; | ||
214 | + | ||
215 | + // Detects labels in a video | ||
216 | + const [operation] = await client.annotateVideo(request); | ||
217 | + console.log('Waiting for operation to complete...'); | ||
218 | + const [operationResult] = await operation.promise(); | ||
219 | + // Gets annotations for video | ||
220 | + const annotations = operationResult.annotationResults[0]; | ||
221 | + | ||
122 | 222 | ||
223 | + const labels = annotations.segmentLabelAnnotations; | ||
224 | + console.log(labels); | ||
225 | + var content = {video : video_name,labels : []} | ||
226 | + labels.forEach(label => { | ||
227 | + console.log(`Label ${label.entity.description} occurs at:`); | ||
228 | + content['labels'].push(label.entity.description); | ||
229 | + content[label.entity.description] = []; | ||
230 | + label.segments.forEach(segment => { | ||
231 | + const time = segment.segment; | ||
232 | + if (time.startTimeOffset.seconds === undefined) { | ||
233 | + time.startTimeOffset.seconds = 0; | ||
234 | + } | ||
235 | + if (time.startTimeOffset.nanos === undefined) { | ||
236 | + time.startTimeOffset.nanos = 0; | ||
237 | + } | ||
238 | + if (time.endTimeOffset.seconds === undefined) { | ||
239 | + time.endTimeOffset.seconds = 0; | ||
240 | + } | ||
241 | + if (time.endTimeOffset.nanos === undefined) { | ||
242 | + time.endTimeOffset.nanos = 0; | ||
243 | + } | ||
244 | + console.log( | ||
245 | + `\tStart: ${time.startTimeOffset.seconds}` + | ||
246 | + `.${(time.startTimeOffset.nanos / 1e6).toFixed(0)}s` | ||
247 | + ); | ||
248 | + console.log( | ||
249 | + `\tEnd: ${time.endTimeOffset.seconds}.` + | ||
250 | + `${(time.endTimeOffset.nanos / 1e6).toFixed(0)}s` | ||
251 | + ); | ||
252 | + console.log(`\tConfidence: ${segment.confidence}`); | ||
253 | + var temp = [time.startTimeOffset.seconds + '.' + (time.startTimeOffset.nanos / 1e6).toFixed(0), | ||
254 | + time.endTimeOffset.seconds + '.' + (time.endTimeOffset.nanos / 1e6).toFixed(0), | ||
255 | + segment.confidence]; | ||
256 | + content[label.entity.description].push(temp); | ||
257 | + }); | ||
258 | + }); | ||
259 | + console.log(content); | ||
260 | + video_label_result.push(content); | ||
261 | +} | ||
262 | + | ||
263 | +async function get_content_detection(path){ | ||
264 | + var video_name = path.split('/'); | ||
265 | + video_name = video_name[video_name.length-1]; | ||
266 | + | ||
267 | + // Creates a client | ||
268 | + const client = new video.VideoIntelligenceServiceClient(); | ||
269 | + | ||
270 | + var video_path = __dirname+'\\' + video_name; | ||
271 | + var temp = video_path.split('\\'); | ||
272 | + var beforeslice = ''; | ||
273 | + for(var i = 0; i < temp.length; i++){ | ||
274 | + beforeslice += temp[i] + '/'; | ||
275 | + } | ||
276 | + | ||
277 | + const vpath = beforeslice.slice(0,-1); | ||
278 | + console.log(vpath); | ||
279 | + // Reads a local video file and converts it to base64 | ||
280 | + const readFile = util.promisify(fs.readFile); | ||
281 | + const file = await readFile(vpath); | ||
282 | + const inputContent = file.toString('base64'); | ||
283 | + console.log("video convert"); | ||
284 | + | ||
285 | + const request = { | ||
286 | + inputContent: inputContent, | ||
287 | + features: ['EXPLICIT_CONTENT_DETECTION'], | ||
288 | + }; | ||
289 | + | ||
290 | + // Human-readable likelihoods | ||
291 | + const likelihoods = [ | ||
292 | + 'UNKNOWN', | ||
293 | + 'VERY_UNLIKELY', | ||
294 | + 'UNLIKELY', | ||
295 | + 'POSSIBLE', | ||
296 | + 'LIKELY', | ||
297 | + 'VERY_LIKELY', | ||
298 | + ]; | ||
299 | + | ||
300 | + // Detects unsafe content | ||
301 | + const [opertaion] = await client.annotateVideo(request); | ||
302 | + console.log('Waiting for operation to complete...'); | ||
303 | + const [operationResult] = await opertaion.promise(); | ||
304 | + // Gets unsafe content | ||
305 | + const explicitContentResults = | ||
306 | + operationResult.annotationResults[0].explicitAnnotation; | ||
307 | + console.log('Explicit annotation results:'); | ||
308 | + var content = {video : video_name, likelihood : []} | ||
309 | + explicitContentResults.frames.forEach(result => { | ||
310 | + if (result.timeOffset === undefined) { | ||
311 | + result.timeOffset = {}; | ||
312 | + } | ||
313 | + if (result.timeOffset.seconds === undefined) { | ||
314 | + result.timeOffset.seconds = 0; | ||
315 | + } | ||
316 | + if (result.timeOffset.nanos === undefined) { | ||
317 | + result.timeOffset.nanos = 0; | ||
318 | + } | ||
319 | + console.log( | ||
320 | + `\tTime: ${result.timeOffset.seconds}` + | ||
321 | + `.${(result.timeOffset.nanos / 1e6).toFixed(0)}s` | ||
322 | + ); | ||
323 | + console.log( | ||
324 | + `\t\tPornography likelihood: ${likelihoods[result.pornographyLikelihood]}` | ||
325 | + ); | ||
326 | + var temp = [result.timeOffset.seconds + '.' + (result.timeOffset.nanos / 1e6).toFixed(0), | ||
327 | + likelihoods[result.pornographyLikelihood]]; | ||
328 | + content['likelihood'].push(temp); | ||
329 | + }); | ||
330 | + console.log(content); | ||
331 | + video_detect_result.push(content); | ||
332 | +} | ||
123 | 333 | ||
124 | //detext unsafe image | 334 | //detext unsafe image |
125 | let detect_result = new Array(); | 335 | let detect_result = new Array(); |
... | @@ -202,4 +412,4 @@ ipcMain.on("device-name", (e, arg) => { | ... | @@ -202,4 +412,4 @@ ipcMain.on("device-name", (e, arg) => { |
202 | }) | 412 | }) |
203 | //이전에 사용한 photos 폴더 삭제 | 413 | //이전에 사용한 photos 폴더 삭제 |
204 | var rimraf = require("rimraf"); | 414 | var rimraf = require("rimraf"); |
205 | -rimraf("./photos", function(){console.log("")}); | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
415 | +rimraf("./photos", function(){console.log("")}); | ... | ... |
... | @@ -34,6 +34,14 @@ | ... | @@ -34,6 +34,14 @@ |
34 | "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.1.tgz", | 34 | "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-2.0.1.tgz", |
35 | "integrity": "sha512-82EQzwrNauw1fkbUSr3f+50Bcq7g4h0XvLOk8C5e9ABkXYHei7ZPi9tiMMD7Vh3SfcdH97d1ibJ3KBWp2o1J+w==" | 35 | "integrity": "sha512-82EQzwrNauw1fkbUSr3f+50Bcq7g4h0XvLOk8C5e9ABkXYHei7ZPi9tiMMD7Vh3SfcdH97d1ibJ3KBWp2o1J+w==" |
36 | }, | 36 | }, |
37 | + "@google-cloud/video-intelligence": { | ||
38 | + "version": "3.0.0", | ||
39 | + "resolved": "https://registry.npmjs.org/@google-cloud/video-intelligence/-/video-intelligence-3.0.0.tgz", | ||
40 | + "integrity": "sha512-ZkKBdWwO7CTm/zUwkSumdstR/CfHFdbkXT/OaDR3v/0+5M5qS4IaFnRbtbHKvKvgKzJJHleQ0E80DkTZsjI57g==", | ||
41 | + "requires": { | ||
42 | + "google-gax": "^2.1.0" | ||
43 | + } | ||
44 | + }, | ||
37 | "@google-cloud/vision": { | 45 | "@google-cloud/vision": { |
38 | "version": "2.0.0", | 46 | "version": "2.0.0", |
39 | "resolved": "https://registry.npmjs.org/@google-cloud/vision/-/vision-2.0.0.tgz", | 47 | "resolved": "https://registry.npmjs.org/@google-cloud/vision/-/vision-2.0.0.tgz", |
... | @@ -498,6 +506,11 @@ | ... | @@ -498,6 +506,11 @@ |
498 | "integrity": "sha512-BneGN0J9ke24lBRn44hVHNeDlrXRYF+VRp0HbSUNnEZahXGAysHZIqnf/hER6aabdBgzM4YOV4jrR8gj4Zfi0g==", | 506 | "integrity": "sha512-BneGN0J9ke24lBRn44hVHNeDlrXRYF+VRp0HbSUNnEZahXGAysHZIqnf/hER6aabdBgzM4YOV4jrR8gj4Zfi0g==", |
499 | "dev": true | 507 | "dev": true |
500 | }, | 508 | }, |
509 | + "abbrev": { | ||
510 | + "version": "1.1.1", | ||
511 | + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", | ||
512 | + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" | ||
513 | + }, | ||
501 | "abort-controller": { | 514 | "abort-controller": { |
502 | "version": "3.0.0", | 515 | "version": "3.0.0", |
503 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", | 516 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", |
... | @@ -554,6 +567,15 @@ | ... | @@ -554,6 +567,15 @@ |
554 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", | 567 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", |
555 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" | 568 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" |
556 | }, | 569 | }, |
570 | + "ansi-styles": { | ||
571 | + "version": "3.2.1", | ||
572 | + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", | ||
573 | + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", | ||
574 | + "dev": true, | ||
575 | + "requires": { | ||
576 | + "color-convert": "^1.9.0" | ||
577 | + } | ||
578 | + }, | ||
557 | "any-base": { | 579 | "any-base": { |
558 | "version": "1.1.0", | 580 | "version": "1.1.0", |
559 | "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", | 581 | "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", |
... | @@ -851,6 +873,11 @@ | ... | @@ -851,6 +873,11 @@ |
851 | "dev": true, | 873 | "dev": true, |
852 | "optional": true | 874 | "optional": true |
853 | }, | 875 | }, |
876 | + "bootstrap-icons": { | ||
877 | + "version": "1.0.0-alpha4", | ||
878 | + "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.0.0-alpha4.tgz", | ||
879 | + "integrity": "sha512-UcpSUPsvUiW7ueBQfXZSgknJv/rj060dglhWIRPjkLjUWa32jMWqsLXO8tXY2od4Ew6cuh0BJ3f8VOhQPVY4mA==" | ||
880 | + }, | ||
854 | "bplist-creator": { | 881 | "bplist-creator": { |
855 | "version": "0.0.8", | 882 | "version": "0.0.8", |
856 | "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.8.tgz", | 883 | "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.0.8.tgz", |
... | @@ -942,11 +969,36 @@ | ... | @@ -942,11 +969,36 @@ |
942 | "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", | 969 | "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", |
943 | "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" | 970 | "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" |
944 | }, | 971 | }, |
972 | + "camelcase": { | ||
973 | + "version": "5.3.1", | ||
974 | + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", | ||
975 | + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", | ||
976 | + "dev": true | ||
977 | + }, | ||
945 | "caseless": { | 978 | "caseless": { |
946 | "version": "0.12.0", | 979 | "version": "0.12.0", |
947 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", | 980 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", |
948 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" | 981 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" |
949 | }, | 982 | }, |
983 | + "chalk": { | ||
984 | + "version": "2.4.2", | ||
985 | + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", | ||
986 | + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", | ||
987 | + "dev": true, | ||
988 | + "requires": { | ||
989 | + "ansi-styles": "^3.2.1", | ||
990 | + "escape-string-regexp": "^1.0.5", | ||
991 | + "supports-color": "^5.3.0" | ||
992 | + }, | ||
993 | + "dependencies": { | ||
994 | + "escape-string-regexp": { | ||
995 | + "version": "1.0.5", | ||
996 | + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", | ||
997 | + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", | ||
998 | + "dev": true | ||
999 | + } | ||
1000 | + } | ||
1001 | + }, | ||
950 | "chart.js": { | 1002 | "chart.js": { |
951 | "version": "2.9.3", | 1003 | "version": "2.9.3", |
952 | "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.3.tgz", | 1004 | "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.3.tgz", |
... | @@ -973,6 +1025,77 @@ | ... | @@ -973,6 +1025,77 @@ |
973 | "color-name": "^1.0.0" | 1025 | "color-name": "^1.0.0" |
974 | } | 1026 | } |
975 | }, | 1027 | }, |
1028 | + "chownr": { | ||
1029 | + "version": "1.1.4", | ||
1030 | + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", | ||
1031 | + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" | ||
1032 | + }, | ||
1033 | + "cli-cursor": { | ||
1034 | + "version": "2.1.0", | ||
1035 | + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", | ||
1036 | + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", | ||
1037 | + "dev": true, | ||
1038 | + "requires": { | ||
1039 | + "restore-cursor": "^2.0.0" | ||
1040 | + } | ||
1041 | + }, | ||
1042 | + "cli-spinners": { | ||
1043 | + "version": "2.3.0", | ||
1044 | + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.3.0.tgz", | ||
1045 | + "integrity": "sha512-Xs2Hf2nzrvJMFKimOR7YR0QwZ8fc0u98kdtwN1eNAZzNQgH3vK2pXzff6GJtKh7S5hoJ87ECiAiZFS2fb5Ii2w==", | ||
1046 | + "dev": true | ||
1047 | + }, | ||
1048 | + "cliui": { | ||
1049 | + "version": "5.0.0", | ||
1050 | + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", | ||
1051 | + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", | ||
1052 | + "dev": true, | ||
1053 | + "requires": { | ||
1054 | + "string-width": "^3.1.0", | ||
1055 | + "strip-ansi": "^5.2.0", | ||
1056 | + "wrap-ansi": "^5.1.0" | ||
1057 | + }, | ||
1058 | + "dependencies": { | ||
1059 | + "ansi-regex": { | ||
1060 | + "version": "4.1.0", | ||
1061 | + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", | ||
1062 | + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", | ||
1063 | + "dev": true | ||
1064 | + }, | ||
1065 | + "is-fullwidth-code-point": { | ||
1066 | + "version": "2.0.0", | ||
1067 | + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", | ||
1068 | + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", | ||
1069 | + "dev": true | ||
1070 | + }, | ||
1071 | + "string-width": { | ||
1072 | + "version": "3.1.0", | ||
1073 | + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", | ||
1074 | + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", | ||
1075 | + "dev": true, | ||
1076 | + "requires": { | ||
1077 | + "emoji-regex": "^7.0.1", | ||
1078 | + "is-fullwidth-code-point": "^2.0.0", | ||
1079 | + "strip-ansi": "^5.1.0" | ||
1080 | + } | ||
1081 | + }, | ||
1082 | + "strip-ansi": { | ||
1083 | + "version": "5.2.0", | ||
1084 | + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", | ||
1085 | + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", | ||
1086 | + "dev": true, | ||
1087 | + "requires": { | ||
1088 | + "ansi-regex": "^4.1.0" | ||
1089 | + } | ||
1090 | + } | ||
1091 | + } | ||
1092 | + }, | ||
1093 | + "clone": { | ||
1094 | + "version": "1.0.4", | ||
1095 | + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", | ||
1096 | + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", | ||
1097 | + "dev": true | ||
1098 | + }, | ||
976 | "clone-response": { | 1099 | "clone-response": { |
977 | "version": "1.0.2", | 1100 | "version": "1.0.2", |
978 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", | 1101 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", |
... | @@ -993,19 +1116,18 @@ | ... | @@ -993,19 +1116,18 @@ |
993 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", | 1116 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", |
994 | "requires": { | 1117 | "requires": { |
995 | "color-name": "1.1.3" | 1118 | "color-name": "1.1.3" |
996 | - }, | ||
997 | - "dependencies": { | ||
998 | - "color-name": { | ||
999 | - "version": "1.1.3", | ||
1000 | - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", | ||
1001 | - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" | ||
1002 | - } | ||
1003 | } | 1119 | } |
1004 | }, | 1120 | }, |
1005 | "color-name": { | 1121 | "color-name": { |
1006 | - "version": "1.1.4", | 1122 | + "version": "1.1.3", |
1007 | - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", | 1123 | + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", |
1008 | - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" | 1124 | + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" |
1125 | + }, | ||
1126 | + "colors": { | ||
1127 | + "version": "1.4.0", | ||
1128 | + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", | ||
1129 | + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", | ||
1130 | + "dev": true | ||
1009 | }, | 1131 | }, |
1010 | "combined-stream": { | 1132 | "combined-stream": { |
1011 | "version": "1.0.8", | 1133 | "version": "1.0.8", |
... | @@ -1133,6 +1255,12 @@ | ... | @@ -1133,6 +1255,12 @@ |
1133 | "ms": "^2.1.1" | 1255 | "ms": "^2.1.1" |
1134 | } | 1256 | } |
1135 | }, | 1257 | }, |
1258 | + "decamelize": { | ||
1259 | + "version": "1.2.0", | ||
1260 | + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", | ||
1261 | + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", | ||
1262 | + "dev": true | ||
1263 | + }, | ||
1136 | "decompress-response": { | 1264 | "decompress-response": { |
1137 | "version": "3.3.0", | 1265 | "version": "3.3.0", |
1138 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", | 1266 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", |
... | @@ -1142,6 +1270,20 @@ | ... | @@ -1142,6 +1270,20 @@ |
1142 | "mimic-response": "^1.0.0" | 1270 | "mimic-response": "^1.0.0" |
1143 | } | 1271 | } |
1144 | }, | 1272 | }, |
1273 | + "deep-extend": { | ||
1274 | + "version": "0.6.0", | ||
1275 | + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", | ||
1276 | + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" | ||
1277 | + }, | ||
1278 | + "defaults": { | ||
1279 | + "version": "1.0.3", | ||
1280 | + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", | ||
1281 | + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", | ||
1282 | + "dev": true, | ||
1283 | + "requires": { | ||
1284 | + "clone": "^1.0.2" | ||
1285 | + } | ||
1286 | + }, | ||
1145 | "defer-to-connect": { | 1287 | "defer-to-connect": { |
1146 | "version": "1.1.3", | 1288 | "version": "1.1.3", |
1147 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", | 1289 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", |
... | @@ -1168,6 +1310,11 @@ | ... | @@ -1168,6 +1310,11 @@ |
1168 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", | 1310 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", |
1169 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" | 1311 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" |
1170 | }, | 1312 | }, |
1313 | + "detect-libc": { | ||
1314 | + "version": "1.0.3", | ||
1315 | + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", | ||
1316 | + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" | ||
1317 | + }, | ||
1171 | "detect-node": { | 1318 | "detect-node": { |
1172 | "version": "2.0.4", | 1319 | "version": "2.0.4", |
1173 | "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", | 1320 | "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", |
... | @@ -1230,6 +1377,34 @@ | ... | @@ -1230,6 +1377,34 @@ |
1230 | "extract-zip": "^1.0.3" | 1377 | "extract-zip": "^1.0.3" |
1231 | } | 1378 | } |
1232 | }, | 1379 | }, |
1380 | + "electron-log": { | ||
1381 | + "version": "4.2.0", | ||
1382 | + "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-4.2.0.tgz", | ||
1383 | + "integrity": "sha512-Yy1X8iZEzoBA8pu5b7YU07dRHi1GPM9C5jLEOn87Uqtdc9rbe6KbvvQ/AAAtGvn4/GC3azRW/eeiSI4ZF+Hm2A==" | ||
1384 | + }, | ||
1385 | + "electron-rebuild": { | ||
1386 | + "version": "1.11.0", | ||
1387 | + "resolved": "https://registry.npmjs.org/electron-rebuild/-/electron-rebuild-1.11.0.tgz", | ||
1388 | + "integrity": "sha512-cn6AqZBQBVtaEyj5jZW1/LOezZZ22PA1HvhEP7asvYPJ8PDF4i4UFt9be4i9T7xJKiSiomXvY5Fd+dSq3FXZxA==", | ||
1389 | + "dev": true, | ||
1390 | + "requires": { | ||
1391 | + "colors": "^1.3.3", | ||
1392 | + "debug": "^4.1.1", | ||
1393 | + "detect-libc": "^1.0.3", | ||
1394 | + "fs-extra": "^8.1.0", | ||
1395 | + "node-abi": "^2.11.0", | ||
1396 | + "node-gyp": "^6.0.1", | ||
1397 | + "ora": "^3.4.0", | ||
1398 | + "spawn-rx": "^3.0.0", | ||
1399 | + "yargs": "^14.2.0" | ||
1400 | + } | ||
1401 | + }, | ||
1402 | + "emoji-regex": { | ||
1403 | + "version": "7.0.3", | ||
1404 | + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", | ||
1405 | + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", | ||
1406 | + "dev": true | ||
1407 | + }, | ||
1233 | "encodeurl": { | 1408 | "encodeurl": { |
1234 | "version": "1.0.2", | 1409 | "version": "1.0.2", |
1235 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", | 1410 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", |
... | @@ -1400,6 +1575,15 @@ | ... | @@ -1400,6 +1575,15 @@ |
1400 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", | 1575 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", |
1401 | "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==" | 1576 | "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==" |
1402 | }, | 1577 | }, |
1578 | + "find-up": { | ||
1579 | + "version": "3.0.0", | ||
1580 | + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", | ||
1581 | + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", | ||
1582 | + "dev": true, | ||
1583 | + "requires": { | ||
1584 | + "locate-path": "^3.0.0" | ||
1585 | + } | ||
1586 | + }, | ||
1403 | "forever-agent": { | 1587 | "forever-agent": { |
1404 | "version": "0.6.1", | 1588 | "version": "0.6.1", |
1405 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", | 1589 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", |
... | @@ -1431,6 +1615,14 @@ | ... | @@ -1431,6 +1615,14 @@ |
1431 | "universalify": "^0.1.0" | 1615 | "universalify": "^0.1.0" |
1432 | } | 1616 | } |
1433 | }, | 1617 | }, |
1618 | + "fs-minipass": { | ||
1619 | + "version": "1.2.7", | ||
1620 | + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", | ||
1621 | + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", | ||
1622 | + "requires": { | ||
1623 | + "minipass": "^2.6.0" | ||
1624 | + } | ||
1625 | + }, | ||
1434 | "fs.realpath": { | 1626 | "fs.realpath": { |
1435 | "version": "1.0.0", | 1627 | "version": "1.0.0", |
1436 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", | 1628 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", |
... | @@ -1503,6 +1695,12 @@ | ... | @@ -1503,6 +1695,12 @@ |
1503 | "json-bigint": "^0.3.0" | 1695 | "json-bigint": "^0.3.0" |
1504 | } | 1696 | } |
1505 | }, | 1697 | }, |
1698 | + "get-caller-file": { | ||
1699 | + "version": "2.0.5", | ||
1700 | + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", | ||
1701 | + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", | ||
1702 | + "dev": true | ||
1703 | + }, | ||
1506 | "get-stream": { | 1704 | "get-stream": { |
1507 | "version": "4.1.0", | 1705 | "version": "4.1.0", |
1508 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", | 1706 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", |
... | @@ -1598,9 +1796,9 @@ | ... | @@ -1598,9 +1796,9 @@ |
1598 | } | 1796 | } |
1599 | }, | 1797 | }, |
1600 | "google-gax": { | 1798 | "google-gax": { |
1601 | - "version": "2.6.1", | 1799 | + "version": "2.6.0", |
1602 | - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.6.1.tgz", | 1800 | + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-2.6.0.tgz", |
1603 | - "integrity": "sha512-AKQKfaaXCJhMrP4nniz/ei7j+uyqG7nNrGmQxDBIBtDMUbZUMnH0Kw8asts35vmciEV5UeIWfclVcAU+VaJptw==", | 1801 | + "integrity": "sha512-ALyNwrDkFMd5x+egpHVjX4BrWLbnC1XWcpKI7xdkYw4vpZlU+Yh/JrOPA93+uxKFmBy2LB564cJk/o7Yfbkubg==", |
1604 | "requires": { | 1802 | "requires": { |
1605 | "@grpc/grpc-js": "~1.0.0", | 1803 | "@grpc/grpc-js": "~1.0.0", |
1606 | "@grpc/proto-loader": "^0.5.1", | 1804 | "@grpc/proto-loader": "^0.5.1", |
... | @@ -1709,6 +1907,12 @@ | ... | @@ -1709,6 +1907,12 @@ |
1709 | "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", | 1907 | "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", |
1710 | "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" | 1908 | "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" |
1711 | }, | 1909 | }, |
1910 | + "has-flag": { | ||
1911 | + "version": "3.0.0", | ||
1912 | + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", | ||
1913 | + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", | ||
1914 | + "dev": true | ||
1915 | + }, | ||
1712 | "has-unicode": { | 1916 | "has-unicode": { |
1713 | "version": "2.0.1", | 1917 | "version": "2.0.1", |
1714 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", | 1918 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", |
... | @@ -1739,11 +1943,27 @@ | ... | @@ -1739,11 +1943,27 @@ |
1739 | "debug": "4" | 1943 | "debug": "4" |
1740 | } | 1944 | } |
1741 | }, | 1945 | }, |
1946 | + "iconv-lite": { | ||
1947 | + "version": "0.4.24", | ||
1948 | + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", | ||
1949 | + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", | ||
1950 | + "requires": { | ||
1951 | + "safer-buffer": ">= 2.1.2 < 3" | ||
1952 | + } | ||
1953 | + }, | ||
1742 | "ieee754": { | 1954 | "ieee754": { |
1743 | "version": "1.1.13", | 1955 | "version": "1.1.13", |
1744 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", | 1956 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", |
1745 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" | 1957 | "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" |
1746 | }, | 1958 | }, |
1959 | + "ignore-walk": { | ||
1960 | + "version": "3.0.3", | ||
1961 | + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", | ||
1962 | + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", | ||
1963 | + "requires": { | ||
1964 | + "minimatch": "^3.0.4" | ||
1965 | + } | ||
1966 | + }, | ||
1747 | "indexof": { | 1967 | "indexof": { |
1748 | "version": "0.0.1", | 1968 | "version": "0.0.1", |
1749 | "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", | 1969 | "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", |
... | @@ -1766,9 +1986,7 @@ | ... | @@ -1766,9 +1986,7 @@ |
1766 | "ini": { | 1986 | "ini": { |
1767 | "version": "1.3.5", | 1987 | "version": "1.3.5", |
1768 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", | 1988 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", |
1769 | - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", | 1989 | + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" |
1770 | - "dev": true, | ||
1771 | - "optional": true | ||
1772 | }, | 1990 | }, |
1773 | "is": { | 1991 | "is": { |
1774 | "version": "3.3.0", | 1992 | "version": "3.3.0", |
... | @@ -1984,11 +2202,27 @@ | ... | @@ -1984,11 +2202,27 @@ |
1984 | "xtend": "^4.0.0" | 2202 | "xtend": "^4.0.0" |
1985 | } | 2203 | } |
1986 | }, | 2204 | }, |
2205 | + "locate-path": { | ||
2206 | + "version": "3.0.0", | ||
2207 | + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", | ||
2208 | + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", | ||
2209 | + "dev": true, | ||
2210 | + "requires": { | ||
2211 | + "p-locate": "^3.0.0", | ||
2212 | + "path-exists": "^3.0.0" | ||
2213 | + } | ||
2214 | + }, | ||
1987 | "lodash": { | 2215 | "lodash": { |
1988 | "version": "4.17.15", | 2216 | "version": "4.17.15", |
1989 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", | 2217 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", |
1990 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" | 2218 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" |
1991 | }, | 2219 | }, |
2220 | + "lodash.assign": { | ||
2221 | + "version": "4.2.0", | ||
2222 | + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", | ||
2223 | + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", | ||
2224 | + "dev": true | ||
2225 | + }, | ||
1992 | "lodash.at": { | 2226 | "lodash.at": { |
1993 | "version": "4.6.0", | 2227 | "version": "4.6.0", |
1994 | "resolved": "https://registry.npmjs.org/lodash.at/-/lodash.at-4.6.0.tgz", | 2228 | "resolved": "https://registry.npmjs.org/lodash.at/-/lodash.at-4.6.0.tgz", |
... | @@ -2029,6 +2263,15 @@ | ... | @@ -2029,6 +2263,15 @@ |
2029 | "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", | 2263 | "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", |
2030 | "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" | 2264 | "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=" |
2031 | }, | 2265 | }, |
2266 | + "log-symbols": { | ||
2267 | + "version": "2.2.0", | ||
2268 | + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", | ||
2269 | + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", | ||
2270 | + "dev": true, | ||
2271 | + "requires": { | ||
2272 | + "chalk": "^2.0.1" | ||
2273 | + } | ||
2274 | + }, | ||
2032 | "long": { | 2275 | "long": { |
2033 | "version": "4.0.0", | 2276 | "version": "4.0.0", |
2034 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", | 2277 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", |
... | @@ -2081,6 +2324,12 @@ | ... | @@ -2081,6 +2324,12 @@ |
2081 | "mime-db": "1.43.0" | 2324 | "mime-db": "1.43.0" |
2082 | } | 2325 | } |
2083 | }, | 2326 | }, |
2327 | + "mimic-fn": { | ||
2328 | + "version": "1.2.0", | ||
2329 | + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", | ||
2330 | + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", | ||
2331 | + "dev": true | ||
2332 | + }, | ||
2084 | "mimic-response": { | 2333 | "mimic-response": { |
2085 | "version": "1.0.1", | 2334 | "version": "1.0.1", |
2086 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", | 2335 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", |
... | @@ -2108,6 +2357,23 @@ | ... | @@ -2108,6 +2357,23 @@ |
2108 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", | 2357 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", |
2109 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" | 2358 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" |
2110 | }, | 2359 | }, |
2360 | + "minipass": { | ||
2361 | + "version": "2.9.0", | ||
2362 | + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", | ||
2363 | + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", | ||
2364 | + "requires": { | ||
2365 | + "safe-buffer": "^5.1.2", | ||
2366 | + "yallist": "^3.0.0" | ||
2367 | + } | ||
2368 | + }, | ||
2369 | + "minizlib": { | ||
2370 | + "version": "1.3.3", | ||
2371 | + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", | ||
2372 | + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", | ||
2373 | + "requires": { | ||
2374 | + "minipass": "^2.9.0" | ||
2375 | + } | ||
2376 | + }, | ||
2111 | "mjpeg-server": { | 2377 | "mjpeg-server": { |
2112 | "version": "0.3.0", | 2378 | "version": "0.3.0", |
2113 | "resolved": "https://registry.npmjs.org/mjpeg-server/-/mjpeg-server-0.3.0.tgz", | 2379 | "resolved": "https://registry.npmjs.org/mjpeg-server/-/mjpeg-server-0.3.0.tgz", |
... | @@ -2174,16 +2440,58 @@ | ... | @@ -2174,16 +2440,58 @@ |
2174 | "sqlstring": "2.3.1" | 2440 | "sqlstring": "2.3.1" |
2175 | } | 2441 | } |
2176 | }, | 2442 | }, |
2443 | + "nan": { | ||
2444 | + "version": "2.14.1", | ||
2445 | + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", | ||
2446 | + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==" | ||
2447 | + }, | ||
2177 | "ncp": { | 2448 | "ncp": { |
2178 | "version": "2.0.0", | 2449 | "version": "2.0.0", |
2179 | "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", | 2450 | "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", |
2180 | "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=" | 2451 | "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=" |
2181 | }, | 2452 | }, |
2453 | + "needle": { | ||
2454 | + "version": "2.5.0", | ||
2455 | + "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.0.tgz", | ||
2456 | + "integrity": "sha512-o/qITSDR0JCyCKEQ1/1bnUXMmznxabbwi/Y4WwJElf+evwJNFNwIDMCCt5IigFVxgeGBJESLohGtIS9gEzo1fA==", | ||
2457 | + "requires": { | ||
2458 | + "debug": "^3.2.6", | ||
2459 | + "iconv-lite": "^0.4.4", | ||
2460 | + "sax": "^1.2.4" | ||
2461 | + }, | ||
2462 | + "dependencies": { | ||
2463 | + "debug": { | ||
2464 | + "version": "3.2.6", | ||
2465 | + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", | ||
2466 | + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", | ||
2467 | + "requires": { | ||
2468 | + "ms": "^2.1.1" | ||
2469 | + } | ||
2470 | + } | ||
2471 | + } | ||
2472 | + }, | ||
2182 | "negotiator": { | 2473 | "negotiator": { |
2183 | "version": "0.6.2", | 2474 | "version": "0.6.2", |
2184 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", | 2475 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", |
2185 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" | 2476 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" |
2186 | }, | 2477 | }, |
2478 | + "node-abi": { | ||
2479 | + "version": "2.18.0", | ||
2480 | + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.18.0.tgz", | ||
2481 | + "integrity": "sha512-yi05ZoiuNNEbyT/xXfSySZE+yVnQW6fxPZuFbLyS1s6b5Kw3HzV2PHOM4XR+nsjzkHxByK+2Wg+yCQbe35l8dw==", | ||
2482 | + "dev": true, | ||
2483 | + "requires": { | ||
2484 | + "semver": "^5.4.1" | ||
2485 | + }, | ||
2486 | + "dependencies": { | ||
2487 | + "semver": { | ||
2488 | + "version": "5.7.1", | ||
2489 | + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", | ||
2490 | + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", | ||
2491 | + "dev": true | ||
2492 | + } | ||
2493 | + } | ||
2494 | + }, | ||
2187 | "node-adb": { | 2495 | "node-adb": { |
2188 | "version": "0.1.6", | 2496 | "version": "0.1.6", |
2189 | "resolved": "https://registry.npmjs.org/node-adb/-/node-adb-0.1.6.tgz", | 2497 | "resolved": "https://registry.npmjs.org/node-adb/-/node-adb-0.1.6.tgz", |
... | @@ -2199,6 +2507,92 @@ | ... | @@ -2199,6 +2507,92 @@ |
2199 | "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.1.tgz", | 2507 | "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.1.tgz", |
2200 | "integrity": "sha512-G6RlQt5Sb4GMBzXvhfkeFmbqR6MzhtnT7VTHuLadjkii3rdYHNdw0m8zA4BTxVIh68FicCQ2NSUANpsqkr9jvQ==" | 2508 | "integrity": "sha512-G6RlQt5Sb4GMBzXvhfkeFmbqR6MzhtnT7VTHuLadjkii3rdYHNdw0m8zA4BTxVIh68FicCQ2NSUANpsqkr9jvQ==" |
2201 | }, | 2509 | }, |
2510 | + "node-gyp": { | ||
2511 | + "version": "6.1.0", | ||
2512 | + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-6.1.0.tgz", | ||
2513 | + "integrity": "sha512-h4A2zDlOujeeaaTx06r4Vy+8MZ1679lU+wbCKDS4ZtvY2A37DESo37oejIw0mtmR3+rvNwts5B6Kpt1KrNYdNw==", | ||
2514 | + "dev": true, | ||
2515 | + "requires": { | ||
2516 | + "env-paths": "^2.2.0", | ||
2517 | + "glob": "^7.1.4", | ||
2518 | + "graceful-fs": "^4.2.2", | ||
2519 | + "mkdirp": "^0.5.1", | ||
2520 | + "nopt": "^4.0.1", | ||
2521 | + "npmlog": "^4.1.2", | ||
2522 | + "request": "^2.88.0", | ||
2523 | + "rimraf": "^2.6.3", | ||
2524 | + "semver": "^5.7.1", | ||
2525 | + "tar": "^4.4.12", | ||
2526 | + "which": "^1.3.1" | ||
2527 | + }, | ||
2528 | + "dependencies": { | ||
2529 | + "rimraf": { | ||
2530 | + "version": "2.7.1", | ||
2531 | + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", | ||
2532 | + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", | ||
2533 | + "dev": true, | ||
2534 | + "requires": { | ||
2535 | + "glob": "^7.1.3" | ||
2536 | + } | ||
2537 | + }, | ||
2538 | + "semver": { | ||
2539 | + "version": "5.7.1", | ||
2540 | + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", | ||
2541 | + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", | ||
2542 | + "dev": true | ||
2543 | + }, | ||
2544 | + "which": { | ||
2545 | + "version": "1.3.1", | ||
2546 | + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", | ||
2547 | + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", | ||
2548 | + "dev": true, | ||
2549 | + "requires": { | ||
2550 | + "isexe": "^2.0.0" | ||
2551 | + } | ||
2552 | + } | ||
2553 | + } | ||
2554 | + }, | ||
2555 | + "node-pre-gyp": { | ||
2556 | + "version": "0.11.0", | ||
2557 | + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", | ||
2558 | + "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", | ||
2559 | + "requires": { | ||
2560 | + "detect-libc": "^1.0.2", | ||
2561 | + "mkdirp": "^0.5.1", | ||
2562 | + "needle": "^2.2.1", | ||
2563 | + "nopt": "^4.0.1", | ||
2564 | + "npm-packlist": "^1.1.6", | ||
2565 | + "npmlog": "^4.0.2", | ||
2566 | + "rc": "^1.2.7", | ||
2567 | + "rimraf": "^2.6.1", | ||
2568 | + "semver": "^5.3.0", | ||
2569 | + "tar": "^4" | ||
2570 | + }, | ||
2571 | + "dependencies": { | ||
2572 | + "rimraf": { | ||
2573 | + "version": "2.7.1", | ||
2574 | + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", | ||
2575 | + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", | ||
2576 | + "requires": { | ||
2577 | + "glob": "^7.1.3" | ||
2578 | + } | ||
2579 | + }, | ||
2580 | + "semver": { | ||
2581 | + "version": "5.7.1", | ||
2582 | + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", | ||
2583 | + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" | ||
2584 | + } | ||
2585 | + } | ||
2586 | + }, | ||
2587 | + "nopt": { | ||
2588 | + "version": "4.0.3", | ||
2589 | + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", | ||
2590 | + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", | ||
2591 | + "requires": { | ||
2592 | + "abbrev": "1", | ||
2593 | + "osenv": "^0.1.4" | ||
2594 | + } | ||
2595 | + }, | ||
2202 | "normalize-path": { | 2596 | "normalize-path": { |
2203 | "version": "3.0.0", | 2597 | "version": "3.0.0", |
2204 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", | 2598 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", |
... | @@ -2210,6 +2604,14 @@ | ... | @@ -2210,6 +2604,14 @@ |
2210 | "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", | 2604 | "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", |
2211 | "dev": true | 2605 | "dev": true |
2212 | }, | 2606 | }, |
2607 | + "npm-bundled": { | ||
2608 | + "version": "1.1.1", | ||
2609 | + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", | ||
2610 | + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", | ||
2611 | + "requires": { | ||
2612 | + "npm-normalize-package-bin": "^1.0.1" | ||
2613 | + } | ||
2614 | + }, | ||
2213 | "npm-conf": { | 2615 | "npm-conf": { |
2214 | "version": "1.1.3", | 2616 | "version": "1.1.3", |
2215 | "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", | 2617 | "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", |
... | @@ -2221,6 +2623,21 @@ | ... | @@ -2221,6 +2623,21 @@ |
2221 | "pify": "^3.0.0" | 2623 | "pify": "^3.0.0" |
2222 | } | 2624 | } |
2223 | }, | 2625 | }, |
2626 | + "npm-normalize-package-bin": { | ||
2627 | + "version": "1.0.1", | ||
2628 | + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", | ||
2629 | + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" | ||
2630 | + }, | ||
2631 | + "npm-packlist": { | ||
2632 | + "version": "1.4.8", | ||
2633 | + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", | ||
2634 | + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", | ||
2635 | + "requires": { | ||
2636 | + "ignore-walk": "^3.0.1", | ||
2637 | + "npm-bundled": "^1.0.1", | ||
2638 | + "npm-normalize-package-bin": "^1.0.1" | ||
2639 | + } | ||
2640 | + }, | ||
2224 | "npmlog": { | 2641 | "npmlog": { |
2225 | "version": "4.1.2", | 2642 | "version": "4.1.2", |
2226 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", | 2643 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", |
... | @@ -2272,12 +2689,95 @@ | ... | @@ -2272,12 +2689,95 @@ |
2272 | "wrappy": "1" | 2689 | "wrappy": "1" |
2273 | } | 2690 | } |
2274 | }, | 2691 | }, |
2692 | + "onetime": { | ||
2693 | + "version": "2.0.1", | ||
2694 | + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", | ||
2695 | + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", | ||
2696 | + "dev": true, | ||
2697 | + "requires": { | ||
2698 | + "mimic-fn": "^1.0.0" | ||
2699 | + } | ||
2700 | + }, | ||
2701 | + "ora": { | ||
2702 | + "version": "3.4.0", | ||
2703 | + "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", | ||
2704 | + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", | ||
2705 | + "dev": true, | ||
2706 | + "requires": { | ||
2707 | + "chalk": "^2.4.2", | ||
2708 | + "cli-cursor": "^2.1.0", | ||
2709 | + "cli-spinners": "^2.0.0", | ||
2710 | + "log-symbols": "^2.2.0", | ||
2711 | + "strip-ansi": "^5.2.0", | ||
2712 | + "wcwidth": "^1.0.1" | ||
2713 | + }, | ||
2714 | + "dependencies": { | ||
2715 | + "ansi-regex": { | ||
2716 | + "version": "4.1.0", | ||
2717 | + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", | ||
2718 | + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", | ||
2719 | + "dev": true | ||
2720 | + }, | ||
2721 | + "strip-ansi": { | ||
2722 | + "version": "5.2.0", | ||
2723 | + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", | ||
2724 | + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", | ||
2725 | + "dev": true, | ||
2726 | + "requires": { | ||
2727 | + "ansi-regex": "^4.1.0" | ||
2728 | + } | ||
2729 | + } | ||
2730 | + } | ||
2731 | + }, | ||
2732 | + "os-homedir": { | ||
2733 | + "version": "1.0.2", | ||
2734 | + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", | ||
2735 | + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" | ||
2736 | + }, | ||
2737 | + "os-tmpdir": { | ||
2738 | + "version": "1.0.2", | ||
2739 | + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", | ||
2740 | + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" | ||
2741 | + }, | ||
2742 | + "osenv": { | ||
2743 | + "version": "0.1.5", | ||
2744 | + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", | ||
2745 | + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", | ||
2746 | + "requires": { | ||
2747 | + "os-homedir": "^1.0.0", | ||
2748 | + "os-tmpdir": "^1.0.0" | ||
2749 | + } | ||
2750 | + }, | ||
2275 | "p-cancelable": { | 2751 | "p-cancelable": { |
2276 | "version": "1.1.0", | 2752 | "version": "1.1.0", |
2277 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", | 2753 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", |
2278 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", | 2754 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", |
2279 | "dev": true | 2755 | "dev": true |
2280 | }, | 2756 | }, |
2757 | + "p-limit": { | ||
2758 | + "version": "2.3.0", | ||
2759 | + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", | ||
2760 | + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", | ||
2761 | + "dev": true, | ||
2762 | + "requires": { | ||
2763 | + "p-try": "^2.0.0" | ||
2764 | + } | ||
2765 | + }, | ||
2766 | + "p-locate": { | ||
2767 | + "version": "3.0.0", | ||
2768 | + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", | ||
2769 | + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", | ||
2770 | + "dev": true, | ||
2771 | + "requires": { | ||
2772 | + "p-limit": "^2.0.0" | ||
2773 | + } | ||
2774 | + }, | ||
2775 | + "p-try": { | ||
2776 | + "version": "2.2.0", | ||
2777 | + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", | ||
2778 | + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", | ||
2779 | + "dev": true | ||
2780 | + }, | ||
2281 | "pako": { | 2781 | "pako": { |
2282 | "version": "1.0.11", | 2782 | "version": "1.0.11", |
2283 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", | 2783 | "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", |
... | @@ -2328,6 +2828,12 @@ | ... | @@ -2328,6 +2828,12 @@ |
2328 | "better-assert": "~1.0.0" | 2828 | "better-assert": "~1.0.0" |
2329 | } | 2829 | } |
2330 | }, | 2830 | }, |
2831 | + "path-exists": { | ||
2832 | + "version": "3.0.0", | ||
2833 | + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", | ||
2834 | + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", | ||
2835 | + "dev": true | ||
2836 | + }, | ||
2331 | "path-is-absolute": { | 2837 | "path-is-absolute": { |
2332 | "version": "1.0.1", | 2838 | "version": "1.0.1", |
2333 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", | 2839 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", |
... | @@ -2440,9 +2946,9 @@ | ... | @@ -2440,9 +2946,9 @@ |
2440 | }, | 2946 | }, |
2441 | "dependencies": { | 2947 | "dependencies": { |
2442 | "@types/node": { | 2948 | "@types/node": { |
2443 | - "version": "13.13.11", | 2949 | + "version": "13.13.10", |
2444 | - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.11.tgz", | 2950 | + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.10.tgz", |
2445 | - "integrity": "sha512-FX7mIFKfnGCfq10DGWNhfCNxhACEeqH5uulT6wRRA1KEt7zgLe0HdrAd9/QQkObDqp2Z0KEV3OAmNgs0lTx5tQ==" | 2951 | + "integrity": "sha512-J+FbkhLTcFstD7E5mVZDjYxa1VppwT2HALE6H3n2AnBSP8uiCQk0Pyr6BkJcP38dFV9WecoVJRJmFnl9ikIW7Q==" |
2446 | } | 2952 | } |
2447 | } | 2953 | } |
2448 | }, | 2954 | }, |
... | @@ -2476,6 +2982,17 @@ | ... | @@ -2476,6 +2982,17 @@ |
2476 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", | 2982 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", |
2477 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" | 2983 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" |
2478 | }, | 2984 | }, |
2985 | + "rc": { | ||
2986 | + "version": "1.2.8", | ||
2987 | + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", | ||
2988 | + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", | ||
2989 | + "requires": { | ||
2990 | + "deep-extend": "^0.6.0", | ||
2991 | + "ini": "~1.3.0", | ||
2992 | + "minimist": "^1.2.0", | ||
2993 | + "strip-json-comments": "~2.0.1" | ||
2994 | + } | ||
2995 | + }, | ||
2479 | "readable-stream": { | 2996 | "readable-stream": { |
2480 | "version": "2.3.7", | 2997 | "version": "2.3.7", |
2481 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", | 2998 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", |
... | @@ -2548,6 +3065,18 @@ | ... | @@ -2548,6 +3065,18 @@ |
2548 | "lodash": "^4.17.15" | 3065 | "lodash": "^4.17.15" |
2549 | } | 3066 | } |
2550 | }, | 3067 | }, |
3068 | + "require-directory": { | ||
3069 | + "version": "2.1.1", | ||
3070 | + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", | ||
3071 | + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", | ||
3072 | + "dev": true | ||
3073 | + }, | ||
3074 | + "require-main-filename": { | ||
3075 | + "version": "2.0.0", | ||
3076 | + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", | ||
3077 | + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", | ||
3078 | + "dev": true | ||
3079 | + }, | ||
2551 | "responselike": { | 3080 | "responselike": { |
2552 | "version": "1.0.2", | 3081 | "version": "1.0.2", |
2553 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", | 3082 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", |
... | @@ -2557,6 +3086,16 @@ | ... | @@ -2557,6 +3086,16 @@ |
2557 | "lowercase-keys": "^1.0.0" | 3086 | "lowercase-keys": "^1.0.0" |
2558 | } | 3087 | } |
2559 | }, | 3088 | }, |
3089 | + "restore-cursor": { | ||
3090 | + "version": "2.0.0", | ||
3091 | + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", | ||
3092 | + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", | ||
3093 | + "dev": true, | ||
3094 | + "requires": { | ||
3095 | + "onetime": "^2.0.0", | ||
3096 | + "signal-exit": "^3.0.2" | ||
3097 | + } | ||
3098 | + }, | ||
2560 | "retry-request": { | 3099 | "retry-request": { |
2561 | "version": "4.1.1", | 3100 | "version": "4.1.1", |
2562 | "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.1.1.tgz", | 3101 | "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-4.1.1.tgz", |
... | @@ -2589,6 +3128,15 @@ | ... | @@ -2589,6 +3128,15 @@ |
2589 | "sprintf-js": "^1.1.2" | 3128 | "sprintf-js": "^1.1.2" |
2590 | } | 3129 | } |
2591 | }, | 3130 | }, |
3131 | + "rxjs": { | ||
3132 | + "version": "6.5.5", | ||
3133 | + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.5.tgz", | ||
3134 | + "integrity": "sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ==", | ||
3135 | + "dev": true, | ||
3136 | + "requires": { | ||
3137 | + "tslib": "^1.9.0" | ||
3138 | + } | ||
3139 | + }, | ||
2592 | "safe-buffer": { | 3140 | "safe-buffer": { |
2593 | "version": "5.1.2", | 3141 | "version": "5.1.2", |
2594 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", | 3142 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", |
... | @@ -2751,6 +3299,34 @@ | ... | @@ -2751,6 +3299,34 @@ |
2751 | "source-map": "^0.6.0" | 3299 | "source-map": "^0.6.0" |
2752 | } | 3300 | } |
2753 | }, | 3301 | }, |
3302 | + "spawn-rx": { | ||
3303 | + "version": "3.0.0", | ||
3304 | + "resolved": "https://registry.npmjs.org/spawn-rx/-/spawn-rx-3.0.0.tgz", | ||
3305 | + "integrity": "sha512-dw4Ryg/KMNfkKa5ezAR5aZe9wNwPdKlnHEXtHOjVnyEDSPQyOpIPPRtcIiu7127SmtHhaCjw21yC43HliW0iIg==", | ||
3306 | + "dev": true, | ||
3307 | + "requires": { | ||
3308 | + "debug": "^2.5.1", | ||
3309 | + "lodash.assign": "^4.2.0", | ||
3310 | + "rxjs": "^6.3.1" | ||
3311 | + }, | ||
3312 | + "dependencies": { | ||
3313 | + "debug": { | ||
3314 | + "version": "2.6.9", | ||
3315 | + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", | ||
3316 | + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", | ||
3317 | + "dev": true, | ||
3318 | + "requires": { | ||
3319 | + "ms": "2.0.0" | ||
3320 | + } | ||
3321 | + }, | ||
3322 | + "ms": { | ||
3323 | + "version": "2.0.0", | ||
3324 | + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", | ||
3325 | + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", | ||
3326 | + "dev": true | ||
3327 | + } | ||
3328 | + } | ||
3329 | + }, | ||
2754 | "sprintf-js": { | 3330 | "sprintf-js": { |
2755 | "version": "1.1.2", | 3331 | "version": "1.1.2", |
2756 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", | 3332 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", |
... | @@ -2758,6 +3334,15 @@ | ... | @@ -2758,6 +3334,15 @@ |
2758 | "dev": true, | 3334 | "dev": true, |
2759 | "optional": true | 3335 | "optional": true |
2760 | }, | 3336 | }, |
3337 | + "sqlite3": { | ||
3338 | + "version": "4.2.0", | ||
3339 | + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.2.0.tgz", | ||
3340 | + "integrity": "sha512-roEOz41hxui2Q7uYnWsjMOTry6TcNUNmp8audCx18gF10P2NknwdpF+E+HKvz/F2NvPKGGBF4NGc+ZPQ+AABwg==", | ||
3341 | + "requires": { | ||
3342 | + "nan": "^2.12.1", | ||
3343 | + "node-pre-gyp": "^0.11.0" | ||
3344 | + } | ||
3345 | + }, | ||
2761 | "sqlstring": { | 3346 | "sqlstring": { |
2762 | "version": "2.3.1", | 3347 | "version": "2.3.1", |
2763 | "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", | 3348 | "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", |
... | @@ -2829,6 +3414,11 @@ | ... | @@ -2829,6 +3414,11 @@ |
2829 | "ansi-regex": "^2.0.0" | 3414 | "ansi-regex": "^2.0.0" |
2830 | } | 3415 | } |
2831 | }, | 3416 | }, |
3417 | + "strip-json-comments": { | ||
3418 | + "version": "2.0.1", | ||
3419 | + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", | ||
3420 | + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" | ||
3421 | + }, | ||
2832 | "sumchecker": { | 3422 | "sumchecker": { |
2833 | "version": "3.0.1", | 3423 | "version": "3.0.1", |
2834 | "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", | 3424 | "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", |
... | @@ -2838,6 +3428,29 @@ | ... | @@ -2838,6 +3428,29 @@ |
2838 | "debug": "^4.1.0" | 3428 | "debug": "^4.1.0" |
2839 | } | 3429 | } |
2840 | }, | 3430 | }, |
3431 | + "supports-color": { | ||
3432 | + "version": "5.5.0", | ||
3433 | + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", | ||
3434 | + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", | ||
3435 | + "dev": true, | ||
3436 | + "requires": { | ||
3437 | + "has-flag": "^3.0.0" | ||
3438 | + } | ||
3439 | + }, | ||
3440 | + "tar": { | ||
3441 | + "version": "4.4.13", | ||
3442 | + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", | ||
3443 | + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", | ||
3444 | + "requires": { | ||
3445 | + "chownr": "^1.1.1", | ||
3446 | + "fs-minipass": "^1.2.5", | ||
3447 | + "minipass": "^2.8.6", | ||
3448 | + "minizlib": "^1.2.1", | ||
3449 | + "mkdirp": "^0.5.0", | ||
3450 | + "safe-buffer": "^5.1.2", | ||
3451 | + "yallist": "^3.0.3" | ||
3452 | + } | ||
3453 | + }, | ||
2841 | "tar-stream": { | 3454 | "tar-stream": { |
2842 | "version": "2.1.2", | 3455 | "version": "2.1.2", |
2843 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", | 3456 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", |
... | @@ -2925,6 +3538,12 @@ | ... | @@ -2925,6 +3538,12 @@ |
2925 | "utf8-byte-length": "^1.0.1" | 3538 | "utf8-byte-length": "^1.0.1" |
2926 | } | 3539 | } |
2927 | }, | 3540 | }, |
3541 | + "tslib": { | ||
3542 | + "version": "1.13.0", | ||
3543 | + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", | ||
3544 | + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", | ||
3545 | + "dev": true | ||
3546 | + }, | ||
2928 | "tunnel": { | 3547 | "tunnel": { |
2929 | "version": "0.0.6", | 3548 | "version": "0.0.6", |
2930 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", | 3549 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", |
... | @@ -3038,6 +3657,15 @@ | ... | @@ -3038,6 +3657,15 @@ |
3038 | "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz", | 3657 | "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz", |
3039 | "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==" | 3658 | "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==" |
3040 | }, | 3659 | }, |
3660 | + "wcwidth": { | ||
3661 | + "version": "1.0.1", | ||
3662 | + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", | ||
3663 | + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", | ||
3664 | + "dev": true, | ||
3665 | + "requires": { | ||
3666 | + "defaults": "^1.0.3" | ||
3667 | + } | ||
3668 | + }, | ||
3041 | "which": { | 3669 | "which": { |
3042 | "version": "2.0.2", | 3670 | "version": "2.0.2", |
3043 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", | 3671 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", |
... | @@ -3046,6 +3674,12 @@ | ... | @@ -3046,6 +3674,12 @@ |
3046 | "isexe": "^2.0.0" | 3674 | "isexe": "^2.0.0" |
3047 | } | 3675 | } |
3048 | }, | 3676 | }, |
3677 | + "which-module": { | ||
3678 | + "version": "2.0.0", | ||
3679 | + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", | ||
3680 | + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", | ||
3681 | + "dev": true | ||
3682 | + }, | ||
3049 | "wide-align": { | 3683 | "wide-align": { |
3050 | "version": "1.1.3", | 3684 | "version": "1.1.3", |
3051 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", | 3685 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", |
... | @@ -3054,6 +3688,51 @@ | ... | @@ -3054,6 +3688,51 @@ |
3054 | "string-width": "^1.0.2 || 2" | 3688 | "string-width": "^1.0.2 || 2" |
3055 | } | 3689 | } |
3056 | }, | 3690 | }, |
3691 | + "wrap-ansi": { | ||
3692 | + "version": "5.1.0", | ||
3693 | + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", | ||
3694 | + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", | ||
3695 | + "dev": true, | ||
3696 | + "requires": { | ||
3697 | + "ansi-styles": "^3.2.0", | ||
3698 | + "string-width": "^3.0.0", | ||
3699 | + "strip-ansi": "^5.0.0" | ||
3700 | + }, | ||
3701 | + "dependencies": { | ||
3702 | + "ansi-regex": { | ||
3703 | + "version": "4.1.0", | ||
3704 | + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", | ||
3705 | + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", | ||
3706 | + "dev": true | ||
3707 | + }, | ||
3708 | + "is-fullwidth-code-point": { | ||
3709 | + "version": "2.0.0", | ||
3710 | + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", | ||
3711 | + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", | ||
3712 | + "dev": true | ||
3713 | + }, | ||
3714 | + "string-width": { | ||
3715 | + "version": "3.1.0", | ||
3716 | + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", | ||
3717 | + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", | ||
3718 | + "dev": true, | ||
3719 | + "requires": { | ||
3720 | + "emoji-regex": "^7.0.1", | ||
3721 | + "is-fullwidth-code-point": "^2.0.0", | ||
3722 | + "strip-ansi": "^5.1.0" | ||
3723 | + } | ||
3724 | + }, | ||
3725 | + "strip-ansi": { | ||
3726 | + "version": "5.2.0", | ||
3727 | + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", | ||
3728 | + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", | ||
3729 | + "dev": true, | ||
3730 | + "requires": { | ||
3731 | + "ansi-regex": "^4.1.0" | ||
3732 | + } | ||
3733 | + } | ||
3734 | + } | ||
3735 | + }, | ||
3057 | "wrappy": { | 3736 | "wrappy": { |
3058 | "version": "1.0.2", | 3737 | "version": "1.0.2", |
3059 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", | 3738 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", |
... | @@ -3109,11 +3788,80 @@ | ... | @@ -3109,11 +3788,80 @@ |
3109 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", | 3788 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", |
3110 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" | 3789 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" |
3111 | }, | 3790 | }, |
3791 | + "y18n": { | ||
3792 | + "version": "4.0.0", | ||
3793 | + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", | ||
3794 | + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", | ||
3795 | + "dev": true | ||
3796 | + }, | ||
3112 | "yallist": { | 3797 | "yallist": { |
3113 | "version": "3.1.1", | 3798 | "version": "3.1.1", |
3114 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", | 3799 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", |
3115 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" | 3800 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" |
3116 | }, | 3801 | }, |
3802 | + "yargs": { | ||
3803 | + "version": "14.2.3", | ||
3804 | + "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", | ||
3805 | + "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", | ||
3806 | + "dev": true, | ||
3807 | + "requires": { | ||
3808 | + "cliui": "^5.0.0", | ||
3809 | + "decamelize": "^1.2.0", | ||
3810 | + "find-up": "^3.0.0", | ||
3811 | + "get-caller-file": "^2.0.1", | ||
3812 | + "require-directory": "^2.1.1", | ||
3813 | + "require-main-filename": "^2.0.0", | ||
3814 | + "set-blocking": "^2.0.0", | ||
3815 | + "string-width": "^3.0.0", | ||
3816 | + "which-module": "^2.0.0", | ||
3817 | + "y18n": "^4.0.0", | ||
3818 | + "yargs-parser": "^15.0.1" | ||
3819 | + }, | ||
3820 | + "dependencies": { | ||
3821 | + "ansi-regex": { | ||
3822 | + "version": "4.1.0", | ||
3823 | + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", | ||
3824 | + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", | ||
3825 | + "dev": true | ||
3826 | + }, | ||
3827 | + "is-fullwidth-code-point": { | ||
3828 | + "version": "2.0.0", | ||
3829 | + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", | ||
3830 | + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", | ||
3831 | + "dev": true | ||
3832 | + }, | ||
3833 | + "string-width": { | ||
3834 | + "version": "3.1.0", | ||
3835 | + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", | ||
3836 | + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", | ||
3837 | + "dev": true, | ||
3838 | + "requires": { | ||
3839 | + "emoji-regex": "^7.0.1", | ||
3840 | + "is-fullwidth-code-point": "^2.0.0", | ||
3841 | + "strip-ansi": "^5.1.0" | ||
3842 | + } | ||
3843 | + }, | ||
3844 | + "strip-ansi": { | ||
3845 | + "version": "5.2.0", | ||
3846 | + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", | ||
3847 | + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", | ||
3848 | + "dev": true, | ||
3849 | + "requires": { | ||
3850 | + "ansi-regex": "^4.1.0" | ||
3851 | + } | ||
3852 | + } | ||
3853 | + } | ||
3854 | + }, | ||
3855 | + "yargs-parser": { | ||
3856 | + "version": "15.0.1", | ||
3857 | + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", | ||
3858 | + "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", | ||
3859 | + "dev": true, | ||
3860 | + "requires": { | ||
3861 | + "camelcase": "^5.0.0", | ||
3862 | + "decamelize": "^1.2.0" | ||
3863 | + } | ||
3864 | + }, | ||
3117 | "yauzl": { | 3865 | "yauzl": { |
3118 | "version": "2.10.0", | 3866 | "version": "2.10.0", |
3119 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", | 3867 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", | ... | ... |
... | @@ -4,24 +4,28 @@ | ... | @@ -4,24 +4,28 @@ |
4 | "description": "", | 4 | "description": "", |
5 | "main": "main.js", | 5 | "main": "main.js", |
6 | "scripts": { | 6 | "scripts": { |
7 | - "start": "electron ." | 7 | + "start": "electron .", |
8 | + "rebuild": "electron-rebuild -f -w sqlite3" | ||
8 | }, | 9 | }, |
9 | "author": "Hee <glwjd0414@khu.ac.kr>", | 10 | "author": "Hee <glwjd0414@khu.ac.kr>", |
10 | "license": "ISC", | 11 | "license": "ISC", |
11 | "devDependencies": { | 12 | "devDependencies": { |
12 | - "electron": "^8.2.0" | 13 | + "electron": "^8.2.0", |
14 | + "electron-rebuild": "^1.11.0" | ||
13 | }, | 15 | }, |
14 | "dependencies": { | 16 | "dependencies": { |
15 | "@google-cloud/vision": "^2.0.0", | 17 | "@google-cloud/vision": "^2.0.0", |
16 | - "appium-adb": "^7.27.1", | ||
17 | "bootstrap-icons": "^1.0.0-alpha4", | 18 | "bootstrap-icons": "^1.0.0-alpha4", |
18 | "chart.js": "^2.9.3", | 19 | "chart.js": "^2.9.3", |
20 | + "@google-cloud/video-intelligence": "^3.0.0", | ||
21 | + "appium-adb": "^7.27.1", | ||
22 | + "electron-log": "^4.2.0", | ||
19 | "jQuery": "^1.7.4", | 23 | "jQuery": "^1.7.4", |
20 | - "jquery": "^3.5.0", | ||
21 | "mysql": "^2.18.1", | 24 | "mysql": "^2.18.1", |
22 | "node-adb": "^0.1.6", | 25 | "node-adb": "^0.1.6", |
23 | "python-shell": "^2.0.0", | 26 | "python-shell": "^2.0.0", |
24 | "rimraf": "^3.0.2", | 27 | "rimraf": "^3.0.2", |
25 | - "socket.io": "^2.3.0" | 28 | + "socket.io": "^2.3.0", |
29 | + "sqlite3": "^4.2.0" | ||
26 | } | 30 | } |
27 | } | 31 | } | ... | ... |
source/forensic_tool/src/alldata_menu.html
0 → 100644
1 | +<!DOCTYPE html> | ||
2 | +<html lang="en"> | ||
3 | +<head> | ||
4 | + <meta charset="UTF-8"> | ||
5 | + <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||
6 | + <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous"> | ||
7 | + <script src="https://cdn.jsdelivr.net/npm/chart.js@2.8.0"></script> | ||
8 | + <link rel="stylesheet" href="../assets/css/alldata.css"> | ||
9 | + <title>Document</title> | ||
10 | +</head> | ||
11 | +<body> | ||
12 | + <header class="menu-header py-4"> | ||
13 | + <div class="row pl-3 d-flex justify-content-start flex-nowrap align-items-end"> | ||
14 | + <div class="col"> | ||
15 | + <a class="title-name text-dark">All data</a> | ||
16 | + </div> | ||
17 | + <div div class="col-8"> | ||
18 | + <a class="title-detail">추출 데이터 확인</a> | ||
19 | + </div> | ||
20 | + <div div class="col"> | ||
21 | + <a class="title-back" href="menu.html" id="menu-out">나가기</a> | ||
22 | + </div> | ||
23 | + </div> | ||
24 | + </header> | ||
25 | + <div class="nav-scroller nav-color py-1 mb-2"> | ||
26 | + <nav class="nav d-flex justify-content-around"> | ||
27 | + <a class="p-2" href="#" style="color: whitesmoke" id="menu-info">INFO</a> | ||
28 | + <a class="p-2" href="#" style="color: whitesmoke" id="menu-calling">CALLING</a> | ||
29 | + <a class="p-2" href="#" style="color: whitesmoke" id="menu-photo">PHOTO</a> | ||
30 | + <a class="p-2" href="#" style="color: whitesmoke" id="menu-contact">CONTACT</a> | ||
31 | + <a class="p-2" href="#" style="color: whitesmoke" id="menu-video">VIDEO</a> | ||
32 | + <a class="p-2" href="#" style="color: whitesmoke" id="menu-sms">SMS</a> | ||
33 | + <a class="p-2" href="#" style="color: whitesmoke" id="menu-audio">AUDIO</a> | ||
34 | + <a class="p-2" href="#" style="color: whitesmoke" id="menu-document">DOCUMENT</a> | ||
35 | + <a class="p-2" href="#" style="color: whitesmoke" id="menu-calendar">CALENDAR</a> | ||
36 | + <a class="p-2" href="#" style="color: whitesmoke" id="menu-network">NETWORK</a> | ||
37 | + <a class="p-2" href="#" style="color: whitesmoke" id="menu-appinfo">APP INFO</a> | ||
38 | + <a class="p-2" href="#" style="color: whitesmoke" id="menu-wifi">WIFI</a> | ||
39 | + <a class="p-2" href="#" style="color: whitesmoke" id="menu-usagestats">USAGESTATS</a> | ||
40 | + </nav> | ||
41 | + </div> | ||
42 | + <div ids = "table_list"> | ||
43 | + <table id="table"> | ||
44 | + <tbody> | ||
45 | + | ||
46 | + </tbody> | ||
47 | + </table> | ||
48 | + </div> | ||
49 | + <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script> | ||
50 | + <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> | ||
51 | + <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script> | ||
52 | + <script src="alldata_menu.js"></script> | ||
53 | +</body> | ||
54 | +</html> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
source/forensic_tool/src/alldata_menu.js
0 → 100644
1 | +const log = require('electron-log') | ||
2 | +const sqlite3 = require('sqlite3').verbose(); | ||
3 | + | ||
4 | +document.addEventListener("DOMContentLoaded", function(){ | ||
5 | + getInfoRows(); | ||
6 | +}); | ||
7 | + | ||
8 | +function el(selector) { | ||
9 | + return document.getElementById(selector); | ||
10 | +} | ||
11 | +el('menu-info').addEventListener('click', function(){ | ||
12 | + // Get the mysql service | ||
13 | + getInfoRows(); | ||
14 | +},false); | ||
15 | + | ||
16 | +el('menu-calling').addEventListener('click', function(){ | ||
17 | + // Get the mysql service | ||
18 | + getCallingRows(); | ||
19 | +},false); | ||
20 | + | ||
21 | +el('menu-photo').addEventListener('click', function(){ | ||
22 | + // Get the mysql service | ||
23 | + getPhotoRows(); | ||
24 | +},false); | ||
25 | + | ||
26 | +el('menu-contact').addEventListener('click', function(){ | ||
27 | + // Get the mysql service | ||
28 | + getContactRows(); | ||
29 | +},false); | ||
30 | + | ||
31 | +el('menu-video').addEventListener('click', function(){ | ||
32 | + // Get the mysql service | ||
33 | + getVideoRows(); | ||
34 | +},false); | ||
35 | + | ||
36 | +el('menu-sms').addEventListener('click', function(){ | ||
37 | + // Get the mysql service | ||
38 | + getSmsRows(); | ||
39 | +},false); | ||
40 | + | ||
41 | +el('menu-audio').addEventListener('click', function(){ | ||
42 | + // Get the mysql service | ||
43 | + getAudioRows(); | ||
44 | +},false); | ||
45 | + | ||
46 | + | ||
47 | +el('menu-document').addEventListener('click', function(){ | ||
48 | + // Get the mysql service | ||
49 | + getDocumentRows(); | ||
50 | +},false); | ||
51 | + | ||
52 | +el('menu-calendar').addEventListener('click', function(){ | ||
53 | + // Get the mysql service | ||
54 | + getCalendarRows(); | ||
55 | +},false); | ||
56 | + | ||
57 | +el('menu-network').addEventListener('click', function(){ | ||
58 | + // Get the mysql service | ||
59 | + getNetworkRows(); | ||
60 | +},false); | ||
61 | + | ||
62 | +el('menu-appinfo').addEventListener('click', function(){ | ||
63 | + // Get the mysql service | ||
64 | + getAppinfoRows(); | ||
65 | +},false); | ||
66 | + | ||
67 | +el('menu-wifi').addEventListener('click', function(){ | ||
68 | + // Get the mysql service | ||
69 | + getWifiRows(); | ||
70 | +},false); | ||
71 | + | ||
72 | +el('menu-usagestats').addEventListener('click', function(){ | ||
73 | + // Get the mysql service | ||
74 | + getAppUsageRows(); | ||
75 | +},false); | ||
76 | + | ||
77 | + | ||
78 | +function getInfoRows(){ | ||
79 | + Promise.all([getphoneinfo(),getaccountinfo()]).then(function(value){ | ||
80 | + log.info(value); | ||
81 | + var html = value[0] + value[1]; | ||
82 | + document.querySelector('#table > tbody').innerHTML = html; | ||
83 | + }); | ||
84 | +} | ||
85 | + | ||
86 | +function getCallingRows(){ | ||
87 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
88 | + var html = "<tr><th>Id</th>\ | ||
89 | + <th>Type</th>\ | ||
90 | + <th>Name</th>\ | ||
91 | + <th>Number</th>\ | ||
92 | + <th>Duration</th>\ | ||
93 | + <th>Date</th>\ | ||
94 | + </tr>" | ||
95 | + let sql = "SELECT * FROM calllog" | ||
96 | + db.all(sql, [], (err, rows) => { | ||
97 | + if (err) { | ||
98 | + log.err(err); | ||
99 | + throw err; | ||
100 | + } | ||
101 | + | ||
102 | + rows.forEach((row) => { | ||
103 | + html += `<tr> | ||
104 | + <td>${row.id}</td> | ||
105 | + <td>${row.type}</td> | ||
106 | + <td>${row.name}</td> | ||
107 | + <td>${row.number}</td> | ||
108 | + <td>${row.duration}</td> | ||
109 | + <td>${row.date}</td> | ||
110 | + </tr>`; | ||
111 | + }); | ||
112 | + document.querySelector('#table > tbody').innerHTML = html; | ||
113 | + db.close(); | ||
114 | + log.info("Query succesfully executed"); | ||
115 | + }); | ||
116 | +} | ||
117 | + | ||
118 | +function getPhotoRows(){ | ||
119 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
120 | + var html = "<tr><th>Title</th>\ | ||
121 | + <th>Id</th>\ | ||
122 | + <th>Date Added</th>\ | ||
123 | + <th>Display Name</th>\ | ||
124 | + <th>Mime type</th>\ | ||
125 | + <th>Path</th>\ | ||
126 | + <th>Latitude</th>\ | ||
127 | + <th>Longitude</th>\ | ||
128 | + <th>Size</th>\ | ||
129 | + </tr>" | ||
130 | + let sql = "SELECT * FROM photo" | ||
131 | + db.all(sql, [], (err, rows) => { | ||
132 | + if (err) { | ||
133 | + log.err(err); | ||
134 | + throw err; | ||
135 | + } | ||
136 | + | ||
137 | + rows.forEach((row) => { | ||
138 | + html += `<tr> | ||
139 | + <td>${row.title}</td> | ||
140 | + <td>${row.id}</td> | ||
141 | + <td>${row.date_added}</td> | ||
142 | + <td>${row.display_name}</td> | ||
143 | + <td>${row.mime_type}</td> | ||
144 | + <td>${row.path}</td> | ||
145 | + <td>${row.latitude}</td> | ||
146 | + <td>${row.longitude}</td> | ||
147 | + <td>${row.size}</td> | ||
148 | + </tr>`; | ||
149 | + }); | ||
150 | + document.querySelector('#table > tbody').innerHTML = html; | ||
151 | + db.close(); | ||
152 | + log.info("Query succesfully executed"); | ||
153 | + }); | ||
154 | +} | ||
155 | + | ||
156 | +function getContactRows(){ | ||
157 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
158 | + var html = "<tr><th>Number</th>\ | ||
159 | + <th>Name</th>\ | ||
160 | + <th>Photo_id</th>\ | ||
161 | + <th>Person_id</th>\ | ||
162 | + </tr>" | ||
163 | + let sql = "SELECT * FROM contact" | ||
164 | + db.all(sql, [], (err, rows) => { | ||
165 | + if (err) { | ||
166 | + log.err(err); | ||
167 | + throw err; | ||
168 | + } | ||
169 | + | ||
170 | + rows.forEach((row) => { | ||
171 | + html += `<tr> | ||
172 | + <td>${row.number}</td> | ||
173 | + <td>${row.name}</td> | ||
174 | + <td>${row.photo_id}</td> | ||
175 | + <td>${row.person_id}</td> | ||
176 | + </tr>`; | ||
177 | + }); | ||
178 | + document.querySelector('#table > tbody').innerHTML = html; | ||
179 | + db.close(); | ||
180 | + log.info("Query succesfully executed"); | ||
181 | + }); | ||
182 | +} | ||
183 | + | ||
184 | +function getVideoRows(){ | ||
185 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
186 | + var html = "<tr><th>Title</th>\ | ||
187 | + <th>Date Added</th>\ | ||
188 | + <th>Display Name</th>\ | ||
189 | + <th>Mime type</th>\ | ||
190 | + <th>Path</th>\ | ||
191 | + <th>Latitude</th>\ | ||
192 | + <th>Longitude</th>\ | ||
193 | + <th>Album</th>\ | ||
194 | + <th>Artist</th>\ | ||
195 | + <th>Bookmark</th>\ | ||
196 | + <th>Category</th>\ | ||
197 | + <th>Description</th>\ | ||
198 | + <th>Language</th>\ | ||
199 | + <th>Resolution</th>\ | ||
200 | + <th>Tags</th>\ | ||
201 | + <th>Size</th>\ | ||
202 | + </tr>" | ||
203 | + let sql = "SELECT * FROM video" | ||
204 | + db.all(sql, [], (err, rows) => { | ||
205 | + if (err) { | ||
206 | + log.err(err); | ||
207 | + throw err; | ||
208 | + } | ||
209 | + | ||
210 | + rows.forEach((row) => { | ||
211 | + html += `<tr> | ||
212 | + <td>${row.title}</td> | ||
213 | + <td>${row.date_added}</td> | ||
214 | + <td>${row.display_name}</td> | ||
215 | + <td>${row.mime_type}</td> | ||
216 | + <td>${row.path}</td> | ||
217 | + <td>${row.latitude}</td> | ||
218 | + <td>${row.longitude}</td> | ||
219 | + <td>${row.album}</td> | ||
220 | + <td>${row.artist}</td> | ||
221 | + <td>${row.bookmark}</td> | ||
222 | + <td>${row.category}</td> | ||
223 | + <td>${row.description}</td> | ||
224 | + <td>${row.language}</td> | ||
225 | + <td>${row.resolution}</td> | ||
226 | + <td>${row.tags}</td> | ||
227 | + <td>${row.size}</td> | ||
228 | + </tr>`; | ||
229 | + }); | ||
230 | + document.querySelector('#table > tbody').innerHTML = html; | ||
231 | + db.close(); | ||
232 | + log.info("Query succesfully executed"); | ||
233 | + }); | ||
234 | +} | ||
235 | + | ||
236 | +function getSmsRows(){ | ||
237 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
238 | + var html = "<tr><th>Mid</th>\ | ||
239 | + <th>Tid</th>\ | ||
240 | + <th>Type</th>\ | ||
241 | + <th>Address</th>\ | ||
242 | + <th>Person</th>\ | ||
243 | + <th>Creator</th>\ | ||
244 | + <th>Date</th>\ | ||
245 | + <th>Body</th>\ | ||
246 | + <th>Read_c</th>\ | ||
247 | + </tr>" | ||
248 | + let sql = "SELECT * FROM sms" | ||
249 | + db.all(sql, [], (err, rows) => { | ||
250 | + if (err) { | ||
251 | + log.err(err); | ||
252 | + throw err; | ||
253 | + } | ||
254 | + | ||
255 | + rows.forEach((row) => { | ||
256 | + html += `<tr> | ||
257 | + <td>${row.mid}</td> | ||
258 | + <td>${row.tid}</td> | ||
259 | + <td>${row.type}</td> | ||
260 | + <td>${row.address}</td> | ||
261 | + <td>${row.person}</td> | ||
262 | + <td>${row.creator}</td> | ||
263 | + <td>${row.date}</td> | ||
264 | + <td>${row.body}</td> | ||
265 | + <td>${row.read_c}</td> | ||
266 | + </tr>`; | ||
267 | + }); | ||
268 | + document.querySelector('#table > tbody').innerHTML = html; | ||
269 | + db.close(); | ||
270 | + log.info("Query succesfully executed"); | ||
271 | + }); | ||
272 | +} | ||
273 | + | ||
274 | +function getAudioRows(){ | ||
275 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
276 | + var html = "<tr><th>Title</th>\ | ||
277 | + <th>Date Added</th>\ | ||
278 | + <th>Mime type</th>\ | ||
279 | + <th>Path</th>\ | ||
280 | + <th>Album</th>\ | ||
281 | + <th>Artist</th>\ | ||
282 | + <th>Composer</th>\ | ||
283 | + <th>Year</th>\ | ||
284 | + <th>Size</th>\ | ||
285 | + </tr>" | ||
286 | + let sql = "SELECT * FROM audio" | ||
287 | + db.all(sql, [], (err, rows) => { | ||
288 | + if (err) { | ||
289 | + log.err(err); | ||
290 | + throw err; | ||
291 | + } | ||
292 | + | ||
293 | + rows.forEach((row) => { | ||
294 | + html += `<tr> | ||
295 | + <td>${row.title}</td> | ||
296 | + <td>${row.date_added}</td> | ||
297 | + <td>${row.mime_type}</td> | ||
298 | + <td>${row.path}</td> | ||
299 | + <td>${row.album}</td> | ||
300 | + <td>${row.artist}</td> | ||
301 | + <td>${row.composer}</td> | ||
302 | + <td>${row.year}</td> | ||
303 | + <td>${row.size}</td> | ||
304 | + </tr>`; | ||
305 | + }); | ||
306 | + document.querySelector('#table > tbody').innerHTML = html; | ||
307 | + db.close(); | ||
308 | + log.info("Query succesfully executed"); | ||
309 | + }); | ||
310 | +} | ||
311 | + | ||
312 | +function getDocumentRows(){ | ||
313 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
314 | + var html = "<tr><th>Name</th>\ | ||
315 | + <th>Title</th>\ | ||
316 | + <th>Mime type</th>\ | ||
317 | + <th>Date Added</th>\ | ||
318 | + <th>Date Modified</th>\ | ||
319 | + <th>Path</th>\ | ||
320 | + <th>Size</th>\ | ||
321 | + </tr>" | ||
322 | + let sql = "SELECT * FROM documentinfo" | ||
323 | + db.all(sql, [], (err, rows) => { | ||
324 | + if (err) { | ||
325 | + log.err(err); | ||
326 | + throw err; | ||
327 | + } | ||
328 | + | ||
329 | + rows.forEach((row) => { | ||
330 | + html += `<tr> | ||
331 | + <td>${row.name}</td> | ||
332 | + <td>${row.title}</td> | ||
333 | + <td>${row.mime_type}</td> | ||
334 | + <td>${row.date_added}</td> | ||
335 | + <td>${row.date_modified}</td> | ||
336 | + <td>${row.path}</td> | ||
337 | + <td>${row.size}</td> | ||
338 | + </tr>`; | ||
339 | + }); | ||
340 | + document.querySelector('#table > tbody').innerHTML = html; | ||
341 | + db.close(); | ||
342 | + log.info("Query succesfully executed"); | ||
343 | + }); | ||
344 | +} | ||
345 | + | ||
346 | +function getCalendarRows(){ | ||
347 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
348 | + var html = "<tr><th>Id</th>\ | ||
349 | + <th>Title</th>\ | ||
350 | + <th>Calendar Id</th>\ | ||
351 | + <th>Event Location</th>\ | ||
352 | + <th>Description</th>\ | ||
353 | + <th>Dstart</th>\ | ||
354 | + <th>Dend</th>\ | ||
355 | + <th>Duration</th>\ | ||
356 | + <th>All day</th>\ | ||
357 | + <th>Display name</th>\ | ||
358 | + <th>Account name</th>\ | ||
359 | + <th>Owner name</th>\ | ||
360 | + <th>Rrlue</th>\ | ||
361 | + <th>Rdate</th>\ | ||
362 | + </tr>" | ||
363 | + let sql = "SELECT * FROM calendar" | ||
364 | + db.all(sql, [], (err, rows) => { | ||
365 | + if (err) { | ||
366 | + log.err(err); | ||
367 | + throw err; | ||
368 | + } | ||
369 | + | ||
370 | + rows.forEach((row) => { | ||
371 | + html += `<tr> | ||
372 | + <td>${row.id}</td> | ||
373 | + <td>${row.title}</td> | ||
374 | + <td>${row.calendar_id}</td> | ||
375 | + <td>${row.event_location}</td> | ||
376 | + <td>${row.description}</td> | ||
377 | + <td>${row.dtstart}</td> | ||
378 | + <td>${row.dtend}</td> | ||
379 | + <td>${row.duration}</td> | ||
380 | + <td>${row.all_day}</td> | ||
381 | + <td>${row.display_name}</td> | ||
382 | + <td>${row.account_name}</td> | ||
383 | + <td>${row.owner_name}</td> | ||
384 | + <td>${row.rrlue}</td> | ||
385 | + <td>${row.rdate}</td> | ||
386 | + </tr>`; | ||
387 | + }); | ||
388 | + document.querySelector('#table > tbody').innerHTML = html; | ||
389 | + db.close(); | ||
390 | + log.info("Query succesfully executed"); | ||
391 | + }); | ||
392 | +} | ||
393 | + | ||
394 | +function getNetworkRows(){ | ||
395 | + Promise.all([getandroidmetadata(),getinetAddress(),getlinkAddress(),getnetworkInfo(),getrouteInfo()]).then(function(value){ | ||
396 | + log.info(value); | ||
397 | + var html = value[0] + value[1] + value[2] + value[3] + value[4]; | ||
398 | + document.querySelector('#table > tbody').innerHTML = html; | ||
399 | + }); | ||
400 | +} | ||
401 | + | ||
402 | +function getAppinfoRows(){ | ||
403 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
404 | + var html = "<tr><th>Packagename</th>\ | ||
405 | + <th>Version</th>\ | ||
406 | + <th>Name</th>\ | ||
407 | + <th>First insatll</th>\ | ||
408 | + <th>Last update</th>\ | ||
409 | + <th>Wifi Usage</th>\ | ||
410 | + <th>Cellular Usage</th>\ | ||
411 | + </tr>" | ||
412 | + let sql = "SELECT * FROM appinfo" | ||
413 | + db.all(sql, [], (err, rows) => { | ||
414 | + if (err) { | ||
415 | + log.err(err); | ||
416 | + throw err; | ||
417 | + } | ||
418 | + | ||
419 | + rows.forEach((row) => { | ||
420 | + html += `<tr> | ||
421 | + <td>${row.packagename}</td> | ||
422 | + <td>${row.version}</td> | ||
423 | + <td>${row.name}</td> | ||
424 | + <td>${row.firstinstall}</td> | ||
425 | + <td>${row.lastupdate}</td> | ||
426 | + <td>${row.wifiusage}</td> | ||
427 | + <td>${row.cellularusage}</td> | ||
428 | + </tr>`; | ||
429 | + }); | ||
430 | + document.querySelector('#table > tbody').innerHTML = html; | ||
431 | + db.close(); | ||
432 | + log.info("Query succesfully executed"); | ||
433 | + }); | ||
434 | +} | ||
435 | + | ||
436 | +function getWifiRows(){ | ||
437 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
438 | + var html = "<tr><th>ID</th>\ | ||
439 | + <th>Ssid</th>\ | ||
440 | + <th>Bssid</th>\ | ||
441 | + <th>Wepkeys</th>\ | ||
442 | + </tr>" | ||
443 | + let sql = "SELECT * FROM wifi" | ||
444 | + db.all(sql, [], (err, rows) => { | ||
445 | + if (err) { | ||
446 | + log.err(err); | ||
447 | + throw err; | ||
448 | + } | ||
449 | + | ||
450 | + rows.forEach((row) => { | ||
451 | + html += `<tr> | ||
452 | + <td>${row.id}</td> | ||
453 | + <td>${row.ssid}</td> | ||
454 | + <td>${row.bssid}</td> | ||
455 | + <td>${row.wepkeys}</td> | ||
456 | + </tr>`; | ||
457 | + }); | ||
458 | + document.querySelector('#table > tbody').innerHTML = html; | ||
459 | + db.close(); | ||
460 | + log.info("Query succesfully executed"); | ||
461 | + }); | ||
462 | +} | ||
463 | + | ||
464 | +function getAppUsageRows(){ | ||
465 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
466 | + var html = "<tr><th>packagename</th>\ | ||
467 | + <th>firsttimestamp</th>\ | ||
468 | + <th>lasttimestamp</th>\ | ||
469 | + <th>lasttimeused</th>\ | ||
470 | + <th>totaltimeforeground</th>\ | ||
471 | + </tr>" | ||
472 | + let sql = `select * from AppUsageDay | ||
473 | + union | ||
474 | + select * from AppUsageMonth | ||
475 | + union | ||
476 | + select * from AppUsageWeek | ||
477 | + union | ||
478 | + select * from AppUsageYear;` | ||
479 | + db.all(sql, [], (err, rows) => { | ||
480 | + if (err) { | ||
481 | + log.err(err); | ||
482 | + throw err; | ||
483 | + } | ||
484 | + const offset = new Date().getTimezoneOffset() * 60000; | ||
485 | + rows.forEach((row) => { | ||
486 | + html += `<tr> | ||
487 | + <td>${row.packagename}</td> | ||
488 | + <td>${row.firsttimestamp}</td> | ||
489 | + <td>${row.lasttimestamp}</td> | ||
490 | + <td>${row.lasttimeused}</td> | ||
491 | + <td>${row.totaltimeforeground}</td> | ||
492 | + </tr>` | ||
493 | + }); | ||
494 | + db.close(); | ||
495 | + document.querySelector('#table > tbody').innerHTML = html; | ||
496 | + log.info("Query succesfully executed"); | ||
497 | + }); | ||
498 | +} | ||
499 | + | ||
500 | +var getphoneinfo = function getPhoneinfo(){ | ||
501 | + return new Promise(function(resolve, reject){ | ||
502 | + setTimeout( function(){ | ||
503 | + // var html = `<tr><th>Phone type</th><th>Software Number</th><th>Phone number</th> | ||
504 | + // <th>Subscribe id</th><th>Adid</th><th>Call state</th> | ||
505 | + // <th>Data state</th><th>Network type</th><th>Etwork countryis</th> | ||
506 | + // <th>Simcountryiso</th><th>Network operator</th><th>Sim operator</th> | ||
507 | + // <th>Network operator name</th><th>Sim operator name</th><th>Sim serial number</th> | ||
508 | + // <th>Simstate</th><th>Is networking Roming</th> | ||
509 | + // </tr>`; | ||
510 | + var html = `<tr><th>Phone type</th><th>Software Number</th><th>Phone number</th></tr>`; | ||
511 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
512 | + let sql = "SELECT * FROM android_metadata"; | ||
513 | + db.get(sql, [], (err, row) => { | ||
514 | + if (err) { | ||
515 | + log.err(err); | ||
516 | + throw err; | ||
517 | + } | ||
518 | + html += `<tr><td>${row.phonetype}</td><td>${row.softwarenumber}</td><td>${row.phonenumber}</td></tr>` | ||
519 | + | ||
520 | + html += `<tr><th>Subscribe id</th><th>Adid</th><th>Call state</th></tr>` | ||
521 | + html += `<tr><td>${row.subscriberid}</td><td>${row.adid}</td><td>${row.callstate}</td></tr>` | ||
522 | + | ||
523 | + html += `<tr><th>Data state</th><th>Network type</th><th>Etwork countryis</th></tr>` | ||
524 | + html += `<tr><td>${row.datastate}</td><td>${row.networktype}</td><td>${row.networkcountryiso}</td></tr>` | ||
525 | + | ||
526 | + html += `<tr><th>Simcountryiso</th><th>Network operator</th><th>Sim operator</th></tr>` | ||
527 | + html += `<tr><td>${row.simcountryiso}</td><td>${row.networkoperater}</td><td>${row.simoperator}</td></tr>` | ||
528 | + | ||
529 | + html += `<tr><th>Network operator name</th><th>Sim operator name</th><th>Sim serial number</th></tr>` | ||
530 | + html += `<tr><td>${row.networkoperatorname}</td><td>${row.simoperatorname}</td><td>${row.simserialnumber}</td></tr>` | ||
531 | + | ||
532 | + html += `<tr><th>Simstate</th><th>Is networking Roming</th></tr>` | ||
533 | + html += `<tr><td>${row.simstate}</td><td>${row.isnetworkroming}</td></tr>` | ||
534 | + | ||
535 | + db.close(); | ||
536 | + resolve(html); | ||
537 | + }); | ||
538 | + }, 1000) | ||
539 | + }) | ||
540 | +} | ||
541 | + | ||
542 | +var getaccountinfo = function getAccountinfo(){ | ||
543 | + return new Promise(function(resolve, reject){ | ||
544 | + setTimeout( function(){ | ||
545 | + var html = `<tr><th>Account name</th><th>Accounttype</th></tr>`; | ||
546 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
547 | + let sql = "SELECT * FROM accountinfo"; | ||
548 | + db.all(sql, [], (err, rows) => { | ||
549 | + if (err) { | ||
550 | + log.err(err); | ||
551 | + throw err; | ||
552 | + } | ||
553 | + rows.forEach((row) => { | ||
554 | + html += `<tr><td>${row.accountname}</td><td>${row.accounttype}</td></tr>` | ||
555 | + }); | ||
556 | + db.close(); | ||
557 | + resolve(html); | ||
558 | + }); | ||
559 | + }, 1000) | ||
560 | + }) | ||
561 | +} | ||
562 | + | ||
563 | +var getandroidmetadata = function getAM(){ | ||
564 | + return new Promise(function(resolve, reject){ | ||
565 | + setTimeout( function(){ | ||
566 | + var html = `<tr><th>locale</th></tr>`; | ||
567 | + const db = new sqlite3.Database('networkDatabase.db'); | ||
568 | + let sql = "SELECT * FROM android_metadata"; | ||
569 | + db.get(sql, [], (err, row) => { | ||
570 | + if (err) { | ||
571 | + log.err(err); | ||
572 | + throw err; | ||
573 | + } | ||
574 | + html += `<tr><td>${row.locale}</td></tr>` | ||
575 | + db.close(); | ||
576 | + resolve(html); | ||
577 | + }); | ||
578 | + }, 1000) | ||
579 | + }) | ||
580 | +} | ||
581 | + | ||
582 | +var getinetAddress = function getIA(){ | ||
583 | + return new Promise(function(resolve, reject){ | ||
584 | + setTimeout( function(){ | ||
585 | + var html = `<tr><th>net_id</th><th>host_address</th></tr>`; | ||
586 | + const db = new sqlite3.Database('networkDatabase.db'); | ||
587 | + let sql = "SELECT * FROM inetAddress"; | ||
588 | + db.all(sql, [], (err, rows) => { | ||
589 | + if (err) { | ||
590 | + log.err(err); | ||
591 | + throw err; | ||
592 | + } | ||
593 | + rows.forEach((row) => { | ||
594 | + html += `<tr><td>${row.net_id}</td><td>${row.host_address}</td></tr>` | ||
595 | + }); | ||
596 | + db.close(); | ||
597 | + resolve(html); | ||
598 | + }); | ||
599 | + }, 1000) | ||
600 | + }) | ||
601 | +} | ||
602 | + | ||
603 | +var getlinkAddress = function getLA(){ | ||
604 | + return new Promise(function(resolve, reject){ | ||
605 | + setTimeout( function(){ | ||
606 | + var html = `<tr><th>net_id</th><th>host_address</th><th>prefix_length</th></tr>`; | ||
607 | + const db = new sqlite3.Database('networkDatabase.db'); | ||
608 | + let sql = "SELECT * FROM linkAddress"; | ||
609 | + db.all(sql, [], (err, rows) => { | ||
610 | + if (err) { | ||
611 | + log.err(err); | ||
612 | + throw err; | ||
613 | + } | ||
614 | + rows.forEach((row) => { | ||
615 | + html += `<tr><td>${row.net_id}</td><td>${row.host_address}</td><td>${row.prefix_length}</td></tr>` | ||
616 | + }); | ||
617 | + db.close(); | ||
618 | + resolve(html); | ||
619 | + }); | ||
620 | + }, 1000) | ||
621 | + }) | ||
622 | +} | ||
623 | + | ||
624 | +var getnetworkInfo = function getNI(){ | ||
625 | + return new Promise(function(resolve, reject){ | ||
626 | + setTimeout( function(){ | ||
627 | + var html = `<tr><th>net_id</th><th>domain</th><th>interface_name</th></tr>`; | ||
628 | + const db = new sqlite3.Database('networkDatabase.db'); | ||
629 | + let sql = "SELECT * FROM network_info"; | ||
630 | + db.all(sql, [], (err, rows) => { | ||
631 | + if (err) { | ||
632 | + log.err(err); | ||
633 | + throw err; | ||
634 | + } | ||
635 | + rows.forEach((row) => { | ||
636 | + html += `<tr><td>${row.net_id}</td><td>${row.domain}</td><td>${row.interface_name}</td></tr>` | ||
637 | + }); | ||
638 | + db.close(); | ||
639 | + resolve(html); | ||
640 | + }); | ||
641 | + }, 1000) | ||
642 | + }) | ||
643 | +} | ||
644 | + | ||
645 | +var getrouteInfo = function getRI(){ | ||
646 | + return new Promise(function(resolve, reject){ | ||
647 | + setTimeout( function(){ | ||
648 | + var html = `<tr><th>net_id</th><th>destination</th><th>d_prefix</th><th>gateway</th><th>interface_name</th></tr>`; | ||
649 | + const db = new sqlite3.Database('networkDatabase.db'); | ||
650 | + let sql = "SELECT * FROM routeinfo"; | ||
651 | + db.all(sql, [], (err, rows) => { | ||
652 | + if (err) { | ||
653 | + log.err(err); | ||
654 | + throw err; | ||
655 | + } | ||
656 | + rows.forEach((row) => { | ||
657 | + html += `<tr><td>${row.net_id}</td><td>${row.destination}</td><td>${row.d_prefix}</td><td>${row.gateway}</td><td>${row.interface_name}</td></tr>` | ||
658 | + }); | ||
659 | + db.close(); | ||
660 | + resolve(html); | ||
661 | + }); | ||
662 | + }, 1000) | ||
663 | + }) | ||
664 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
... | @@ -32,16 +32,16 @@ connect_btn.addEventListener("click", () => { | ... | @@ -32,16 +32,16 @@ connect_btn.addEventListener("click", () => { |
32 | /* | 32 | /* |
33 | var connection = mysql.createConnection({ | 33 | var connection = mysql.createConnection({ |
34 | host:'localhost', | 34 | host:'localhost', |
35 | - user:'root', | 35 | + user: 'root', |
36 | - password:'1234' | 36 | + password: '1234' |
37 | }); | 37 | }); |
38 | 38 | ||
39 | connection.connect(); | 39 | connection.connect(); |
40 | */ | 40 | */ |
41 | 41 | ||
42 | var mysql = { | 42 | var mysql = { |
43 | - user : 'root', | 43 | + user: 'root', |
44 | - password : '1234' | 44 | + password: '1234' |
45 | }; | 45 | }; |
46 | 46 | ||
47 | function apkInstall(){ | 47 | function apkInstall(){ |
... | @@ -77,6 +77,82 @@ function convertToMysql(){ | ... | @@ -77,6 +77,82 @@ function convertToMysql(){ |
77 | }) | 77 | }) |
78 | } | 78 | } |
79 | 79 | ||
80 | +// function extractDB () { | ||
81 | +// cmd_backup = exec('adb -s '+device+' backup com.example.dataextraction -f backup.dataextraction.ad', function(error, stdout, stderr){ | ||
82 | +// cc.innerHTML="backup app"; | ||
83 | +// setTimeout(function(){ | ||
84 | +// cmd_unpack = exec('java -jar abe.jar unpack backup.dataextraction.ad dataextraction.tar',function(error, stdout, stderr){ | ||
85 | +// cc.innerHTML="unpack backup"; | ||
86 | +// cmd_unzip = exec('tar xvf dataextraction.tar', function(error, stdout, stderr){ | ||
87 | +// cc.innerHTML="unzip tar"; | ||
88 | +// cmd_moveIdb = fs.rename('apps/com.example.dataextraction/db/InnerDatabase.db', 'InnerDatabase.db', function(){ | ||
89 | +// cc.innerHTML="move InnerDB File"; | ||
90 | +// cmd_moveNdb = fs.rename('apps/com.example.dataextraction/db/networkDatabase.db', 'networkDatabase.db',function(){ | ||
91 | +// cc.innerHTML="move NetworkDB File"; | ||
92 | +// cmd_sqlIdb = exec('sqlite3 InnerDatabase.db .dump | python SQLiteToMysql.py > InnerDatabase.sql',function(error, stdout, stderr){ | ||
93 | +// cc.innerHTML="make InnerDB SQL"; | ||
94 | +// cmd_sqlNdb = exec('sqlite3 networkDatabase.db .dump | python SQLiteToMysql_network.py > networkDatabase.sql', function(error, stdout, stderr){ | ||
95 | +// cc.innerHTML="make NetworkDB SQL"; | ||
96 | +// cmd_makeIdb = exec('mysql -u'+mysql.user+' -p'+mysql.password+' -e "DROP DATABASE IF EXISTS DATAEXTRACTION;CREATE DATABASE DATAEXTRACTION CHARACTER SET utf8 COLLATE utf8_unicode_ci;USE DATAEXTRACTION;"',function(error, stdout, stderr){ | ||
97 | +// cc.innerHTML="create InnerDB"; | ||
98 | +// cmd_insertIdb = exec('mysql -u'+mysql.user+' -p'+mysql.password+' DATAEXTRACTION < InnerDatabase.sql',function(error, stdout, stderr){ | ||
99 | +// cc.innerHTML="insert Data ; InnerDB"; | ||
100 | +// cmd_makeNdb = exec('mysql -u'+mysql.user+' -p'+mysql.password+' -e "DROP DATABASE IF EXISTS DATAEXTRACTION_network;CREATE DATABASE DATAEXTRACTION_network;USE DATAEXTRACTION_network;"',function(error, stdout, stderr){ | ||
101 | +// cc.innerHTML="create NetworkDB"; | ||
102 | +// cmd_insertNdb = exec('mysql -u'+mysql.user+' -p'+mysql.password+' DATAEXTRACTION_network < networkDatabase.sql',function(error, stdout, stderr){ | ||
103 | +// cc.innerHTML="insert Data ; NetworkDB"; | ||
104 | +// cc.innerHTML="Data Extraction Complete !"; | ||
105 | +// cc.innerHTML="Click 'NEXT' Button"; | ||
106 | +// }) | ||
107 | +// }) | ||
108 | +// }) | ||
109 | +// }) | ||
110 | +// }) | ||
111 | +// }) | ||
112 | +// }) | ||
113 | +// }) | ||
114 | +// }) | ||
115 | +// }) | ||
116 | +// },7000); | ||
117 | +// }); | ||
118 | +// //cmd_backup(); | ||
119 | +// } | ||
120 | + | ||
121 | +// //db insert done | ||
122 | +// io.on('connection', function(socket){ | ||
123 | +// var instanceId = socket.id; | ||
124 | + | ||
125 | +// socket.on('alert', function(data){ | ||
126 | +// cc.innerHTML = data.comment+" db created"; | ||
127 | +// }) | ||
128 | +// socket.on('end', function(data){ | ||
129 | +// cc.innerHTML="all databases created !"; | ||
130 | +// extractDB(); | ||
131 | +// }) | ||
132 | +// }) | ||
133 | + | ||
134 | +function convertToMysql(){ | ||
135 | + cmd_sqlIdb = exec('sqlite3 InnerDatabase.db .dump | python SQLiteToMysql.py > InnerDatabase.sql',function(error, stdout, stderr){ | ||
136 | + cc.innerHTML="make InnerDB SQL"; | ||
137 | + cmd_sqlNdb = exec('sqlite3 networkDatabase.db .dump | python SQLiteToMysql_network.py > networkDatabase.sql', function(error, stdout, stderr){ | ||
138 | + cc.innerHTML="make NetworkDB SQL"; | ||
139 | + cmd_makeIdb = exec('mysql -u'+mysql.user+' -p'+mysql.password+' -e "DROP DATABASE IF EXISTS DATAEXTRACTION;CREATE DATABASE DATAEXTRACTION CHARACTER SET utf8 COLLATE utf8_unicode_ci;USE DATAEXTRACTION;"',function(error, stdout, stderr){ | ||
140 | + cc.innerHTML="create InnerDB"; | ||
141 | + cmd_insertIdb = exec('mysql -u'+mysql.user+' -p'+mysql.password+' DATAEXTRACTION < InnerDatabase.sql',function(error, stdout, stderr){ | ||
142 | + cc.innerHTML="insert Data ; InnerDB"; | ||
143 | + cmd_makeNdb = exec('mysql -u'+mysql.user+' -p'+mysql.password+' -e "DROP DATABASE IF EXISTS DATAEXTRACTION_network;CREATE DATABASE DATAEXTRACTION_network;USE DATAEXTRACTION_network;"',function(error, stdout, stderr){ | ||
144 | + cc.innerHTML="create NetworkDB"; | ||
145 | + cmd_insertNdb = exec('mysql -u'+mysql.user+' -p'+mysql.password+' DATAEXTRACTION_network < networkDatabase.sql',function(error, stdout, stderr){ | ||
146 | + cc.innerHTML="insert Data ; NetworkDB"; | ||
147 | + cc.innerHTML="Data Extraction Complete !"; | ||
148 | + cc.innerHTML="Click 'NEXT' Button"; | ||
149 | + }) | ||
150 | + }) | ||
151 | + }) | ||
152 | + }) | ||
153 | + }) | ||
154 | + }) | ||
155 | +} | ||
80 | function extractDB () { | 156 | function extractDB () { |
81 | cmd_backup = exec('adb -s '+device+' backup com.example.dataextraction -f backup.dataextraction.ad', function(error, stdout, stderr){ | 157 | cmd_backup = exec('adb -s '+device+' backup com.example.dataextraction -f backup.dataextraction.ad', function(error, stdout, stderr){ |
82 | cc.innerHTML="backup app"; | 158 | cc.innerHTML="backup app"; |
... | @@ -119,5 +195,7 @@ ipcRenderer.on("device", (e, arg) => { | ... | @@ -119,5 +195,7 @@ ipcRenderer.on("device", (e, arg) => { |
119 | //device.innerHTML = arg.toString(); | 195 | //device.innerHTML = arg.toString(); |
120 | 196 | ||
121 | cc.innerHTML="DATA EXTRACTION START !"; | 197 | cc.innerHTML="DATA EXTRACTION START !"; |
122 | - apkInstall(); | 198 | + // apkInstall(); |
199 | + extractDB(); | ||
200 | + | ||
123 | }); | 201 | }); | ... | ... |
... | @@ -18,7 +18,7 @@ | ... | @@ -18,7 +18,7 @@ |
18 | <button id="btn" class="menu_alldata_nwide" onclick="menu_all();">All Data | 18 | <button id="btn" class="menu_alldata_nwide" onclick="menu_all();">All Data |
19 | <div id="menu_alldata_wide" style="display:none"> | 19 | <div id="menu_alldata_wide" style="display:none"> |
20 | <br> | 20 | <br> |
21 | - <h2 onclick="location.href='menu0.html'">전체 데이터 보기</h2> | 21 | + <h2 onclick="location.href='alldata_menu.html'">전체 데이터 보기</h2> |
22 | <svg class="bi bi-arrow-right-circle" width="0.3em" height="0.3em" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg" style="color:#4e73df" onclick="location.href='menu0.html'"> | 22 | <svg class="bi bi-arrow-right-circle" width="0.3em" height="0.3em" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg" style="color:#4e73df" onclick="location.href='menu0.html'"> |
23 | <path fill-rule="evenodd" d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z"/> | 23 | <path fill-rule="evenodd" d="M8 15A7 7 0 1 0 8 1a7 7 0 0 0 0 14zm0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16z"/> |
24 | <path fill-rule="evenodd" d="M7.646 11.354a.5.5 0 0 1 0-.708L10.293 8 7.646 5.354a.5.5 0 1 1 .708-.708l3 3a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708 0z"/> | 24 | <path fill-rule="evenodd" d="M7.646 11.354a.5.5 0 0 1 0-.708L10.293 8 7.646 5.354a.5.5 0 1 1 .708-.708l3 3a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708 0z"/> |
... | @@ -72,7 +72,7 @@ | ... | @@ -72,7 +72,7 @@ |
72 | <div id ="menu" class="menu_up"> | 72 | <div id ="menu" class="menu_up"> |
73 | <div id="btn_group"> | 73 | <div id="btn_group"> |
74 | <button id="btn" class="menu_analysis_menu3_nwide" onclick="menu_analysis_menu3();">Apps | 74 | <button id="btn" class="menu_analysis_menu3_nwide" onclick="menu_analysis_menu3();">Apps |
75 | - <div id="menu_analysis_menu3_wide" style="display:none" onclick="location.href='menu3.html'"> | 75 | + <div id="menu_analysis_menu3_wide" style="display:none" onclick="location.href='menu_apps.html'"> |
76 | <h4>어플리케이션 사용 분석</h4> | 76 | <h4>어플리케이션 사용 분석</h4> |
77 | <div id="wide_location"> | 77 | <div id="wide_location"> |
78 | <h2>어플 사용 분석</h2> | 78 | <h2>어플 사용 분석</h2> |
... | @@ -89,7 +89,7 @@ | ... | @@ -89,7 +89,7 @@ |
89 | <div id ="menu"> | 89 | <div id ="menu"> |
90 | <div id="btn_group"> | 90 | <div id="btn_group"> |
91 | <button id="btn" class="menu_analysis_menu4_nwide" onclick="menu_analysis_menu4();">Media | 91 | <button id="btn" class="menu_analysis_menu4_nwide" onclick="menu_analysis_menu4();">Media |
92 | - <div id="menu_analysis_menu4_wide" style="display:none" onclick="location.href='menu4.html'"> | 92 | + <div id="menu_analysis_menu4_wide" style="display:none" onclick="location.href='menu_media.html'"> |
93 | <h4>미디어 파일 저장공간 분석<br>비디오 분석</h4> | 93 | <h4>미디어 파일 저장공간 분석<br>비디오 분석</h4> |
94 | <div id="wide_location"> | 94 | <div id="wide_location"> |
95 | <h2>미디어 분석</h2> | 95 | <h2>미디어 분석</h2> | ... | ... |
source/forensic_tool/src/menu_apps.html
0 → 100644
1 | +<!DOCTYPE html> | ||
2 | +<html lang="en"> | ||
3 | +<head> | ||
4 | + <meta charset="UTF-8"> | ||
5 | + <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||
6 | + <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous"> | ||
7 | + <script src="https://cdn.jsdelivr.net/npm/chart.js@2.8.0"></script> | ||
8 | + <link rel="stylesheet" href="../assets/css/menu_apps.css"> | ||
9 | + <title>Document</title> | ||
10 | +</head> | ||
11 | +<body> | ||
12 | +<div class="container"> | ||
13 | + <header class="menu-header py-4"> | ||
14 | + <div class="row d-flex justify-content-start flex-nowrap align-items-end"> | ||
15 | + <div class="col"> | ||
16 | + <a class="title-name text-dark">Apps</a> | ||
17 | + </div> | ||
18 | + <div div class="col-9"> | ||
19 | + <a class="title-detail">앱 사용 정보 분석</a> | ||
20 | + </div> | ||
21 | + <div div class="col"> | ||
22 | + <a class="title-back" href="menu.html" id="menu-info">뒤로가기</a> | ||
23 | + </div> | ||
24 | + </div> | ||
25 | + </header> | ||
26 | + <div class="nav-scroller nav-color py-1 mb-2"> | ||
27 | + <nav class="nav d-flex justify-content-around"> | ||
28 | + <a class="p-2" href="#" style="color: whitesmoke" onclick="openTap('App-List');">App List</a> | ||
29 | + <a class="p-2" href="#" style="color: whitesmoke" onclick="openTap('Deleted-App');">Deleted App</a> | ||
30 | + <a class="p-2" href="#" style="color: whitesmoke" onclick="openTap('Recent-Usage');">Recent Usage</a> | ||
31 | + </nav> | ||
32 | + </div> | ||
33 | + <div class="container"> | ||
34 | + <div id="App-List" class="menu"> | ||
35 | + <div class="row"> | ||
36 | + <div class="col"> | ||
37 | + <div class="my-3 p-3 bg-white rounded shadow-sm"> | ||
38 | + <h6 class="border-bottom border-gray pb-2 mb-0 font-nanum">App List</h6> | ||
39 | + <div class="row sort justify-content-end"> | ||
40 | + <a id="wifiusage" class="sort p-2 text-muted" href="#" onclick="getAppInfoList('wifiusage');">wifi 사용량순</a> | ||
41 | + <a id="cellularusage" class="sort p-2 text-muted" href="#" onclick="getAppInfoList('cellularusage');">cellular 사용량순</a> | ||
42 | + <a id="totaltime" class="sort p-2 text-muted" href="#" onclick="getAppInfoList('totaltime');" style="font-weight: bold;">실행 시간순</a> | ||
43 | + </div> | ||
44 | + <div id="applist"> | ||
45 | + | ||
46 | + </div> | ||
47 | + </div> | ||
48 | + </div> | ||
49 | + <div class="col"> | ||
50 | + <div class="my-3 p-3 bg-white rounded shadow-sm"> | ||
51 | + <a id="appdetail_title" class="border-bottom border-gray pb-2 mb-0 font-nanum">App Detail</a> | ||
52 | + <div id="appdetails" class="detail_app font-nanum pt-2 pb-5"> | ||
53 | + <h8 class="pt-3 pb-3 mb-0 font-italic">세부사항을 확인하려면 follow를 클릭하세요</h8> | ||
54 | + </div> | ||
55 | + <div id="pieChartdiv" class="pb-5"> | ||
56 | + <canvas id="pieChart" style="max-width: 500px;"></canvas> | ||
57 | + </div> | ||
58 | + <div id="barchart_title" style="display: none;"> | ||
59 | + <a class="pb-2 mb-0 font-nanum border-bottom border-gray">사용 시간대</a> | ||
60 | + </div> | ||
61 | + <div id="barChartdiv" class="pb-5"> | ||
62 | + <canvas id="barChart"></canvas> | ||
63 | + </div> | ||
64 | + <div id = "apptimelist" class="font-nanum"> | ||
65 | + </div> | ||
66 | + </div> | ||
67 | + </div> | ||
68 | + </div> | ||
69 | + </div> | ||
70 | + | ||
71 | + | ||
72 | + <div id="Deleted-App" class="menu" style="display:none"> | ||
73 | + <div class="row"> | ||
74 | + <div class="col"> | ||
75 | + <div id="deletedapps" class="my-3 p-3 bg-white rounded shadow-sm"> | ||
76 | + <h6 class="border-bottom border-gray pb-2 mb-0">Deleted Apps</h6> | ||
77 | + <div class="overflow-auto"> | ||
78 | + <div id="deletedapplist" class="font-nanum"> | ||
79 | + | ||
80 | + </div> | ||
81 | + </div> | ||
82 | + </div> | ||
83 | + </div> | ||
84 | + </div> | ||
85 | + </div> | ||
86 | + | ||
87 | + | ||
88 | + <div id="Recent-Usage" class="menu" style="display:none"> | ||
89 | + <h6 class="border-bottom border-gray pb-2 mb-0">최근 10일 사용 분석</h6> | ||
90 | + <div class="row"> | ||
91 | + <div class="col"> | ||
92 | + <div id="day10analysis" class="my-3 p-3 bg-white rounded shadow-sm"> | ||
93 | + <div id="pieCharttop10"> | ||
94 | + <a class="border-bottom border-gray pb-2 mb-0 font-nanum">사용 시간 비율</a> | ||
95 | + <canvas id="pieChart10" width="350" height="350"></canvas> | ||
96 | + </div> | ||
97 | + </div> | ||
98 | + </div> | ||
99 | + <div class="col"> | ||
100 | + <div id="top10list" class="my-3 p-3 bg-white rounded shadow-sm"> | ||
101 | + | ||
102 | + </div> | ||
103 | + </div> | ||
104 | + </div> | ||
105 | + <div class="row"> | ||
106 | + <div class="col"> | ||
107 | + <div class="my-3 p-3 bg-white rounded shadow-sm"> | ||
108 | + <a class="border-bottom border-gray pb-2 mb-0 font-nanum">일별 사용량</a> | ||
109 | + <canvas id="recent_bar" width="400" height="400"></canvas> | ||
110 | + </div> | ||
111 | + </div> | ||
112 | + <div class="col"> | ||
113 | + <div class="my-3 p-3 bg-white rounded shadow-sm"> | ||
114 | + <a class="border-bottom border-gray pb-2 mb-0 font-nanum">사용 어플</a> | ||
115 | + <div id="selectday"class="row sort justify-content-end"> | ||
116 | + | ||
117 | + </div> | ||
118 | + <table id="day_use_list" class="font-nanum" style="font-size: 10;"> | ||
119 | + <tbody> | ||
120 | + | ||
121 | + </tbody> | ||
122 | + </table> | ||
123 | + </div> | ||
124 | + </div> | ||
125 | + </div> | ||
126 | + </div> | ||
127 | + </div> | ||
128 | + </div> | ||
129 | +</div> | ||
130 | + <script src="menu_apps.js"></script> | ||
131 | + <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script> | ||
132 | + <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> | ||
133 | + <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script> | ||
134 | +</body> | ||
135 | +</html> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
source/forensic_tool/src/menu_apps.js
0 → 100644
1 | +const log = require('electron-log') | ||
2 | +const sqlite3 = require('sqlite3').verbose(); | ||
3 | +const offset = new Date().getTimezoneOffset() * 60000; | ||
4 | +var mychart = null; | ||
5 | +function el(selector) { | ||
6 | + return document.getElementById(selector); | ||
7 | +} | ||
8 | +function cl(selector) { | ||
9 | + return document.getElementsByClassName(selector); | ||
10 | +} | ||
11 | + | ||
12 | +// window.onload=function(){ | ||
13 | +// getAppInfoList(); | ||
14 | +// getDeletedAppList(); | ||
15 | +// } | ||
16 | +document.addEventListener("DOMContentLoaded", function(){ | ||
17 | + getAppInfoList('totaltime'); | ||
18 | + getDeletedAppList(); | ||
19 | + getRecentUsage(); | ||
20 | + }); | ||
21 | + | ||
22 | +function openTap(tabName) { | ||
23 | + var i; | ||
24 | + var x = document.getElementsByClassName("menu"); | ||
25 | + for (i = 0; i < x.length; i++) { | ||
26 | + x[i].style.display = "none" | ||
27 | + } | ||
28 | + document.getElementById(tabName).style.display = "block"; | ||
29 | +} | ||
30 | + | ||
31 | +function testClick(tabName) { | ||
32 | + log.info("testclick") | ||
33 | +} | ||
34 | + | ||
35 | + | ||
36 | +function getAppInfoList(sort_column){ | ||
37 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
38 | + var html = '' | ||
39 | + let sql = `select Appinfo.name, Appinfo.packagename, Appinfo.wifiusage, Appinfo.cellularusage, sum(AppUsageYear.totaltimeforeground) totaltime from AppInfo, AppUsageYear\ | ||
40 | + where Appinfo.packagename = AppUsageYear.packagename\ | ||
41 | + GROUP BY AppUsageYear.packagename\ | ||
42 | + ORDER BY ${sort_column} desc;` | ||
43 | + log.info("Query start"); | ||
44 | + db.all(sql, [], (err, rows) => { | ||
45 | + if (err) { | ||
46 | + log.err(err); | ||
47 | + throw err; | ||
48 | + } | ||
49 | + const offset = new Date().getTimezoneOffset() * 60000; | ||
50 | + var wifi; | ||
51 | + var cell; | ||
52 | + var totaltime; | ||
53 | + rows.forEach((row) => { | ||
54 | + if(row.wifiusage){ | ||
55 | + wifi = (row.wifiusage/1073741824).toFixed(2) + "GB"; | ||
56 | + } | ||
57 | + else if(row.wifiusage > 1048576){ | ||
58 | + wifi = (row.wifiusage/1048576).toFixed(2) + "MB"; | ||
59 | + } | ||
60 | + else if(row.wifiusage > 1024){ | ||
61 | + wifi = (row.wifiusage/1024).toFixed(2) + "KB"; | ||
62 | + } | ||
63 | + | ||
64 | + if(row.cellularusage> 1073741824){ | ||
65 | + cell = (row.cellularusage/1073741824).toFixed(2) + "GB"; | ||
66 | + } | ||
67 | + else if(row.cellularusage > 1048576){ | ||
68 | + cell = (row.cellularusage/1048576).toFixed(2) + "MB"; | ||
69 | + } | ||
70 | + else if(row.cellularusage > 1024){ | ||
71 | + cell = (row.cellularusage/1024).toFixed(2) + "KB"; | ||
72 | + } | ||
73 | + | ||
74 | + if(row.totaltime> 3600000){ | ||
75 | + totaltime = (row.totaltime/3600000).toFixed(2) + "Hour"; | ||
76 | + } | ||
77 | + else if(row.totaltime > 60000){ | ||
78 | + totaltime = (row.totaltime/60000).toFixed(2) + "Minute"; | ||
79 | + } | ||
80 | + else if(row.totaltime > 1000){ | ||
81 | + totaltime = (row.totaltime/1000).toFixed(2) + "Seconds"; | ||
82 | + } | ||
83 | + | ||
84 | + html += `<div class="media pt-3 font-nanum rounded" onclick="getAppDetail('${row.packagename}');"> | ||
85 | + <p class="media-body pb-3 mb-0 small lh-125 border-bottom border-gray"> | ||
86 | + <a class="d-block font-weight-bolder">${row.name}</a> | ||
87 | + <a class="d-block">${row.packagename}</a> | ||
88 | + <a class="font-weight-bold">wifi usage</a> | ||
89 | + <a>${wifi}</a><br> | ||
90 | + <a class="font-weight-bold">cellular usage</a> | ||
91 | + <a>${cell}</a><br> | ||
92 | + <a>total time in foreground</a> | ||
93 | + <a>${totaltime}</a><br> | ||
94 | + </p> | ||
95 | + </div>` | ||
96 | + }); | ||
97 | + document.querySelector('#applist').innerHTML = html; | ||
98 | + log.info("Query succesfully executed"); | ||
99 | + }); | ||
100 | + var i; | ||
101 | + var x = document.getElementsByClassName("sort"); | ||
102 | + for (i = 0; i < x.length; i++) { | ||
103 | + x[i].style.fontWeight = "normal"; | ||
104 | + } | ||
105 | + document.getElementById(sort_column).style.fontWeight = "bold"; | ||
106 | + | ||
107 | + db.close(); | ||
108 | + } | ||
109 | + | ||
110 | +function getDeletedAppList(){ | ||
111 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
112 | + var html = '' | ||
113 | + let sql = `SELECT AppUsageYear.lasttimeused, AppUsageYear.packagename, SUM(AppUsageYear.totaltimeforeground) as totaltime FROM AppUsageYear | ||
114 | + WHERE AppUsageYear.packagename NOT in (select Appinfo.packagename from AppInfo) | ||
115 | + GROUP BY AppUsageYear.packagename | ||
116 | + ORDER BY totaltime desc;` | ||
117 | + log.info("Query start"); | ||
118 | + db.all(sql, [], (err, rows) => { | ||
119 | + if (err) { | ||
120 | + log.err(err); | ||
121 | + throw err; | ||
122 | + } | ||
123 | + rows.forEach((row) => { | ||
124 | + var totaltime; | ||
125 | + if(row.totaltime> 3600000){ | ||
126 | + totaltime = (row.totaltime/3600000).toFixed(2) + "Hour"; | ||
127 | + } | ||
128 | + else if(row.totaltime > 60000){ | ||
129 | + totaltime = (row.totaltime/60000).toFixed(2) + "Minute"; | ||
130 | + } | ||
131 | + else if(row.totaltime > 1000){ | ||
132 | + totaltime = (row.totaltime/1000).toFixed(2) + "Seconds"; | ||
133 | + } | ||
134 | + html += `<div class="media pt-3"> | ||
135 | + <p class="media-body pb-3 mb-0 small lh-125 border-bottom border-gray"> | ||
136 | + <strong class="d-block">${row.packagename}</strong> | ||
137 | + <a class="font-weight-bold">총 사용 시간</a> | ||
138 | + <a>${totaltime}</a><br> | ||
139 | + <a class="font-weight-bold">마지막 사용 시간</a> | ||
140 | + <a>${new Date(row.lasttimeused-offset).toISOString().replace(/T/, ' ').replace(/\..+/, '')}</a><br> | ||
141 | + <a href="https://play.google.com/store/apps/details?id=${row.packagename}" onclick="window.open(this.href); return false">Follow</a> | ||
142 | + </p> | ||
143 | + </div> | ||
144 | + ` | ||
145 | + }); | ||
146 | + document.querySelector('#deletedapplist').innerHTML = html; | ||
147 | + log.info("Query succesfully executed"); | ||
148 | + }); | ||
149 | + db.close(); | ||
150 | + } | ||
151 | + | ||
152 | +function getRecentUsage(){ | ||
153 | + Promise.all([draw_recent_piechart(),listtop10(),get_recent_dataset()]).then(function(value){ | ||
154 | + log.info("getRecentUsage finished") | ||
155 | + }); | ||
156 | +} | ||
157 | + | ||
158 | +function getAppDetail(packagename){ | ||
159 | + Promise.all([drawpiechart(packagename),drawbarchart(packagename)]).then(function(value){ | ||
160 | + log.info("getAppDetail finished") | ||
161 | + }); | ||
162 | +} | ||
163 | +//Recent Usage 차트그리기 | ||
164 | +var draw_recent_piechart = function drawRecentPieChart(){ | ||
165 | + return new Promise(function(resolve, reject){ | ||
166 | + setTimeout( function(){ | ||
167 | + log.info("pie10 draw start"); | ||
168 | + Promise.all([top10_day(),totaltimeday()]).then(function(value){ | ||
169 | + log.info("pie10 draw start"); | ||
170 | + var recent_labels = []; | ||
171 | + var recent_datasets = []; | ||
172 | + var except = 0; | ||
173 | + value[0].forEach((row) => { | ||
174 | + recent_labels.push(row.name); | ||
175 | + recent_datasets.push(row.totaltime); | ||
176 | + except += row.totaltime; | ||
177 | + }); | ||
178 | + recent_labels.push("그 외"); | ||
179 | + recent_datasets.push(value[1]-except); | ||
180 | + var ctxP = document.getElementById("pieChart10").getContext('2d'); | ||
181 | + var myPieChart10 = new Chart(ctxP, { | ||
182 | + type: 'pie', | ||
183 | + data: { | ||
184 | + labels: recent_labels, | ||
185 | + datasets: [{ | ||
186 | + data: recent_datasets, | ||
187 | + backgroundColor: ["#F7464A", "#46BFBD", "#FDB45C", "#9B59B6", "#2471A3", "#3498DB", "#F39C12","#16A085","#E91E63","#949FB1", "#4D5360"], | ||
188 | + hoverBackgroundColor: ["#FF5A5E", "#5AD3D1", "#FFC870", "#AF7AC5 ", "#2980B9","#5DADE2", "#F5B041","#45B39D","#EC407A","#A8B3C5", "#616774"] | ||
189 | + }] | ||
190 | + }, | ||
191 | + options: { | ||
192 | + responsive: false | ||
193 | + } | ||
194 | + }); | ||
195 | + log.info("pie10 chart draw draw draw") | ||
196 | + }); | ||
197 | + resolve(true); | ||
198 | + }, 1000) | ||
199 | + }) | ||
200 | +} | ||
201 | + | ||
202 | +var listtop10 = function listTop10(){ | ||
203 | + return new Promise(function(resolve, reject){ | ||
204 | + setTimeout( function(){ | ||
205 | + log.info("listtop10 draw start"); | ||
206 | + Promise.all([top10_day()]).then(function(value){ | ||
207 | + log.info("listtop10 draw start"); | ||
208 | + var html = `<a class="border-bottom border-gray pb-2 mb-0 font-nanum">사용 시간 Top10</a><br>`; | ||
209 | + var index = 1; | ||
210 | + value[0].forEach((row) => { | ||
211 | + html += `<div class="pl-1 pt-1"><a class="pb-1" style="font-size: 15px">${index}. ${row.name}</a><br></div>`; | ||
212 | + index++; | ||
213 | + }); | ||
214 | + document.querySelector('#top10list').innerHTML = html; | ||
215 | + log.info("listtop10 chart draw draw draw") | ||
216 | + }); | ||
217 | + resolve(true); | ||
218 | + }, 1000) | ||
219 | + }) | ||
220 | +} | ||
221 | + | ||
222 | +//AppList 차트그리기 | ||
223 | +var drawpiechart = function drawPieChart(packagename){ | ||
224 | + return new Promise(function(resolve, reject){ | ||
225 | + setTimeout( function(){ | ||
226 | + var html = '' | ||
227 | + Promise.all([alltime(),totaltime(packagename),packagedetail(packagename),usedtime(packagename)]).then(function(value){ | ||
228 | + document.querySelector('#pieChartdiv').innerHTML = '<a class="border-bottom border-gray pb-2 mb-0" style="font-family: \'나눔바른고딕\'">사용 시간 비율</a><canvas id="pieChart" style="max-width: 500px;"></canvas>' | ||
229 | + var wifi; | ||
230 | + var cell; | ||
231 | + var totaltime; | ||
232 | + document.querySelector('#appdetail_title').innerHTML = value[2].name; | ||
233 | + if(value[2].wifiusage){ | ||
234 | + wifi = (value[2].wifiusage/1073741824).toFixed(2) + "GB"; | ||
235 | + } | ||
236 | + else if(value[2].wifiusage > 1048576){ | ||
237 | + wifi = (value[2].wifiusage/1048576).toFixed(2) + "MB"; | ||
238 | + } | ||
239 | + else if(value[2].wifiusage > 1024){ | ||
240 | + wifi = (value[2].wifiusage/1024).toFixed(2) + "KB"; | ||
241 | + } | ||
242 | + | ||
243 | + if(value[2].cellularusage > 1073741824){ | ||
244 | + cell = (value[2].cellularusage/1073741824).toFixed(2) + "GB"; | ||
245 | + } | ||
246 | + else if(value[2].cellularusage > 1048576){ | ||
247 | + cell = (value[2].cellularusage/1048576).toFixed(2) + "MB"; | ||
248 | + } | ||
249 | + else if(value[2].cellularusage > 1024){ | ||
250 | + cell = (value[2].cellularusage/1024).toFixed(2) + "KB"; | ||
251 | + } | ||
252 | + | ||
253 | + if(value[2].totaltime> 3600000){ | ||
254 | + totaltime = (value[2].totaltime/3600000).toFixed(2) + "Hour"; | ||
255 | + } | ||
256 | + else if(value[2].totaltime > 60000){ | ||
257 | + totaltime = (value[2].totaltime/60000).toFixed(2) + "Minute"; | ||
258 | + } | ||
259 | + else if(row.totaltime > 1000){ | ||
260 | + totaltime = (value[2].totaltime/1000).toFixed(2) + "Seconds"; | ||
261 | + } | ||
262 | + html += ` | ||
263 | + <a class="d-block text-muted" style="font-size: 13px; float: right">${value[2].packagename}</a> | ||
264 | + <a class="d-block text-muted" style="font-size: 13px">${value[2].version} ver</a> | ||
265 | + <a class="font-weight-bold" style="font-size: 13px">First Install</a> | ||
266 | + <a style="font-size: 13px">${new Date(value[2].firstinstall-offset).toISOString().replace(/T/, ' ').replace(/\..+/, '')}</a><br> | ||
267 | + <a class="font-weight-bold" style="font-size: 13px">Last Update</a> | ||
268 | + <a style="font-size: 13px">${new Date(value[2].lastupdate-offset).toISOString().replace(/T/, ' ').replace(/\..+/, '')}</a><br> | ||
269 | + <a class="font-weight-bold" style="font-size: 13px">Wifi Usage</a> | ||
270 | + <a style="font-size: 13px">${wifi}</a><br> | ||
271 | + <a class="font-weight-bold" style="font-size: 13px">Cellular Usage</a> | ||
272 | + <a style="font-size: 13px">${cell}</a><br> | ||
273 | + <a class="font-weight-bold" style="font-size: 13px">Total Time in Foreground</a> | ||
274 | + <a style="font-size: 13px">${totaltime}</a><br>` | ||
275 | + document.querySelector('#appdetails').innerHTML = html; | ||
276 | + var ctxP = document.getElementById("pieChart").getContext('2d'); | ||
277 | + var myPieChart = new Chart(ctxP, { | ||
278 | + type: 'pie', | ||
279 | + data: { | ||
280 | + labels: [value[2].name,"그외 어플"], | ||
281 | + datasets: [{ | ||
282 | + data: [value[1], value[0]-value[1]], | ||
283 | + backgroundColor: ["#F7464A","#949FB1"], | ||
284 | + hoverBackgroundColor: ["#FF5A5E","#A8B3C5"] | ||
285 | + }] | ||
286 | + }, | ||
287 | + options: { | ||
288 | + responsive: true | ||
289 | + } | ||
290 | + }); | ||
291 | + log.info("pie chart draw draw draw") | ||
292 | + }); | ||
293 | + resolve(true); | ||
294 | + }, 1000) | ||
295 | + }) | ||
296 | +} | ||
297 | + | ||
298 | +var drawbarchart = function drawBarChart(packagename){ | ||
299 | + return new Promise(function(resolve, reject){ | ||
300 | + setTimeout( function(){ | ||
301 | + var timedataset = [0,0,0,0,0,0,0,0,0,0,0,0]; | ||
302 | + var html1 = '<a class="pb-2 mb-0 font-nanum border-bottom border-gray">기간별 마지막 사용시간 리스트</a><br>'; | ||
303 | + Promise.all([usedtime(packagename)]).then(function(value){ | ||
304 | + log.info("bar chart draw draw draw") | ||
305 | + value[0].forEach((time) => { | ||
306 | + var hour = new Date(time-offset).getHours() | ||
307 | + switch(true){ | ||
308 | + case (hour < 2) : | ||
309 | + timedataset[0] += 1; | ||
310 | + break; | ||
311 | + case (hour < 4) : | ||
312 | + timedataset[1] += 1; | ||
313 | + break; | ||
314 | + case (hour < 6) : | ||
315 | + timedataset[2] += 1; | ||
316 | + break; | ||
317 | + case (hour < 8) : | ||
318 | + timedataset[3] += 1; | ||
319 | + break; | ||
320 | + case (hour < 10) : | ||
321 | + timedataset[4] += 1; | ||
322 | + break; | ||
323 | + case (hour < 12) : | ||
324 | + timedataset[5] += 1; | ||
325 | + break; | ||
326 | + case (hour < 14) : | ||
327 | + timedataset[6] += 1; | ||
328 | + break; | ||
329 | + case (hour < 16) : | ||
330 | + timedataset[7] += 1; | ||
331 | + break; | ||
332 | + case (hour < 18) : | ||
333 | + timedataset[8] += 1; | ||
334 | + break; | ||
335 | + case (hour < 20) : | ||
336 | + timedataset[9] += 1; | ||
337 | + break; | ||
338 | + case (hour < 22) : | ||
339 | + timedataset[10] += 1; | ||
340 | + break; | ||
341 | + case (hour < 24) : | ||
342 | + timedataset[11] += 1; | ||
343 | + break; | ||
344 | + } | ||
345 | + }); | ||
346 | + var ctx = document.getElementById("barChart").getContext('2d'); | ||
347 | + var config = { | ||
348 | + type: 'bar', | ||
349 | + data: { | ||
350 | + labels: ["00-02","02-04","04-06","06-08","08-10","10-12","12-14","14-16","16-18","18-20","20-22","22-24"], | ||
351 | + datasets: [{ | ||
352 | + label: '# of Last used time', | ||
353 | + data: timedataset, | ||
354 | + backgroundColor: [ | ||
355 | + 'rgba(255, 99, 132, 0.2)','rgba(54, 162, 235, 0.2)','rgba(255, 206, 86, 0.2)','rgba(75, 192, 192, 0.2)','rgba(153, 102, 255, 0.2)','rgba(255, 159, 64, 0.2)', | ||
356 | + 'rgba(255, 99, 132, 0.2)','rgba(54, 162, 235, 0.2)','rgba(255, 206, 86, 0.2)','rgba(75, 192, 192, 0.2)','rgba(153, 102, 255, 0.2)','rgba(255, 159, 64, 0.2)' | ||
357 | + ], | ||
358 | + borderColor: [ | ||
359 | + 'rgba(255,99,132,1)','rgba(54, 162, 235, 1)','rgba(255, 206, 86, 1)','rgba(75, 192, 192, 1)','rgba(153, 102, 255, 1)','rgba(255, 159, 64, 1)', | ||
360 | + 'rgba(255,99,132,1)','rgba(54, 162, 235, 1)','rgba(255, 206, 86, 1)','rgba(75, 192, 192, 1)','rgba(153, 102, 255, 1)','rgba(255, 159, 64, 1)' | ||
361 | + ], | ||
362 | + borderWidth: 1 | ||
363 | + }] | ||
364 | + }, | ||
365 | + options: { | ||
366 | + scales: { | ||
367 | + yAxes: [{ | ||
368 | + ticks: { | ||
369 | + beginAtZero: true, | ||
370 | + stepSize:1 | ||
371 | + } | ||
372 | + }] | ||
373 | + } | ||
374 | + } | ||
375 | + } | ||
376 | + if (mychart == null) { | ||
377 | + mychart = new Chart(ctx, config); | ||
378 | + log.info("bar chart create") | ||
379 | + } else { | ||
380 | + mychart.config = config; | ||
381 | + mychart.update(); | ||
382 | + log.info("bar chart update") | ||
383 | + } | ||
384 | + value[0].forEach((time) => { | ||
385 | + html1 += `<a class="pl-1" style="font-size: 13px">${new Date(time-offset).toISOString().replace(/T/, ' ').replace(/\..+/, '')}</a><br>`; | ||
386 | + }); | ||
387 | + document.querySelector('#apptimelist').innerHTML = html1; | ||
388 | + document.getElementById('barchart_title').style.display = "block"; | ||
389 | + }); | ||
390 | + resolve(true); | ||
391 | + }, 1000) | ||
392 | + }) | ||
393 | +} | ||
394 | + | ||
395 | +var getbyte = function getB(byte){ | ||
396 | + return new Promise(resolve => | ||
397 | + setTimeout(() => { | ||
398 | + if(byte > 1073741824){ | ||
399 | + resolve((byte/1073741824).toFixed(2) + "GB"); | ||
400 | + log.info((byte/1073741824).toFixed(2) + "GB"); | ||
401 | + } | ||
402 | + else if(byte > 1048576){ | ||
403 | + resolve((byte/1048576).toFixed(2) + "MB"); | ||
404 | + } | ||
405 | + else if(byte > 1024){ | ||
406 | + resolve((byte/1024).toFixed(2) + "KB"); | ||
407 | + } | ||
408 | + }, 1000) | ||
409 | + ); | ||
410 | +} | ||
411 | + | ||
412 | +var alltime = function getAllTime(){ | ||
413 | + return new Promise(function(resolve, reject){ | ||
414 | + setTimeout( function(){ | ||
415 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
416 | + let sql = `select sum(AppUsageYear.totaltimeforeground) as alltime from AppUsageYear;` | ||
417 | + log.info("alltime Query start"); | ||
418 | + db.get(sql, [], (err, row) => { | ||
419 | + if (err) { | ||
420 | + log.err(err); | ||
421 | + reject(err); | ||
422 | + throw err; | ||
423 | + } | ||
424 | + else{ | ||
425 | + log.info("alltime Query succesfully executed"); | ||
426 | + log.info(row.alltime); | ||
427 | + db.close(); | ||
428 | + resolve(row.alltime); | ||
429 | + } | ||
430 | + }); | ||
431 | + }, 1000) | ||
432 | + }) | ||
433 | +} | ||
434 | + | ||
435 | +var totaltime = function getTotaltime(packagename){ | ||
436 | + return new Promise(function(resolve, reject){ | ||
437 | + setTimeout( function(){ | ||
438 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
439 | + log.info(packagename); | ||
440 | + let sql = `select sum(AppUsageYear.totaltimeforeground) as totaltime from AppUsageYear | ||
441 | + where packagename = "${packagename}";` | ||
442 | + log.info("totaltime Query start"); | ||
443 | + db.get(sql, [], (err, row) => { | ||
444 | + if (err) { | ||
445 | + log.err(err); | ||
446 | + reject(err); | ||
447 | + throw err; | ||
448 | + } | ||
449 | + else{ | ||
450 | + log.info("totaltime Query succesfully executed"); | ||
451 | + log.info(row.totaltime); | ||
452 | + db.close(); | ||
453 | + resolve(row.totaltime); | ||
454 | + } | ||
455 | + }); | ||
456 | + }, 1000) | ||
457 | + }) | ||
458 | +} | ||
459 | + | ||
460 | +var totaltimeday = function getTotaltimeDay(){ | ||
461 | + return new Promise(function(resolve, reject){ | ||
462 | + setTimeout( function(){ | ||
463 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
464 | + let sql = `select sum(AppUsageDay.totaltimeforeground) as totaltime from AppUsageDay;` | ||
465 | + log.info("totaltime Query start"); | ||
466 | + db.get(sql, [], (err, row) => { | ||
467 | + if (err) { | ||
468 | + log.err(err); | ||
469 | + reject(err); | ||
470 | + throw err; | ||
471 | + } | ||
472 | + else{ | ||
473 | + log.info("totaltime Query succesfully executed"); | ||
474 | + log.info(row.totaltime); | ||
475 | + db.close(); | ||
476 | + resolve(row.totaltime); | ||
477 | + } | ||
478 | + }); | ||
479 | + }, 1000) | ||
480 | + }) | ||
481 | +} | ||
482 | + | ||
483 | +var packagedetail = function getPackageDetail(packagename){ | ||
484 | + return new Promise(function(resolve, reject){ | ||
485 | + setTimeout( function(){ | ||
486 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
487 | + log.info(packagename); | ||
488 | + var sql = `select Appinfo.name, Appinfo.packagename, Appinfo.version, Appinfo.firstinstall, Appinfo.lastupdate, Appinfo.wifiusage, Appinfo.cellularusage, sum(AppUsageYear.totaltimeforeground) totaltime\ | ||
489 | + from AppInfo left join AppUsageYear on AppInfo.packagename = AppUsageYear.packagename\ | ||
490 | + WHERE Appinfo.packagename = "${packagename}"\ | ||
491 | + GROUP BY AppUsageYear.packagename;` | ||
492 | + log.info("packagedetail Query start"); | ||
493 | + db.get(sql, [], (err, row) => { | ||
494 | + if (err) { | ||
495 | + log.err(err); | ||
496 | + reject(err); | ||
497 | + throw err; | ||
498 | + } | ||
499 | + else{ | ||
500 | + log.info("packagedetail Query succesfully executed"); | ||
501 | + db.close(); | ||
502 | + resolve(row); | ||
503 | + } | ||
504 | + }); | ||
505 | + }, 1000) | ||
506 | + }) | ||
507 | +} | ||
508 | + | ||
509 | +var usedtime = function getLasttimeused(packagename){ | ||
510 | + return new Promise(function(resolve, reject){ | ||
511 | + setTimeout( function(){ | ||
512 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
513 | + log.info(packagename); | ||
514 | + var timelist = []; | ||
515 | + var sql = `select lasttimeused from AppUsageYear\ | ||
516 | + where packagename = "${packagename}" and lasttimeused != firsttimestamp\ | ||
517 | + union\ | ||
518 | + select lasttimeused from AppUsageMonth | ||
519 | + where packagename = "${packagename}" and lasttimeused != firsttimestamp\ | ||
520 | + union\ | ||
521 | + select lasttimeused from AppUsageWeek | ||
522 | + where packagename = "${packagename}" and lasttimeused != firsttimestamp\ | ||
523 | + union\ | ||
524 | + select lasttimeused from AppUsageDay\ | ||
525 | + where packagename = "${packagename}" and lasttimeused != firsttimestamp;` | ||
526 | + log.info("usedtime Query start"); | ||
527 | + db.all(sql, [], (err, rows) => { | ||
528 | + if (err) { | ||
529 | + log.err(err); | ||
530 | + reject(err); | ||
531 | + throw err; | ||
532 | + } | ||
533 | + rows.forEach((row) => { | ||
534 | + if(row.lasttimeused>1000000000000){ | ||
535 | + timelist.push(row.lasttimeused); | ||
536 | + } | ||
537 | + }); | ||
538 | + log.info("usedtime Query succesfully executed"); | ||
539 | + log.info(timelist.length); | ||
540 | + resolve(timelist); | ||
541 | + }); | ||
542 | + }, 1000) | ||
543 | + }) | ||
544 | +} | ||
545 | + | ||
546 | +var top10_day = function getTop10(){ | ||
547 | + return new Promise(function(resolve, reject){ | ||
548 | + setTimeout( function(){ | ||
549 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
550 | + var timelist = []; | ||
551 | + var sql = `select Appinfo.name, Appinfo.packagename, sum(AppUsageDay.totaltimeforeground) totaltime from AppInfo, AppUsageDay | ||
552 | + where Appinfo.packagename = AppUsageDay.packagename | ||
553 | + GROUP BY AppUsageDay.packagename | ||
554 | + ORDER BY totaltime desc | ||
555 | + LIMIT 10;` | ||
556 | + log.info("getTop10 Query start"); | ||
557 | + db.all(sql, [], (err, rows) => { | ||
558 | + if (err) { | ||
559 | + log.err(err); | ||
560 | + reject(err); | ||
561 | + throw err; | ||
562 | + } | ||
563 | + else{ | ||
564 | + log.info("getTop10 Query succesfully executed"); | ||
565 | + db.close(); | ||
566 | + resolve(rows) | ||
567 | + } | ||
568 | + }); | ||
569 | + }, 1000) | ||
570 | + }) | ||
571 | +} | ||
572 | +function getdayusedapp(day){ | ||
573 | + var date = (day > 9)? day : "0"+day; | ||
574 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
575 | + var html = `<tr class="pb-2" style="font-size: 13px"><th>name</th><th>last time used</th><th>time</th></tr>`; | ||
576 | + var sql = `SELECT AppUsageDay.packagename,AppInfo.name, lasttimeused,totaltimeforeground,strftime('%d',datetime(firsttimestamp/1000, 'unixepoch', 'localtime')) as day FROM AppUsageDay, AppInfo | ||
577 | + where day = '${date}' and totaltimeforeground > 0 and AppInfo.packagename = AppUsageDay.packagename | ||
578 | + order by lasttimeused;`; | ||
579 | + log.info("getdayusedapp Query start"); | ||
580 | + db.all(sql, [], (err, rows) => { | ||
581 | + if (err) { | ||
582 | + log.err(err); | ||
583 | + reject(err); | ||
584 | + throw err; | ||
585 | + } | ||
586 | + rows.forEach((row) => { | ||
587 | + var totaltime; | ||
588 | + if(row.totaltimeforeground> 3600000){ | ||
589 | + totaltime = (row.totaltimeforeground/3600000).toFixed(2) + "h"; | ||
590 | + } | ||
591 | + else if(row.totaltimeforeground > 60000){ | ||
592 | + totaltime = (row.totaltimeforeground/60000).toFixed(2) + "m"; | ||
593 | + } | ||
594 | + else if(row.totaltimeforeground > 1000){ | ||
595 | + totaltime = (row.totaltimeforeground/1000).toFixed(2) + "s"; | ||
596 | + } | ||
597 | + html += `<tr style="font-size: 13px"><td class="pr-4">${row.name}</td><td class="pr-4">${new Date(row.lasttimeused-offset).toISOString().replace(/T/, ' ').replace(/\..+/, '')}</td><td class="pr-1">${totaltime}</td></tr>` | ||
598 | + }); | ||
599 | + document.querySelector('#day_use_list > tbody').innerHTML = html; | ||
600 | + }); | ||
601 | + var i; | ||
602 | + var x = document.getElementsByClassName("sort"); | ||
603 | + for (i = 0; i < x.length; i++) { | ||
604 | + x[i].style.fontWeight = "normal"; | ||
605 | + } | ||
606 | + document.getElementById('day_'+day).style.fontWeight = "bold"; | ||
607 | +} | ||
608 | +var get_recent_dataset = function getRecentDataset(){ | ||
609 | + return new Promise(function(resolve, reject){ | ||
610 | + setTimeout( function(){ | ||
611 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
612 | + var sql = `select firsttimestamp,lasttimestamp,sum(totaltimeforeground) as totaltime from AppUsageDay | ||
613 | + group by firsttimestamp;` | ||
614 | + db.all(sql, [], (err, rows) => { | ||
615 | + if (err) { | ||
616 | + log.err(err); | ||
617 | + reject(err); | ||
618 | + throw err; | ||
619 | + } | ||
620 | + var label_array = []; | ||
621 | + var bardataset = []; | ||
622 | + rows.forEach((row) => { | ||
623 | + var date = new Date(row.firsttimestamp-offset); | ||
624 | + label_array.push(date.getDate()); | ||
625 | + bardataset.push(row.totaltime/3600000); | ||
626 | + document.getElementById('selectday').innerHTML += `<a id="day_${date.getDate()}" class="sort p-2 text-muted" onclick="getdayusedapp('${date.getDate()}');">${date.getDate()}</a>`; | ||
627 | + }); | ||
628 | + db.close(); | ||
629 | + var ctx = document.getElementById("recent_bar").getContext('2d'); | ||
630 | + var config = { | ||
631 | + type: 'bar', | ||
632 | + data: { | ||
633 | + labels: label_array, | ||
634 | + datasets: [{ | ||
635 | + label: 'Hour', | ||
636 | + data: bardataset, | ||
637 | + backgroundColor: [ | ||
638 | + 'rgba(255, 99, 132, 0.2)','rgba(54, 162, 235, 0.2)','rgba(255, 206, 86, 0.2)','rgba(75, 192, 192, 0.2)','rgba(153, 102, 255, 0.2)','rgba(255, 159, 64, 0.2)', | ||
639 | + 'rgba(255, 99, 132, 0.2)','rgba(54, 162, 235, 0.2)','rgba(255, 206, 86, 0.2)','rgba(75, 192, 192, 0.2)' | ||
640 | + ], | ||
641 | + borderColor: [ | ||
642 | + 'rgba(255,99,132,1)','rgba(54, 162, 235, 1)','rgba(255, 206, 86, 1)','rgba(75, 192, 192, 1)','rgba(153, 102, 255, 1)','rgba(255, 159, 64, 1)', | ||
643 | + 'rgba(255,99,132,1)','rgba(54, 162, 235, 1)','rgba(255, 206, 86, 1)','rgba(75, 192, 192, 1)' | ||
644 | + ], | ||
645 | + borderWidth: 1 | ||
646 | + }] | ||
647 | + }, | ||
648 | + options: { | ||
649 | + scales: { | ||
650 | + yAxes: [{ | ||
651 | + ticks: { | ||
652 | + beginAtZero: true, | ||
653 | + } | ||
654 | + }] | ||
655 | + }, | ||
656 | + responsive: false | ||
657 | + } | ||
658 | + } | ||
659 | + var myChart = new Chart(ctx, config); | ||
660 | + getdayusedapp(label_array[0]); | ||
661 | + }); | ||
662 | + }, 1000) | ||
663 | + }) | ||
664 | +} | ||
665 | + | ||
666 | +// var ctxP = document.getElementById("pieChart").getContext('2d'); | ||
667 | +// var myPieChart = new Chart(ctxP, { | ||
668 | +// type: 'pie', | ||
669 | +// data: { | ||
670 | +// labels: ["Red", "Green", "Yellow", 보라 "Grey", "Dark Grey"], | ||
671 | +// datasets: [{ | ||
672 | +// data: [300, 50, 100, 40, 120], | ||
673 | +// backgroundColor: ["#F7464A", "#46BFBD", "#FDB45C", "#949FB1", "#4D5360"], | ||
674 | +// hoverBackgroundColor: ["#FF5A5E", "#5AD3D1", "#FFC870", "#A8B3C5", "#616774"] | ||
675 | +// }] | ||
676 | +// }, | ||
677 | +// options: { | ||
678 | +// responsive: true | ||
679 | +// } | ||
680 | +// }); | ||
681 | +// db.close(); | ||
682 | + | ||
683 | + | ||
684 | +// var options_main_stacked={ | ||
685 | +// type: 'bar', | ||
686 | +// data: { | ||
687 | +// labels: label_text, | ||
688 | +// datasets:[{ | ||
689 | +// label:label_data1_text, | ||
690 | +// data:label_data1, | ||
691 | +// backgroundColor:'rgba(255, 127, 80, 1)', | ||
692 | +// borderColor:'rgba(255, 127, 80, 1)', | ||
693 | +// type:"line", | ||
694 | +// fill: false | ||
695 | +// }, | ||
696 | +// { | ||
697 | +// label:label_data2_text, | ||
698 | +// data:label_data2, | ||
699 | +// backgroundColor:'rgba(255, 206, 86, 0.2)', | ||
700 | +// }, | ||
701 | +// { | ||
702 | +// label:label_data3_text, | ||
703 | +// data:label_data3, | ||
704 | +// backgroundColor:'rgba(75, 192, 192, 0.2)', | ||
705 | +// }] | ||
706 | +// }, | ||
707 | +// options: options_stacked | ||
708 | +// }; | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
source/forensic_tool/src/menu_media.html
0 → 100644
1 | +<!DOCTYPE html> | ||
2 | +<html lang="en"> | ||
3 | +<head> | ||
4 | + <meta charset="UTF-8"> | ||
5 | + <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||
6 | + <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous"> | ||
7 | + <script src="https://cdn.jsdelivr.net/npm/chart.js@2.8.0"></script> | ||
8 | + <link rel="stylesheet" href="../assets/css/menu_apps.css"> | ||
9 | + <title>Document</title> | ||
10 | +</head> | ||
11 | +<body> | ||
12 | +<div class="container"> | ||
13 | + <header class="menu-header py-4"> | ||
14 | + <div class="row d-flex justify-content-start flex-nowrap align-items-end"> | ||
15 | + <div class="col"> | ||
16 | + <a class="title-name text-dark">Media</a> | ||
17 | + </div> | ||
18 | + <div div class="col-9"> | ||
19 | + <a class="title-detail">미디어 파일 분석</a> | ||
20 | + </div> | ||
21 | + <div div class="col"> | ||
22 | + <a class="title-back" href="menu.html" id="menu-info">나가기</a> | ||
23 | + </div> | ||
24 | + </div> | ||
25 | + </header> | ||
26 | + <div class="nav-scroller nav-color py-1 mb-2"> | ||
27 | + <nav class="nav d-flex justify-content-around"> | ||
28 | + <a class="p-2" href="#" style="color: whitesmoke" onclick="openTap('Media-Strorage-Structure');">Media Strorage Structure</a> | ||
29 | + <a class="p-2" href="#" style="color: whitesmoke" onclick="openTap('Video-Analysis');">Video Analysis</a> | ||
30 | + </nav> | ||
31 | + </div> | ||
32 | + <div class="container"> | ||
33 | + <div id="Media-Strorage-Structure" class="menu"> | ||
34 | + <div class="row"> | ||
35 | + <div class="col"> | ||
36 | + <div class="my-3 p-3 bg-white rounded shadow-sm"> | ||
37 | + <h6 class="border-bottom border-gray pb-2 mb-0">Media file 저장공간</h6> | ||
38 | + <div id="barChartdiv"> | ||
39 | + <canvas id="pieChart"></canvas> | ||
40 | + </div> | ||
41 | + <div id="pie_datalist" class="w-75 pt-4"> | ||
42 | + </div> | ||
43 | + </div> | ||
44 | + </div> | ||
45 | + <div class="col"> | ||
46 | + <div class="my-3 p-3 bg-white rounded shadow-sm"> | ||
47 | + <h6 class="border-bottom border-gray pb-2 mb-0">파일 구조 분석</h6> | ||
48 | + <div class="row justify-content-end"> | ||
49 | + <a id="photo" class="filetype p-2 text-muted" href="#" onclick="getStorageStructure('photo');" style="font-weight: bold;">Image</a> | ||
50 | + <a id="video" class="filetype p-2 text-muted" href="#" onclick="getStorageStructure('video');">Video</a> | ||
51 | + <a id="audio" class="filetype p-2 text-muted" href="#" onclick="getStorageStructure('audio');">Audio</a> | ||
52 | + <a id="documentinfo" class="filetype p-2 text-muted" href="#" onclick="getStorageStructure('documentinfo');">Document</a> | ||
53 | + </div> | ||
54 | + <h8 id="struct_title" class="pt-3 pb-3 pl-1 mb-0 font-italic" style="font-size: 17px;">Image</h8> | ||
55 | + <div id="mediafile_struct"> | ||
56 | + <div> | ||
57 | + | ||
58 | + </div> | ||
59 | + </div> | ||
60 | + </div> | ||
61 | + </div> | ||
62 | + </div> | ||
63 | + <div id="filelist_for_folder" class="row" style="display: none;"> | ||
64 | + <div class="col"> | ||
65 | + <div class="my-3 p-3 bg-white rounded shadow-sm"> | ||
66 | + <h6 id='infilelist' class="border-bottom border-gray pb-2 mb-0 "></h6> | ||
67 | + <table id="filetable" class="table"> | ||
68 | + <tbody> | ||
69 | + | ||
70 | + </tbody> | ||
71 | + </table> | ||
72 | + </div> | ||
73 | + </div> | ||
74 | + </div> | ||
75 | + </div> | ||
76 | + | ||
77 | + <div id="Video-Analysis" class="menu" style="display: none;"> | ||
78 | + <div class="row"> | ||
79 | + <div class="col"> | ||
80 | + <div class="my-3 p-3 bg-white rounded shadow-sm"> | ||
81 | + <h6 class="border-bottom border-gray pb-2 mb-0">Video 선택</h6> | ||
82 | + <div class="check_confirm d-flex justify-content-end p-1"> | ||
83 | + <button id="temp_post" type="button" class="btn btn-sm btn-primary font-nanum">analysis start</button> | ||
84 | + </div> | ||
85 | + <table id="videotable" class="table"> | ||
86 | + <tbody> | ||
87 | + | ||
88 | + </tbody> | ||
89 | + </table> | ||
90 | + </div> | ||
91 | + </div> | ||
92 | + </div> | ||
93 | + </div> | ||
94 | + <div id="Analysis-Detail" class="menu" style="display: none;"> | ||
95 | + <div id ="va_list" class="bg-white rounded shadow-sm"> | ||
96 | + | ||
97 | + </div> | ||
98 | + </div> | ||
99 | + </div> | ||
100 | +</div> | ||
101 | + | ||
102 | + <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script> | ||
103 | + <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> | ||
104 | + <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script> | ||
105 | + <script src="menu_media.js"></script> | ||
106 | + </body> | ||
107 | +</html> | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
source/forensic_tool/src/menu_media.js
0 → 100644
1 | +const { ipcRenderer } = require("electron"); | ||
2 | +const log = require('electron-log') | ||
3 | +const sqlite3 = require('sqlite3').verbose(); | ||
4 | +const offset = new Date().getTimezoneOffset() * 60000; | ||
5 | +var exec = require('child_process').exec, child; | ||
6 | +var mypiechart = null; | ||
7 | + | ||
8 | + | ||
9 | + | ||
10 | + | ||
11 | +function el(selector) { | ||
12 | + return document.getElementById(selector); | ||
13 | +} | ||
14 | +function cl(selector) { | ||
15 | + return document.getElementsByClassName(selector); | ||
16 | +} | ||
17 | + | ||
18 | + | ||
19 | +const videoanalysis = document.getElementById("temp_post"); | ||
20 | + | ||
21 | +videoanalysis.addEventListener("click", ()=>{ | ||
22 | + Promise.all([check()]).then(function(value){ | ||
23 | + ipcRenderer.send( | ||
24 | + "video-analysis", | ||
25 | + value[0] | ||
26 | + ); | ||
27 | + }); | ||
28 | + // check().then(copy).then(result => { | ||
29 | + // ipcRenderer.send( | ||
30 | + // "video-analysis", | ||
31 | + // result | ||
32 | + // ); | ||
33 | + // }) | ||
34 | +}); | ||
35 | + | ||
36 | +var check = function checkboxcheck(){ | ||
37 | + return new Promise(function(resolve, reject){ | ||
38 | + setTimeout(function(){ | ||
39 | + var checkedValue = []; | ||
40 | + var inputElements = document.querySelectorAll('#blankCheckbox'); | ||
41 | + for(var i=0; i < inputElements.length; i++){ | ||
42 | + if(inputElements[i].checked){ | ||
43 | + checkedValue.push(inputElements[i].value); | ||
44 | + log.info(inputElements[i].value); | ||
45 | + } | ||
46 | + } | ||
47 | + resolve(checkedValue); | ||
48 | + }, 1000) | ||
49 | + }) | ||
50 | +} | ||
51 | + | ||
52 | +var copy = function copyfiles(values){ | ||
53 | + return new Promise(function(resolve, reject){ | ||
54 | + setTimeout(function(){ | ||
55 | + values.forEach((value)=>{ | ||
56 | + cmd_pull = exec('adb pull '+value,function(error, stdout, stderr){ | ||
57 | + if(error){ | ||
58 | + console.log(error); | ||
59 | + } | ||
60 | + }); | ||
61 | + }); | ||
62 | + resolve(values); | ||
63 | + }, 1000) | ||
64 | + }) | ||
65 | +} | ||
66 | + | ||
67 | + | ||
68 | +ipcRenderer.on("getvideodetail", (e, arg) => { | ||
69 | + log.info(arg + " from main"); | ||
70 | + Promise.all([popvideoanalysis(arg)]).then(function(value){ | ||
71 | + log.info(value); | ||
72 | + value[0].forEach((pie) => { | ||
73 | + log.info("hello") | ||
74 | + var ctx = document.getElementById(pie[0]).getContext("2d"); | ||
75 | + log.info("hello") | ||
76 | + new Chart(ctx, pie[1]); | ||
77 | + log.info(pie[0] +" dect pie chart create"); | ||
78 | + }) | ||
79 | + }); | ||
80 | +}); | ||
81 | + | ||
82 | +document.addEventListener("DOMContentLoaded", function(){ | ||
83 | + getMediaChart(); | ||
84 | + getStorageStructure('photo'); | ||
85 | + video_list(); | ||
86 | + }); | ||
87 | + | ||
88 | + | ||
89 | +var popvideoanalysis = function popVideoAnalysis(arg){ | ||
90 | + return new Promise(function(resolve, reject){ | ||
91 | + setTimeout( function(){ | ||
92 | + log.info("start popVideoAnalysis"); | ||
93 | + document.querySelector('#va_list').innerHTML = ''; | ||
94 | + var mydectpiechart = []; | ||
95 | + var x = document.getElementsByClassName("menu"); | ||
96 | + for (i = 0; i < x.length; i++) { | ||
97 | + x[i].style.display = "none" | ||
98 | + } | ||
99 | + document.getElementById('Analysis-Detail').style.display = "block"; | ||
100 | + for(var k =0; k < arg[0].length; k++) | ||
101 | + { | ||
102 | + var lb_dict = arg[0][k]; | ||
103 | + var dt_dict = arg[1][k]; | ||
104 | + | ||
105 | + var html_taglist = ``; | ||
106 | + var i,j; | ||
107 | + for(i=0; i < lb_dict['labels'].length; i++){ | ||
108 | + var label_name = lb_dict['labels'][i]; | ||
109 | + html_taglist += `<div class="font-nanum pb-1 pt-1" style="font-size: 14px;"><a style="font-weight: bold;">${label_name}<a><br>`; | ||
110 | + for(j=0; j<lb_dict[label_name].length; j++){ | ||
111 | + var label_detail = lb_dict[label_name][j]; | ||
112 | + html_taglist += `<p style="text-align: right;"><a class="pb-1s">${label_detail[0]}s ~ ${label_detail[1]} for ${label_detail[2].toFixed(2)} confidence</a><p>`; | ||
113 | + } | ||
114 | + html_taglist += '</div>' | ||
115 | + } | ||
116 | + var likelihood_index = {'UNKNOWN': 0,'VERY_UNLIKELY': 1,'UNLIKELY': 2,'POSSIBLE': 3,'LIKELY': 4,'VERY_LIKELY': 5}; | ||
117 | + var det_dataset = [0,0,0,0,0,0] | ||
118 | + | ||
119 | + var html_detlist = ``; | ||
120 | + var i,j; | ||
121 | + for(i=0; i < dt_dict['likelihood'].length; i++){ | ||
122 | + html_detlist += `<div class="font-nanum pb-2 pt-2" style="font-size: 14px; text-align: right;"><a>~ ${dt_dict['likelihood'][i][0]}s , ${dt_dict['likelihood'][i][1]}</a><div>`; | ||
123 | + det_dataset[likelihood_index[dt_dict['likelihood'][i][1]]] +=1; | ||
124 | + } | ||
125 | + | ||
126 | + log.info(det_dataset); | ||
127 | + var html = `<div class="bg-white rounded shadow-sm"> | ||
128 | + <h6 class="border-bottom border-gray pl-2 pb-2 mb-0">${lb_dict['video']}</h6> | ||
129 | + <div class="row"> | ||
130 | + <div class="col"> | ||
131 | + <div class="my-3 p-3 bg-white rounded shadow-sm"> | ||
132 | + <h6 class="border-bottom border-gray pb-2 mb-0">Tag</h6> | ||
133 | + <div id="taglist_${lb_dict['video']}" class="pt-2"> | ||
134 | + ${html_taglist} | ||
135 | + </div> | ||
136 | + </div> | ||
137 | + </div> | ||
138 | + <div class="col"> | ||
139 | + <div class="my-3 p-3 bg-white rounded shadow-sm"> | ||
140 | + <h6 class="border-bottom border-gray pb-2 mb-0">Content Detection</h6> | ||
141 | + <div> | ||
142 | + <canvas id="det_piechart_${lb_dict['video']}"></canvas> | ||
143 | + </div> | ||
144 | + <div id="detectionlist_${lb_dict['video']}" class="pt-2"> | ||
145 | + ${html_detlist} | ||
146 | + </div> | ||
147 | + </div> | ||
148 | + </div> | ||
149 | + </div> | ||
150 | + </div>`; | ||
151 | + document.querySelector('#va_list').innerHTML += html; | ||
152 | + // var ctx = document.getElementById('det_piechart_'+lb_dict['video']).getContext("2d"); | ||
153 | + var config = { | ||
154 | + type: 'pie', | ||
155 | + data: { | ||
156 | + labels: ["UNKNOWN","VERY_UNLIKELY", "UNLIKELY","POSSIBLE", "LIKELY","VERY_LIKELY"], | ||
157 | + datasets: [{ | ||
158 | + data: det_dataset, | ||
159 | + backgroundColor: ["#D3D3D3", "#C0C0C0", "#A9A9A9", "#FF3333","#FF0000","#CC0000"], | ||
160 | + hoverBackgroundColor: ["#D3D3D3", "#C0C0C0", "#A9A9A9", "#FF3333","#FF0000","#CC0000"] | ||
161 | + }] | ||
162 | + }, | ||
163 | + options: { | ||
164 | + responsive: true, | ||
165 | + }, | ||
166 | + } | ||
167 | + mydectpiechart.push(['det_piechart_'+lb_dict['video'],config]); | ||
168 | + // mydectpiechart[k] = new Chart(ctx, config); | ||
169 | + // log.info('det_piechart_'+lb_dict['video'] +" dect pie chart create"); | ||
170 | + } | ||
171 | + resolve(mydectpiechart); | ||
172 | + }, 1000) | ||
173 | + }) | ||
174 | + | ||
175 | +} | ||
176 | + | ||
177 | +function openTap(tabName) { | ||
178 | + var i; | ||
179 | + var x = document.getElementsByClassName("menu"); | ||
180 | + for (i = 0; i < x.length; i++) { | ||
181 | + x[i].style.display = "none" | ||
182 | + } | ||
183 | + document.getElementById(tabName).style.display = "block"; | ||
184 | + } | ||
185 | + | ||
186 | +function getMediaChart(){ | ||
187 | + Promise.all([drawpiechart()]).then(function(value){ | ||
188 | + log.info("getMediaChart finished") | ||
189 | + }); | ||
190 | +} | ||
191 | + | ||
192 | +function getStorageStructure(filetype){ | ||
193 | + document.querySelector('#mediafile_struct > div').innerHTML = ''; | ||
194 | + document.querySelector('#filetable > tbody').innerHTML = ''; | ||
195 | + document.getElementById('filelist_for_folder').style.display = "none"; | ||
196 | + log.info("getStorageStructure start") | ||
197 | + Promise.all([file_struct(filetype)]).then(function(value){ | ||
198 | + value[0].forEach((row) => { | ||
199 | + getByte(row.dirsize).then(function(bytedata) { | ||
200 | + document.querySelector('#mediafile_struct > div').innerHTML += `<div class="d-flex justify-content-between p-1"><a href="#" clase="folder_name" onclick="getFilelistinFolder('${row.dir}','${filetype}');" id="${row.dir}">${row.dir} </a><a></a>${bytedata}<br></div>` | ||
201 | + }); | ||
202 | + }); | ||
203 | + }); | ||
204 | + var i; | ||
205 | + var x = document.getElementsByClassName("filetype"); | ||
206 | + for (i = 0; i < x.length; i++) { | ||
207 | + x[i].style.fontWeight = "normal"; | ||
208 | + } | ||
209 | + document.getElementById(filetype).style.fontWeight = "bold"; | ||
210 | + switch(filetype){ | ||
211 | + case 'photo': | ||
212 | + document.getElementById('struct_title').innerText = "Image"; | ||
213 | + break; | ||
214 | + case 'video': | ||
215 | + document.getElementById('struct_title').innerText = "Video"; | ||
216 | + break; | ||
217 | + case 'audio': | ||
218 | + document.getElementById('struct_title').innerText = "Audio"; | ||
219 | + break; | ||
220 | + case 'documentinfo': | ||
221 | + document.getElementById('struct_title').innerText = "Document"; | ||
222 | + break; | ||
223 | + } | ||
224 | +} | ||
225 | + | ||
226 | +function getFilelistinFolder(foldername,filetype){ | ||
227 | + log.info("getFilelistinFolder start") | ||
228 | + document.querySelector('#filetable > tbody').innerHTML = `<tr><th>name</th>\ | ||
229 | + <th>date_added</th>\ | ||
230 | + <th>size</th>\ | ||
231 | + </tr>`; | ||
232 | + | ||
233 | + Promise.all([fileinfolder(foldername, filetype)]).then(function(value){ | ||
234 | + value[0].forEach((row) => { | ||
235 | + getByte(row.size).then(function(bytedata) { | ||
236 | + document.querySelector('#filetable > tbody').innerHTML += `<tr><td>${row.name}</td><td>${new Date(row.date_added*1000-offset).toISOString().replace(/T/, ' ').replace(/\..+/, '')}</td><td>${bytedata}</td></tr>` | ||
237 | + }); | ||
238 | + }); | ||
239 | + }); | ||
240 | + document.getElementById('filelist_for_folder').style.display = "block"; | ||
241 | +} | ||
242 | + | ||
243 | +var drawpiechart = function drawPieChart(){ | ||
244 | + return new Promise(function(resolve, reject){ | ||
245 | + setTimeout( function(){ | ||
246 | + var html = '' | ||
247 | + Promise.all([filetype_all_size('photo'),filetype_all_size('video'),filetype_all_size('audio'),filetype_all_size('documentinfo')]).then(function(value){ | ||
248 | + var ctx = document.getElementById("pieChart").getContext('2d'); | ||
249 | + var config = { | ||
250 | + type: 'pie', | ||
251 | + data: { | ||
252 | + labels: ["Image", "Video", "Audio", "Documents"], | ||
253 | + datasets: [{ | ||
254 | + data: [value[0], value[1], value[2], value[3]], | ||
255 | + backgroundColor: ["#F7464A", "#46BFBD", "#FDB45C", "#949FB1"], | ||
256 | + hoverBackgroundColor: ["#FF5A5E", "#5AD3D1", "#FFC870", "#A8B3C5"] | ||
257 | + }] | ||
258 | + }, | ||
259 | + options: { | ||
260 | + responsive: true | ||
261 | + } | ||
262 | + } | ||
263 | + if (mypiechart == null) { | ||
264 | + mypiechart = new Chart(ctx, config); | ||
265 | + log.info("pie chart create") | ||
266 | + } else { | ||
267 | + mypiechart.config = config; | ||
268 | + mypiechart.update(); | ||
269 | + log.info("pie chart update") | ||
270 | + } | ||
271 | + Promise.all([getByte(value[0]),getByte(value[1]),getByte(value[2]),getByte(value[3])]).then(function(b){ | ||
272 | + var html = `<div class="d-flex justify-content-between pt-1 pb-1"><a style="font-weight: bold;">Image </a><a>${b[0]}</a></div> | ||
273 | + <div class="d-flex justify-content-between pt-1 pb-1"><a style="font-weight: bold;">Video </a><a>${b[1]}</a></div> | ||
274 | + <div class="d-flex justify-content-between pt-1 pb-1"><a style="font-weight: bold;">Audio </a><a>${b[2]}</a></div> | ||
275 | + <div class="d-flex justify-content-between pt-1 pb-1"><a style="font-weight: bold;">Document </a><a>${b[3]}</a></div>` | ||
276 | + document.querySelector('#pie_datalist').innerHTML = html; | ||
277 | + }); | ||
278 | + }); | ||
279 | + resolve(true); | ||
280 | + }, 1000) | ||
281 | + }) | ||
282 | + } | ||
283 | + | ||
284 | +var getByte = function getB(byte){ | ||
285 | + return new Promise(function(resolve, reject){ | ||
286 | + setTimeout( function(){ | ||
287 | + if(byte > 1073741824){ | ||
288 | + resolve((byte/1073741824).toFixed(2) + "GB"); | ||
289 | + } | ||
290 | + else if(byte > 1048576){ | ||
291 | + resolve((byte/1048576).toFixed(2) + "MB"); | ||
292 | + } | ||
293 | + else if(byte > 1024){ | ||
294 | + resolve((byte/1024).toFixed(2) + "KB"); | ||
295 | + } | ||
296 | + }, 1000) | ||
297 | + }) | ||
298 | +} | ||
299 | + | ||
300 | +var filetype_all_size = function getAllAudioSize(filetype){ | ||
301 | + return new Promise(function(resolve, reject){ | ||
302 | + setTimeout( function(){ | ||
303 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
304 | + let sql = `select SUM(size) as totalsize from ${filetype};` | ||
305 | + log.info("filetype_all_size Query start"); | ||
306 | + db.get(sql, [], (err, row) => { | ||
307 | + if (err) { | ||
308 | + log.err(err); | ||
309 | + reject(err); | ||
310 | + throw err; | ||
311 | + } | ||
312 | + else{ | ||
313 | + log.info("filetype_all_size Query succesfully executed"); | ||
314 | + db.close(); | ||
315 | + resolve(row.totalsize); | ||
316 | + } | ||
317 | + }); | ||
318 | + }, 1000) | ||
319 | + }) | ||
320 | +} | ||
321 | + | ||
322 | +var file_struct = function getStruct(filetype){ | ||
323 | + return new Promise(function(resolve, reject){ | ||
324 | + setTimeout( function(){ | ||
325 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
326 | + let sql = `select replace(SUBSTR(rtrim(path, replace(path, '/', '')),1,LENGTH(rtrim(path, replace(path, '/', '')))-1), rtrim(SUBSTR(rtrim(path, replace(path, '/', '')),1,LENGTH(rtrim(path, replace(path, '/', '')))-1), replace(SUBSTR(rtrim(path, replace(path, '/', '')),1,LENGTH(rtrim(path, replace(path, '/', '')))-1), '/', '')), '') as dir, sum(size) as dirsize | ||
327 | + from ${filetype} | ||
328 | + group by dir;` | ||
329 | + log.info("file_struct Query start"); | ||
330 | + db.all(sql, [], (err, rows) => { | ||
331 | + if (err) { | ||
332 | + log.err(err); | ||
333 | + reject(err); | ||
334 | + throw err; | ||
335 | + } | ||
336 | + else{ | ||
337 | + log.info("file_struct Query succesfully executed"); | ||
338 | + db.close(); | ||
339 | + resolve(rows); | ||
340 | + } | ||
341 | + }); | ||
342 | + }, 1000) | ||
343 | + }) | ||
344 | +} | ||
345 | + | ||
346 | +var fileinfolder = function getFileinFolder(foldername,filetype){ | ||
347 | + return new Promise(function(resolve, reject){ | ||
348 | + setTimeout( function(){ | ||
349 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
350 | + let sql = ''; | ||
351 | + switch(filetype){ | ||
352 | + case 'photo': | ||
353 | + sql += `select display_name as name, date_added, path, size from ${filetype} | ||
354 | + where path LIKE '%${foldername}%';` | ||
355 | + document.querySelector('#infilelist').innerText = `Images in ${foldername}`; | ||
356 | + break; | ||
357 | + case 'video': | ||
358 | + sql += `select display_name as name, date_added, path, size from ${filetype} | ||
359 | + where path LIKE '%${foldername}%';` | ||
360 | + document.querySelector('#infilelist').innerText = `Videos in ${foldername}`; | ||
361 | + break; | ||
362 | + case 'audio': | ||
363 | + sql += `select title as name, date_added, path, size from ${filetype} | ||
364 | + where path LIKE '%${foldername}%';` | ||
365 | + document.querySelector('#infilelist').innerText = `Audios in ${foldername}`; | ||
366 | + break; | ||
367 | + case 'documentinfo': | ||
368 | + sql += `select name, date_added, path, size from ${filetype} | ||
369 | + where path LIKE '%${foldername}%';` | ||
370 | + document.querySelector('#infilelist').innerText = `Documents in ${foldername}`; | ||
371 | + break; | ||
372 | + } | ||
373 | + log.info("fileinfolder Query start"); | ||
374 | + db.all(sql, [], (err, rows) => { | ||
375 | + if (err) { | ||
376 | + log.err(err); | ||
377 | + reject(err); | ||
378 | + throw err; | ||
379 | + } | ||
380 | + else{ | ||
381 | + log.info("fileinfolder Query succesfully executed"); | ||
382 | + db.close(); | ||
383 | + resolve(rows); | ||
384 | + } | ||
385 | + }); | ||
386 | + }, 1000) | ||
387 | + }) | ||
388 | +} | ||
389 | + | ||
390 | +var video_list = function getVideolist(filetype){ | ||
391 | + return new Promise(function(resolve, reject){ | ||
392 | + setTimeout( function(){ | ||
393 | + document.querySelector('#videotable > tbody').innerHTML = `<tr><th></th> | ||
394 | + <th>name</th>\ | ||
395 | + <th>date_added</th>\ | ||
396 | + <th>resolution</th>\ | ||
397 | + <th>size</th>\ | ||
398 | + </tr>`; | ||
399 | + const db = new sqlite3.Database('InnerDatabase.db'); | ||
400 | + let sql = `select display_name as name, date_added, path, resolution, size | ||
401 | + from video;` | ||
402 | + log.info("video_list Query start"); | ||
403 | + db.all(sql, [], (err, rows) => { | ||
404 | + if (err) { | ||
405 | + log.err(err); | ||
406 | + reject(err); | ||
407 | + throw err; | ||
408 | + } | ||
409 | + else{ | ||
410 | + log.info("video_list Query succesfully executed"); | ||
411 | + rows.forEach((row) => { | ||
412 | + getByte(row.size).then(function(bytedata) { | ||
413 | + document.querySelector('#videotable > tbody').innerHTML += `<tr><td><div class="form-check"> | ||
414 | + <input class="form-check-input position-static" type="checkbox" id="blankCheckbox" value="${row.path}"> | ||
415 | + </div></td> | ||
416 | + <td>${row.name}</td><td>${new Date(row.date_added*1000-offset).toISOString().replace(/T/, ' ').replace(/\..+/, '')}</td><td>${row.resolution}</td><td>${bytedata}</td></tr>` | ||
417 | + }); | ||
418 | + }); | ||
419 | + db.close(); | ||
420 | + resolve(true); | ||
421 | + } | ||
422 | + }); | ||
423 | + }, 1000) | ||
424 | + }) | ||
425 | +} | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
source/forensic_tool/test.js
0 → 100644
1 | +// Imports the Google Cloud Video Intelligence library + Node's fs library | ||
2 | +const video = require('@google-cloud/video-intelligence').v1; | ||
3 | +const fs = require('fs'); | ||
4 | +const util = require('util'); | ||
5 | +async function getinfo(){ | ||
6 | + console.log('before client'); | ||
7 | + // Creates a client | ||
8 | + const client = new video.VideoIntelligenceServiceClient(); | ||
9 | + console.log('after client'); | ||
10 | + | ||
11 | + /** | ||
12 | + * TODO(developer): Uncomment the following line before running the sample. | ||
13 | + */ | ||
14 | + const path = 'C:/Users/yunyoung/Desktop/temp/2016104137/source/forensic_tool/20190525_113617.mp4'; | ||
15 | + | ||
16 | + // Reads a local video file and converts it to base64 | ||
17 | + const readFile = util.promisify(fs.readFile); | ||
18 | + const file = await readFile(path); | ||
19 | + const inputContent = file.toString('base64'); | ||
20 | + | ||
21 | + // Constructs request | ||
22 | + const request = { | ||
23 | + inputContent: inputContent, | ||
24 | + features: ['LABEL_DETECTION'], | ||
25 | + }; | ||
26 | + | ||
27 | + // Detects labels in a video | ||
28 | + const [operation] = await client.annotateVideo(request); | ||
29 | + console.log('Waiting for operation to complete...'); | ||
30 | + const [operationResult] = await operation.promise(); | ||
31 | + // Gets annotations for video | ||
32 | + const annotations = operationResult.annotationResults[0]; | ||
33 | + | ||
34 | + const labels = annotations.segmentLabelAnnotations; | ||
35 | + labels.forEach(label => { | ||
36 | + console.log(`Label ${label.entity.description} occurs at:`); | ||
37 | + label.segments.forEach(segment => { | ||
38 | + const time = segment.segment; | ||
39 | + if (time.startTimeOffset.seconds === undefined) { | ||
40 | + time.startTimeOffset.seconds = 0; | ||
41 | + } | ||
42 | + if (time.startTimeOffset.nanos === undefined) { | ||
43 | + time.startTimeOffset.nanos = 0; | ||
44 | + } | ||
45 | + if (time.endTimeOffset.seconds === undefined) { | ||
46 | + time.endTimeOffset.seconds = 0; | ||
47 | + } | ||
48 | + if (time.endTimeOffset.nanos === undefined) { | ||
49 | + time.endTimeOffset.nanos = 0; | ||
50 | + } | ||
51 | + console.log( | ||
52 | + `\tStart: ${time.startTimeOffset.seconds}` + | ||
53 | + `.${(time.startTimeOffset.nanos / 1e6).toFixed(0)}s` | ||
54 | + ); | ||
55 | + console.log( | ||
56 | + `\tEnd: ${time.endTimeOffset.seconds}.` + | ||
57 | + `${(time.endTimeOffset.nanos / 1e6).toFixed(0)}s` | ||
58 | + ); | ||
59 | + console.log(`\tConfidence: ${segment.confidence}`); | ||
60 | + }); | ||
61 | + }); | ||
62 | +} | ||
63 | +//getinfo(); | ||
64 | +//get_videosaftey(); | ||
65 | +async function get_videosaftey(){ | ||
66 | + // Imports the Google Cloud Video Intelligence library | ||
67 | + const video = require('@google-cloud/video-intelligence').v1; | ||
68 | + console.log('before client'); | ||
69 | + // Creates a client | ||
70 | + const client = new video.VideoIntelligenceServiceClient(); | ||
71 | + console.log('after client'); | ||
72 | + | ||
73 | + /** | ||
74 | + * TODO(developer): Uncomment the following line before running the sample. | ||
75 | + */ | ||
76 | + // const gcsUri = 'GCS URI of video to analyze, e.g. gs://my-bucket/my-video.mp4'; | ||
77 | + const path = 'C:/Users/yunyoung/Videos/20190525_113617.mp4'; | ||
78 | + | ||
79 | + // Reads a local video file and converts it to base64 | ||
80 | + const readFile = util.promisify(fs.readFile); | ||
81 | + const file = await readFile(path); | ||
82 | + const inputContent = file.toString('base64'); | ||
83 | + | ||
84 | + const request = { | ||
85 | + inputContent: inputContent, | ||
86 | + features: ['EXPLICIT_CONTENT_DETECTION'], | ||
87 | + }; | ||
88 | + | ||
89 | + // Human-readable likelihoods | ||
90 | + const likelihoods = [ | ||
91 | + 'UNKNOWN', | ||
92 | + 'VERY_UNLIKELY', | ||
93 | + 'UNLIKELY', | ||
94 | + 'POSSIBLE', | ||
95 | + 'LIKELY', | ||
96 | + 'VERY_LIKELY', | ||
97 | + ]; | ||
98 | + | ||
99 | + // Detects unsafe content | ||
100 | + const [opertaion] = await client.annotateVideo(request); | ||
101 | + console.log('Waiting for operation to complete...'); | ||
102 | + const [operationResult] = await opertaion.promise(); | ||
103 | + // Gets unsafe content | ||
104 | + const explicitContentResults = | ||
105 | + operationResult.annotationResults[0].explicitAnnotation; | ||
106 | + console.log('Explicit annotation results:'); | ||
107 | + explicitContentResults.frames.forEach(result => { | ||
108 | + if (result.timeOffset === undefined) { | ||
109 | + result.timeOffset = {}; | ||
110 | + } | ||
111 | + if (result.timeOffset.seconds === undefined) { | ||
112 | + result.timeOffset.seconds = 0; | ||
113 | + } | ||
114 | + if (result.timeOffset.nanos === undefined) { | ||
115 | + result.timeOffset.nanos = 0; | ||
116 | + } | ||
117 | + console.log( | ||
118 | + `\tTime: ${result.timeOffset.seconds}` + | ||
119 | + `.${(result.timeOffset.nanos / 1e6).toFixed(0)}s` | ||
120 | + ); | ||
121 | + console.log( | ||
122 | + `\t\tPornography likelihood: ${likelihoods[result.pornographyLikelihood]}` | ||
123 | + ); | ||
124 | + }); | ||
125 | +} | ||
126 | + | ||
127 | +// var ss = `C:\\Users\\yunyoung\\Desktop\\temp\\2016104137\\source\\forensic_tool\\20190215_152731.mp4` | ||
128 | +// var h = ss.split('\\'); | ||
129 | +// var c = ''; | ||
130 | +// for(var i = 0; i < h.length; i++){ | ||
131 | +// c += h[i] + '/'; | ||
132 | +// } | ||
133 | +// console.log(c); | ||
134 | +// const l = c.slice(0,-1); | ||
135 | +// console.log(l); | ||
136 | +// console.log(ss); | ||
137 | +// var hell = ss.replace('/\\/g','/'); | ||
138 | +// console.log(hell); | ||
139 | + | ||
140 | +const labels = [['landmark',[['0.0','17.17'],['0.0','17.17'],['0.0','17.17']]],['tourist destination',[['0.0','17.17'],['0.0','17.17'],['0.0','17.17']]],['tourism',[['0.0','17.17'],['0.0','17.17'],['0.0','17.17']]],['historic site',[['0.0','17.17'],['0.0','17.17'],['0.0','17.17']]],['building',[['0.0','17.17'],['0.0','17.17'],['0.0','17.17']]]]; | ||
141 | +console.log(labels); | ||
142 | +var content = {video : '2020',labels : []} | ||
143 | +labels.forEach(label => { | ||
144 | + content['labels'].push(label[0]); | ||
145 | + content[label[0]] = []; | ||
146 | + label[1].forEach(segment => { | ||
147 | + var temp = [segment[0],segment[1]]; | ||
148 | + content[label[0]].push(temp); | ||
149 | + }); | ||
150 | +}); | ||
151 | + | ||
152 | +console.log(content); | ||
153 | +var array = content['labels']; | ||
154 | + | ||
155 | +array.forEach(label =>{ | ||
156 | + for(var i = 0; i < content[label].length; i++){ | ||
157 | + console.log(content[label][i]); | ||
158 | + } | ||
159 | +}); | ||
160 | + | ||
161 | +var likelihood_index = {'UNKNOWN': 0,'VERY_UNLIKELY': 1,'UNLIKELY': 2,'POSSIBLE': 3,'LIKELY': 4,'VERY_LIKELY': 5}; | ||
162 | + var det_dataset = [0,0,0,0,0,0] | ||
163 | + | ||
164 | + det_dataset[likelihood_index[dt_dict['likelihood'][i][1]]] +=1; | ||
165 | + | ||
166 | +var ctx = document.getElementById('det_piechart_'+lb_dict['video']); | ||
167 | + var config = { | ||
168 | + type: 'pie', | ||
169 | + data: { | ||
170 | + labels: ["UNKNOWN", "VERY_UNLIKELY", "UNLIKELY", "POSSIBLE","LIKELY",'VERY_LIKELY'], | ||
171 | + datasets: [{ | ||
172 | + data: det_dataset, | ||
173 | + backgroundColor: ["#F7464A", "#46BFBD", "#FDB45C", "#949FB1"], | ||
174 | + hoverBackgroundColor: ["#FF5A5E", "#5AD3D1", "#FFC870", "#A8B3C5"] | ||
175 | + }] | ||
176 | + }, | ||
177 | + options: { | ||
178 | + responsive: true | ||
179 | + } | ||
180 | + } | ||
... | \ No newline at end of file | ... | \ No newline at end of file |
-
Please register or login to post a comment