2017-05-19 04:15:33 +01:00
//
2017-04-20 06:56:49 +01:00
// Author:
// Natalia Portillo claunia@claunia.com
//
// Copyright (c) 2017, © Claunia.com
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in
// the documentation and/or other materials provided with the distribution.
// * Neither the name of the [ORGANIZATION] nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
2017-12-30 00:32:21 +00:00
2017-04-20 06:56:49 +01:00
using System ;
using System.Collections.Generic ;
using System.Data ;
2017-04-23 06:09:57 +01:00
using System.IO ;
2017-04-20 06:56:49 +01:00
2018-02-23 02:14:58 +00:00
namespace apprepodbmgr.Core
2017-04-20 06:56:49 +01:00
{
2017-12-30 00:32:21 +00:00
public struct DbEntry
2017-04-20 06:56:49 +01:00
{
2017-12-30 00:32:21 +00:00
public long Id ;
public string Developer ;
public string Product ;
public string Version ;
public string Languages ;
public string Architecture ;
2018-03-15 15:55:59 +00:00
public string TargetOs ;
2017-12-30 00:32:21 +00:00
public string Format ;
public string Description ;
public bool Oem ;
public bool Upgrade ;
public bool Update ;
public bool Source ;
public bool Files ;
2018-03-15 15:55:59 +00:00
public bool Installer ;
2017-12-30 00:32:21 +00:00
public byte [ ] Xml ;
public byte [ ] Json ;
public string Mdid ;
2018-03-15 15:55:59 +00:00
public byte [ ] Icon ;
2017-04-20 06:56:49 +01:00
}
2017-12-30 00:32:21 +00:00
public class DbFile
2017-05-17 05:12:57 +01:00
{
2017-12-30 00:32:21 +00:00
public ulong Id { get ; set ; }
public string Sha256 { get ; set ; }
public bool Crack { get ; set ; }
public bool? HasVirus { get ; set ; }
public DateTime ? ClamTime { get ; set ; }
2017-05-18 16:30:09 +01:00
public DateTime ? VirusTotalTime { get ; set ; }
2017-12-30 00:32:21 +00:00
public string Virus { get ; set ; }
public long Length { get ; set ; }
2017-05-17 05:12:57 +01:00
}
2018-02-23 03:33:22 +00:00
public struct DbAppFile
2017-04-23 06:09:57 +01:00
{
2017-12-30 00:32:21 +00:00
public ulong Id ;
public string Path ;
public string Sha256 ;
public long Length ;
public DateTime CreationTimeUtc ;
public DateTime LastAccessTimeUtc ;
public DateTime LastWriteTimeUtc ;
2017-04-23 06:09:57 +01:00
public FileAttributes Attributes ;
2017-12-30 00:32:21 +00:00
public bool Crack ;
2017-04-23 06:09:57 +01:00
}
2017-12-30 00:32:21 +00:00
public struct DbFolder
2017-05-12 02:06:16 +01:00
{
2017-12-30 00:32:21 +00:00
public ulong Id ;
public string Path ;
public DateTime CreationTimeUtc ;
public DateTime LastAccessTimeUtc ;
public DateTime LastWriteTimeUtc ;
2017-05-12 02:06:16 +01:00
public FileAttributes Attributes ;
}
2017-12-30 00:32:21 +00:00
public class DbOps
2017-04-20 06:56:49 +01:00
{
readonly IDbConnection dbCon ;
2017-12-30 00:32:21 +00:00
readonly DbCore dbCore ;
2017-04-20 06:56:49 +01:00
2017-12-30 00:32:21 +00:00
public DbOps ( IDbConnection connection , DbCore core )
2017-04-20 06:56:49 +01:00
{
2017-12-30 00:32:21 +00:00
dbCon = connection ;
2017-04-20 06:56:49 +01:00
dbCore = core ;
}
2018-02-23 03:33:22 +00:00
public bool GetAllApps ( out List < DbEntry > entries )
2017-04-20 06:56:49 +01:00
{
2017-12-30 00:32:21 +00:00
entries = new List < DbEntry > ( ) ;
2017-04-20 06:56:49 +01:00
2018-02-23 03:33:22 +00:00
const string SQL = "SELECT * from apps" ;
2017-04-20 06:56:49 +01:00
2017-12-30 00:32:21 +00:00
IDbCommand dbcmd = dbCon . CreateCommand ( ) ;
2017-04-20 06:56:49 +01:00
IDbDataAdapter dataAdapter = dbCore . GetNewDataAdapter ( ) ;
2018-03-15 15:55:59 +00:00
dbcmd . CommandText = SQL ;
2020-08-22 21:37:02 +01:00
var dataSet = new DataSet ( ) ;
2018-03-15 15:55:59 +00:00
dataAdapter . SelectCommand = dbcmd ;
2017-04-20 06:56:49 +01:00
dataAdapter . Fill ( dataSet ) ;
DataTable dataTable = dataSet . Tables [ 0 ] ;
foreach ( DataRow dRow in dataTable . Rows )
{
2020-08-22 21:37:02 +01:00
var fEntry = new DbEntry
2017-12-30 00:32:21 +00:00
{
Id = long . Parse ( dRow [ "id" ] . ToString ( ) ) ,
Developer = dRow [ "developer" ] . ToString ( ) ,
Product = dRow [ "product" ] . ToString ( ) ,
Version = dRow [ "version" ] . ToString ( ) ,
Languages = dRow [ "languages" ] . ToString ( ) ,
Architecture = dRow [ "architecture" ] . ToString ( ) ,
2018-03-15 15:55:59 +00:00
TargetOs = dRow [ "targetos" ] . ToString ( ) ,
2017-12-30 00:32:21 +00:00
Format = dRow [ "format" ] . ToString ( ) ,
Description = dRow [ "description" ] . ToString ( ) ,
Oem = bool . Parse ( dRow [ "oem" ] . ToString ( ) ) ,
Upgrade = bool . Parse ( dRow [ "upgrade" ] . ToString ( ) ) ,
Update = bool . Parse ( dRow [ "update" ] . ToString ( ) ) ,
Source = bool . Parse ( dRow [ "source" ] . ToString ( ) ) ,
Files = bool . Parse ( dRow [ "files" ] . ToString ( ) ) ,
2018-03-15 15:55:59 +00:00
Installer = bool . Parse ( dRow [ "installer" ] . ToString ( ) ) ,
2017-12-30 00:32:21 +00:00
Mdid = dRow [ "mdid" ] . ToString ( )
} ;
2020-08-22 21:37:02 +01:00
if ( dRow [ "xml" ] ! = DBNull . Value )
fEntry . Xml = ( byte [ ] ) dRow [ "xml" ] ;
if ( dRow [ "json" ] ! = DBNull . Value )
fEntry . Json = ( byte [ ] ) dRow [ "json" ] ;
if ( dRow [ "icon" ] ! = DBNull . Value )
fEntry . Icon = ( byte [ ] ) dRow [ "icon" ] ;
2017-04-20 06:56:49 +01:00
entries . Add ( fEntry ) ;
}
return true ;
}
2018-02-23 03:33:22 +00:00
IDbCommand GetAppCommand ( DbEntry entry )
2017-04-20 06:56:49 +01:00
{
IDbCommand dbcmd = dbCon . CreateCommand ( ) ;
2017-12-30 00:32:21 +00:00
IDbDataParameter param1 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param2 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param3 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param4 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param5 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param6 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param7 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param8 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param9 = dbcmd . CreateParameter ( ) ;
2017-04-20 06:56:49 +01:00
IDbDataParameter param10 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param11 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param12 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param13 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param14 = dbcmd . CreateParameter ( ) ;
2017-04-29 07:04:03 +01:00
IDbDataParameter param15 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param16 = dbcmd . CreateParameter ( ) ;
2017-05-11 04:36:45 +01:00
IDbDataParameter param17 = dbcmd . CreateParameter ( ) ;
2018-03-15 15:55:59 +00:00
IDbDataParameter param18 = dbcmd . CreateParameter ( ) ;
2017-04-20 06:56:49 +01:00
2017-12-30 00:32:21 +00:00
param1 . ParameterName = "@developer" ;
param2 . ParameterName = "@product" ;
param3 . ParameterName = "@version" ;
param4 . ParameterName = "@languages" ;
param5 . ParameterName = "@architecture" ;
2018-03-15 15:55:59 +00:00
param6 . ParameterName = "@targetos" ;
2017-12-30 00:32:21 +00:00
param7 . ParameterName = "@format" ;
param8 . ParameterName = "@description" ;
param9 . ParameterName = "@oem" ;
2017-04-20 06:56:49 +01:00
param10 . ParameterName = "@upgrade" ;
param11 . ParameterName = "@update" ;
param12 . ParameterName = "@source" ;
param13 . ParameterName = "@files" ;
2018-03-15 15:55:59 +00:00
param14 . ParameterName = "@installer" ;
2017-04-29 07:04:03 +01:00
param15 . ParameterName = "@xml" ;
param16 . ParameterName = "@json" ;
2017-05-11 04:36:45 +01:00
param17 . ParameterName = "@mdid" ;
2018-03-15 15:55:59 +00:00
param18 . ParameterName = "@icon" ;
2017-04-20 06:56:49 +01:00
2017-12-30 00:32:21 +00:00
param1 . DbType = DbType . String ;
param2 . DbType = DbType . String ;
param3 . DbType = DbType . String ;
param4 . DbType = DbType . String ;
param5 . DbType = DbType . String ;
param7 . DbType = DbType . String ;
param8 . DbType = DbType . String ;
param9 . DbType = DbType . Boolean ;
2017-04-20 06:56:49 +01:00
param10 . DbType = DbType . Boolean ;
param11 . DbType = DbType . Boolean ;
param12 . DbType = DbType . Boolean ;
param13 . DbType = DbType . Boolean ;
param14 . DbType = DbType . Boolean ;
2017-04-29 07:04:03 +01:00
param15 . DbType = DbType . Object ;
param16 . DbType = DbType . Object ;
2017-05-11 04:36:45 +01:00
param17 . DbType = DbType . String ;
2018-03-15 15:55:59 +00:00
param18 . DbType = DbType . Object ;
2017-04-20 06:56:49 +01:00
2017-12-30 00:32:21 +00:00
param1 . Value = entry . Developer ;
param2 . Value = entry . Product ;
param3 . Value = entry . Version ;
param4 . Value = entry . Languages ;
param5 . Value = entry . Architecture ;
2018-03-15 15:55:59 +00:00
param6 . Value = entry . TargetOs ;
2017-12-30 00:32:21 +00:00
param7 . Value = entry . Format ;
param8 . Value = entry . Description ;
param9 . Value = entry . Oem ;
param10 . Value = entry . Upgrade ;
param11 . Value = entry . Update ;
param12 . Value = entry . Source ;
param13 . Value = entry . Files ;
2018-03-15 15:55:59 +00:00
param14 . Value = entry . Installer ;
2017-12-30 00:32:21 +00:00
param15 . Value = entry . Xml ;
param16 . Value = entry . Json ;
param17 . Value = entry . Mdid ;
2018-03-15 15:55:59 +00:00
param18 . Value = entry . Icon ;
2017-04-20 06:56:49 +01:00
dbcmd . Parameters . Add ( param1 ) ;
dbcmd . Parameters . Add ( param2 ) ;
dbcmd . Parameters . Add ( param3 ) ;
dbcmd . Parameters . Add ( param4 ) ;
dbcmd . Parameters . Add ( param5 ) ;
dbcmd . Parameters . Add ( param6 ) ;
dbcmd . Parameters . Add ( param7 ) ;
dbcmd . Parameters . Add ( param8 ) ;
dbcmd . Parameters . Add ( param9 ) ;
dbcmd . Parameters . Add ( param10 ) ;
dbcmd . Parameters . Add ( param11 ) ;
dbcmd . Parameters . Add ( param12 ) ;
dbcmd . Parameters . Add ( param13 ) ;
dbcmd . Parameters . Add ( param14 ) ;
2017-04-29 07:04:03 +01:00
dbcmd . Parameters . Add ( param15 ) ;
dbcmd . Parameters . Add ( param16 ) ;
2017-05-11 04:36:45 +01:00
dbcmd . Parameters . Add ( param17 ) ;
2018-03-15 15:55:59 +00:00
dbcmd . Parameters . Add ( param18 ) ;
2017-04-20 06:56:49 +01:00
return dbcmd ;
}
2018-02-23 03:33:22 +00:00
public bool AddApp ( DbEntry entry , out long id )
2017-04-20 06:56:49 +01:00
{
2018-02-23 03:33:22 +00:00
IDbCommand dbcmd = GetAppCommand ( entry ) ;
2017-04-20 06:56:49 +01:00
IDbTransaction trans = dbCon . BeginTransaction ( ) ;
2018-03-15 15:55:59 +00:00
dbcmd . Transaction = trans ;
2017-04-20 06:56:49 +01:00
2017-12-30 00:32:21 +00:00
const string SQL =
2018-03-15 15:55:59 +00:00
"INSERT INTO apps (developer, product, version, languages, architecture, targetos, format, description, oem, upgrade, `update`, source, files, installer, xml, json, mdid, icon)" +
" VALUES (@developer, @product, @version, @languages, @architecture, @targetos, @format, @description, @oem, @upgrade, @update, @source, @files, @installer, @xml, @json, @mdid, @icon)" ;
2017-04-20 06:56:49 +01:00
2017-12-30 00:32:21 +00:00
dbcmd . CommandText = SQL ;
2017-04-20 06:56:49 +01:00
dbcmd . ExecuteNonQuery ( ) ;
trans . Commit ( ) ;
dbcmd . Dispose ( ) ;
2017-04-23 06:09:57 +01:00
id = dbCore . LastInsertRowId ;
2017-04-20 06:56:49 +01:00
return true ;
}
2017-12-30 00:32:21 +00:00
IDbCommand GetFileCommand ( DbFile entry )
2017-04-20 06:56:49 +01:00
{
IDbCommand dbcmd = dbCon . CreateCommand ( ) ;
IDbDataParameter param1 = dbcmd . CreateParameter ( ) ;
2017-05-17 05:12:57 +01:00
IDbDataParameter param2 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param3 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param4 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param5 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param6 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param7 = dbcmd . CreateParameter ( ) ;
2017-04-20 06:56:49 +01:00
2017-05-17 05:12:57 +01:00
param1 . ParameterName = "@sha256" ;
param2 . ParameterName = "@crack" ;
2017-05-19 18:08:27 +01:00
param3 . ParameterName = "@hasvirus" ;
2017-05-17 05:12:57 +01:00
param4 . ParameterName = "@clamtime" ;
param5 . ParameterName = "@vtotaltime" ;
param6 . ParameterName = "@virus" ;
param7 . ParameterName = "@length" ;
2017-04-20 06:56:49 +01:00
param1 . DbType = DbType . String ;
2017-05-17 05:12:57 +01:00
param2 . DbType = DbType . Boolean ;
param3 . DbType = DbType . String ;
param4 . DbType = DbType . String ;
param5 . DbType = DbType . String ;
param7 . DbType = DbType . UInt64 ;
param1 . Value = entry . Sha256 ;
param2 . Value = entry . Crack ;
2017-05-18 16:30:09 +01:00
param3 . Value = entry . HasVirus ;
2017-12-30 00:32:21 +00:00
param4 . Value = entry . ClamTime ? . ToString ( "yyyy-MM-dd HH:mm" ) ;
param5 . Value = entry . VirusTotalTime ? . ToString ( "yyyy-MM-dd HH:mm" ) ;
2017-05-17 05:12:57 +01:00
param6 . Value = entry . Virus ;
param7 . Value = entry . Length ;
2017-04-20 06:56:49 +01:00
dbcmd . Parameters . Add ( param1 ) ;
2017-05-17 05:12:57 +01:00
dbcmd . Parameters . Add ( param2 ) ;
dbcmd . Parameters . Add ( param3 ) ;
dbcmd . Parameters . Add ( param4 ) ;
dbcmd . Parameters . Add ( param5 ) ;
dbcmd . Parameters . Add ( param6 ) ;
dbcmd . Parameters . Add ( param7 ) ;
return dbcmd ;
}
2017-12-30 00:32:21 +00:00
public bool UpdateFile ( DbFile file )
2017-05-18 22:23:49 +01:00
{
2017-12-30 00:32:21 +00:00
IDbCommand dbcmd = GetFileCommand ( file ) ;
2017-05-18 22:23:49 +01:00
IDbTransaction trans = dbCon . BeginTransaction ( ) ;
2018-03-15 15:55:59 +00:00
dbcmd . Transaction = trans ;
2017-05-18 22:23:49 +01:00
2017-12-30 00:32:21 +00:00
const string SQL =
"UPDATE files SET crack = @crack, hasvirus = @hasvirus, clamtime = @clamtime, vtotaltime = @vtotaltime, virus = @virus, length = @length " +
2017-05-18 22:23:49 +01:00
"WHERE sha256 = @sha256" ;
2017-12-30 00:32:21 +00:00
dbcmd . CommandText = SQL ;
2017-05-18 22:23:49 +01:00
dbcmd . ExecuteNonQuery ( ) ;
trans . Commit ( ) ;
dbcmd . Dispose ( ) ;
return true ;
}
2017-05-17 05:12:57 +01:00
2017-12-30 00:32:21 +00:00
public bool AddFile ( DbFile file )
2017-05-17 05:12:57 +01:00
{
2017-12-30 00:32:21 +00:00
IDbCommand dbcmd = GetFileCommand ( file ) ;
2017-04-20 06:56:49 +01:00
IDbTransaction trans = dbCon . BeginTransaction ( ) ;
2018-03-15 15:55:59 +00:00
dbcmd . Transaction = trans ;
2017-04-20 06:56:49 +01:00
2017-12-30 00:32:21 +00:00
const string SQL =
"INSERT INTO `files` (`sha256`, `crack`, `hasvirus`, `clamtime`, `vtotaltime`, `virus`, `length`)" +
" VALUES (@sha256, @crack, @hasvirus, @clamtime, @vtotaltime, @virus, @length)" ;
2017-04-20 06:56:49 +01:00
2017-12-30 00:32:21 +00:00
dbcmd . CommandText = SQL ;
2017-04-20 06:56:49 +01:00
dbcmd . ExecuteNonQuery ( ) ;
trans . Commit ( ) ;
dbcmd . Dispose ( ) ;
return true ;
}
public bool ExistsFile ( string hash )
{
2017-12-30 00:32:21 +00:00
IDbCommand dbcmd = dbCon . CreateCommand ( ) ;
2017-04-20 06:56:49 +01:00
IDbDataParameter param1 = dbcmd . CreateParameter ( ) ;
param1 . ParameterName = "@hash" ;
2017-12-30 00:32:21 +00:00
param1 . DbType = DbType . String ;
param1 . Value = hash ;
2017-04-20 06:56:49 +01:00
dbcmd . Parameters . Add ( param1 ) ;
2018-03-15 15:55:59 +00:00
dbcmd . CommandText = "SELECT * FROM files WHERE sha256 = @hash" ;
2020-08-22 21:37:02 +01:00
var dataSet = new DataSet ( ) ;
2017-04-20 06:56:49 +01:00
IDbDataAdapter dataAdapter = dbCore . GetNewDataAdapter ( ) ;
2018-03-15 15:55:59 +00:00
dataAdapter . SelectCommand = dbcmd ;
2017-04-20 06:56:49 +01:00
dataAdapter . Fill ( dataSet ) ;
DataTable dataTable = dataSet . Tables [ 0 ] ;
2020-08-22 21:37:02 +01:00
foreach ( DataRow dRow in dataTable . Rows )
return true ;
2017-04-20 06:56:49 +01:00
return false ;
}
2017-04-23 06:09:57 +01:00
2017-05-17 05:12:57 +01:00
public ulong GetFilesCount ( )
{
2018-03-15 15:55:59 +00:00
IDbCommand dbcmd = dbCon . CreateCommand ( ) ;
2017-05-17 05:12:57 +01:00
dbcmd . CommandText = "SELECT COUNT(*) FROM files" ;
2018-03-15 15:55:59 +00:00
object count = dbcmd . ExecuteScalar ( ) ;
2017-05-17 05:12:57 +01:00
dbcmd . Dispose ( ) ;
2020-08-22 21:37:02 +01:00
try
{
return Convert . ToUInt64 ( count ) ;
}
catch
{
return 0 ;
}
2017-05-17 05:12:57 +01:00
}
2017-12-30 00:32:21 +00:00
public DbFile GetFile ( string hash )
2017-05-18 22:23:49 +01:00
{
2017-12-30 00:32:21 +00:00
string sql = $"SELECT * FROM files WHERE sha256 = '{hash}'" ;
2017-05-18 22:23:49 +01:00
2017-12-30 00:32:21 +00:00
IDbCommand dbcmd = dbCon . CreateCommand ( ) ;
2017-05-18 22:23:49 +01:00
IDbDataAdapter dataAdapter = dbCore . GetNewDataAdapter ( ) ;
2018-03-15 15:55:59 +00:00
dbcmd . CommandText = sql ;
2020-08-22 21:37:02 +01:00
var dataSet = new DataSet ( ) ;
2018-03-15 15:55:59 +00:00
dataAdapter . SelectCommand = dbcmd ;
2017-05-18 22:23:49 +01:00
dataAdapter . Fill ( dataSet ) ;
DataTable dataTable = dataSet . Tables [ 0 ] ;
foreach ( DataRow dRow in dataTable . Rows )
{
2020-08-22 21:37:02 +01:00
var fEntry = new DbFile
2017-12-30 00:32:21 +00:00
{
Id = ulong . Parse ( dRow [ "id" ] . ToString ( ) ) ,
Sha256 = dRow [ "sha256" ] . ToString ( ) ,
Crack = bool . Parse ( dRow [ "crack" ] . ToString ( ) ) ,
Virus = dRow [ "virus" ] . ToString ( ) ,
Length = long . Parse ( dRow [ "length" ] . ToString ( ) )
} ;
2020-08-22 21:37:02 +01:00
if ( dRow [ "hasvirus" ] = = DBNull . Value )
fEntry . HasVirus = null ;
else
fEntry . HasVirus = bool . Parse ( dRow [ "hasvirus" ] . ToString ( ) ) ;
if ( dRow [ "clamtime" ] = = DBNull . Value )
fEntry . ClamTime = null ;
else
fEntry . ClamTime = DateTime . Parse ( dRow [ "clamtime" ] . ToString ( ) ) ;
if ( dRow [ "vtotaltime" ] = = DBNull . Value )
fEntry . VirusTotalTime = null ;
2017-05-18 22:23:49 +01:00
else
2020-08-22 21:37:02 +01:00
fEntry . VirusTotalTime = DateTime . Parse ( dRow [ "vtotaltime" ] . ToString ( ) ) ;
2017-05-18 22:23:49 +01:00
return fEntry ;
}
return null ;
}
2017-12-30 00:32:21 +00:00
public bool GetFiles ( out List < DbFile > entries , ulong start , ulong count )
2017-05-17 05:12:57 +01:00
{
2017-12-30 00:32:21 +00:00
entries = new List < DbFile > ( ) ;
2017-05-17 05:12:57 +01:00
2017-12-30 00:32:21 +00:00
string sql = $"SELECT * FROM files ORDER BY sha256 LIMIT {start}, {count}" ;
2017-05-17 05:12:57 +01:00
2017-12-30 00:32:21 +00:00
IDbCommand dbcmd = dbCon . CreateCommand ( ) ;
2017-05-17 05:12:57 +01:00
IDbDataAdapter dataAdapter = dbCore . GetNewDataAdapter ( ) ;
2018-03-15 15:55:59 +00:00
dbcmd . CommandText = sql ;
2020-08-22 21:37:02 +01:00
var dataSet = new DataSet ( ) ;
2018-03-15 15:55:59 +00:00
dataAdapter . SelectCommand = dbcmd ;
2017-05-17 05:12:57 +01:00
dataAdapter . Fill ( dataSet ) ;
DataTable dataTable = dataSet . Tables [ 0 ] ;
foreach ( DataRow dRow in dataTable . Rows )
{
2020-08-22 21:37:02 +01:00
var fEntry = new DbFile
2017-12-30 00:32:21 +00:00
{
Id = ulong . Parse ( dRow [ "id" ] . ToString ( ) ) ,
Sha256 = dRow [ "sha256" ] . ToString ( ) ,
Crack = bool . Parse ( dRow [ "crack" ] . ToString ( ) ) ,
Virus = dRow [ "virus" ] . ToString ( ) ,
Length = long . Parse ( dRow [ "length" ] . ToString ( ) )
} ;
2020-08-22 21:37:02 +01:00
if ( dRow [ "hasvirus" ] = = DBNull . Value )
fEntry . HasVirus = null ;
2017-05-19 04:15:33 +01:00
else
2020-08-22 21:37:02 +01:00
fEntry . HasVirus = bool . Parse ( dRow [ "hasvirus" ] . ToString ( ) ) ;
if ( dRow [ "clamtime" ] = = DBNull . Value )
fEntry . ClamTime = null ;
else
fEntry . ClamTime = DateTime . Parse ( dRow [ "clamtime" ] . ToString ( ) ) ;
if ( dRow [ "vtotaltime" ] = = DBNull . Value )
fEntry . VirusTotalTime = null ;
else
fEntry . VirusTotalTime = DateTime . Parse ( dRow [ "vtotaltime" ] . ToString ( ) ) ;
2017-05-19 04:15:33 +01:00
entries . Add ( fEntry ) ;
}
return true ;
}
2017-12-30 00:32:21 +00:00
public bool GetNotAvFiles ( out List < DbFile > entries )
2017-05-19 04:15:33 +01:00
{
2017-12-30 00:32:21 +00:00
entries = new List < DbFile > ( ) ;
2017-05-19 04:15:33 +01:00
2017-12-30 00:32:21 +00:00
const string SQL = "SELECT * FROM files WHERE hasvirus IS NULL ORDER BY sha256" ;
2017-05-19 04:15:33 +01:00
2017-12-30 00:32:21 +00:00
IDbCommand dbcmd = dbCon . CreateCommand ( ) ;
2017-05-19 04:15:33 +01:00
IDbDataAdapter dataAdapter = dbCore . GetNewDataAdapter ( ) ;
2018-03-15 15:55:59 +00:00
dbcmd . CommandText = SQL ;
2020-08-22 21:37:02 +01:00
var dataSet = new DataSet ( ) ;
2018-03-15 15:55:59 +00:00
dataAdapter . SelectCommand = dbcmd ;
2017-05-19 04:15:33 +01:00
dataAdapter . Fill ( dataSet ) ;
DataTable dataTable = dataSet . Tables [ 0 ] ;
foreach ( DataRow dRow in dataTable . Rows )
{
2020-08-22 21:37:02 +01:00
var fEntry = new DbFile
2017-12-30 00:32:21 +00:00
{
Id = ulong . Parse ( dRow [ "id" ] . ToString ( ) ) ,
Sha256 = dRow [ "sha256" ] . ToString ( ) ,
Crack = bool . Parse ( dRow [ "crack" ] . ToString ( ) ) ,
Virus = dRow [ "virus" ] . ToString ( ) ,
Length = long . Parse ( dRow [ "length" ] . ToString ( ) )
} ;
2020-08-22 21:37:02 +01:00
if ( dRow [ "hasvirus" ] = = DBNull . Value )
fEntry . HasVirus = null ;
2017-05-17 05:12:57 +01:00
else
2020-08-22 21:37:02 +01:00
fEntry . HasVirus = bool . Parse ( dRow [ "hasvirus" ] . ToString ( ) ) ;
if ( dRow [ "clamtime" ] = = DBNull . Value )
fEntry . ClamTime = null ;
else
fEntry . ClamTime = DateTime . Parse ( dRow [ "clamtime" ] . ToString ( ) ) ;
if ( dRow [ "vtotaltime" ] = = DBNull . Value )
fEntry . VirusTotalTime = null ;
else
fEntry . VirusTotalTime = DateTime . Parse ( dRow [ "vtotaltime" ] . ToString ( ) ) ;
2017-05-17 05:12:57 +01:00
entries . Add ( fEntry ) ;
}
return true ;
}
2018-02-23 03:33:22 +00:00
IDbCommand GetAppFileCommand ( DbAppFile person )
2017-04-23 06:09:57 +01:00
{
IDbCommand dbcmd = dbCon . CreateCommand ( ) ;
IDbDataParameter param1 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param2 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param3 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param4 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param5 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param6 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param7 = dbcmd . CreateParameter ( ) ;
param1 . ParameterName = "@path" ;
param2 . ParameterName = "@sha256" ;
param3 . ParameterName = "@length" ;
param4 . ParameterName = "@creation" ;
param5 . ParameterName = "@access" ;
param6 . ParameterName = "@modification" ;
param7 . ParameterName = "@attributes" ;
param1 . DbType = DbType . String ;
param2 . DbType = DbType . String ;
param3 . DbType = DbType . String ;
param4 . DbType = DbType . String ;
param5 . DbType = DbType . String ;
param6 . DbType = DbType . String ;
param7 . DbType = DbType . Int32 ;
param1 . Value = person . Path ;
param2 . Value = person . Sha256 ;
param3 . Value = person . Length ;
param4 . Value = person . CreationTimeUtc . ToString ( "yyyy-MM-dd HH:mm" ) ;
param5 . Value = person . LastAccessTimeUtc . ToString ( "yyyy-MM-dd HH:mm" ) ;
param6 . Value = person . LastWriteTimeUtc . ToString ( "yyyy-MM-dd HH:mm" ) ;
param7 . Value = ( int ) person . Attributes ;
dbcmd . Parameters . Add ( param1 ) ;
dbcmd . Parameters . Add ( param2 ) ;
dbcmd . Parameters . Add ( param3 ) ;
dbcmd . Parameters . Add ( param4 ) ;
dbcmd . Parameters . Add ( param5 ) ;
dbcmd . Parameters . Add ( param6 ) ;
dbcmd . Parameters . Add ( param7 ) ;
return dbcmd ;
}
2018-02-23 03:33:22 +00:00
public bool AddFileToApp ( DbAppFile file , long app )
2017-04-23 06:09:57 +01:00
{
2018-02-23 03:33:22 +00:00
IDbCommand dbcmd = GetAppFileCommand ( file ) ;
2017-04-23 06:09:57 +01:00
IDbTransaction trans = dbCon . BeginTransaction ( ) ;
2018-03-15 15:55:59 +00:00
dbcmd . Transaction = trans ;
2017-04-23 06:09:57 +01:00
2017-12-30 00:32:21 +00:00
string sql =
2018-02-23 03:33:22 +00:00
$"INSERT INTO `app_{app}` (`path`, `sha256`, `length`, `creation`, `access`, `modification`, `attributes`)" +
2017-12-30 00:32:21 +00:00
" VALUES (@path, @sha256, @length, @creation, @access, @modification, @attributes)" ;
2017-04-23 06:09:57 +01:00
dbcmd . CommandText = sql ;
dbcmd . ExecuteNonQuery ( ) ;
trans . Commit ( ) ;
dbcmd . Dispose ( ) ;
return true ;
}
2018-02-23 03:33:22 +00:00
IDbCommand GetFolderCommand ( DbFolder folder )
2017-05-12 02:06:16 +01:00
{
IDbCommand dbcmd = dbCon . CreateCommand ( ) ;
IDbDataParameter param1 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param4 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param5 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param6 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param7 = dbcmd . CreateParameter ( ) ;
param1 . ParameterName = "@path" ;
param4 . ParameterName = "@creation" ;
param5 . ParameterName = "@access" ;
param6 . ParameterName = "@modification" ;
param7 . ParameterName = "@attributes" ;
param1 . DbType = DbType . String ;
param4 . DbType = DbType . String ;
param5 . DbType = DbType . String ;
param6 . DbType = DbType . String ;
param7 . DbType = DbType . Int32 ;
2018-02-23 03:33:22 +00:00
param1 . Value = folder . Path ;
param4 . Value = folder . CreationTimeUtc . ToString ( "yyyy-MM-dd HH:mm" ) ;
param5 . Value = folder . LastAccessTimeUtc . ToString ( "yyyy-MM-dd HH:mm" ) ;
param6 . Value = folder . LastWriteTimeUtc . ToString ( "yyyy-MM-dd HH:mm" ) ;
param7 . Value = ( int ) folder . Attributes ;
2017-05-12 02:06:16 +01:00
dbcmd . Parameters . Add ( param1 ) ;
dbcmd . Parameters . Add ( param4 ) ;
dbcmd . Parameters . Add ( param5 ) ;
dbcmd . Parameters . Add ( param6 ) ;
dbcmd . Parameters . Add ( param7 ) ;
return dbcmd ;
}
2018-02-23 03:33:22 +00:00
public bool AddFolderToApp ( DbFolder folder , long app )
2017-05-12 02:06:16 +01:00
{
2017-12-30 00:32:21 +00:00
IDbCommand dbcmd = GetFolderCommand ( folder ) ;
2017-05-12 02:06:16 +01:00
IDbTransaction trans = dbCon . BeginTransaction ( ) ;
2018-03-15 15:55:59 +00:00
dbcmd . Transaction = trans ;
2017-05-12 02:06:16 +01:00
2018-02-23 03:33:22 +00:00
string sql =
$"INSERT INTO `app_{app}_folders` (`path`, `creation`, `access`, `modification`, `attributes`)" +
" VALUES (@path, @creation, @access, @modification, @attributes)" ;
2017-05-12 02:06:16 +01:00
dbcmd . CommandText = sql ;
dbcmd . ExecuteNonQuery ( ) ;
trans . Commit ( ) ;
dbcmd . Dispose ( ) ;
return true ;
}
2018-02-23 03:33:22 +00:00
public bool RemoveApp ( long id )
2017-05-11 14:50:29 +01:00
{
2017-12-30 00:32:21 +00:00
IDbCommand dbcmd = dbCon . CreateCommand ( ) ;
2017-05-11 14:50:29 +01:00
IDbTransaction trans = dbCon . BeginTransaction ( ) ;
2018-03-15 15:55:59 +00:00
dbcmd . Transaction = trans ;
2017-05-11 14:50:29 +01:00
2018-02-23 03:33:22 +00:00
string sql = $"DROP TABLE IF EXISTS `app_{id}`;" ;
2017-05-11 14:50:29 +01:00
dbcmd . CommandText = sql ;
dbcmd . ExecuteNonQuery ( ) ;
trans . Commit ( ) ;
dbcmd . Dispose ( ) ;
2017-12-30 00:32:21 +00:00
dbcmd = dbCon . CreateCommand ( ) ;
trans = dbCon . BeginTransaction ( ) ;
2017-05-11 14:50:29 +01:00
dbcmd . Transaction = trans ;
2018-02-23 03:33:22 +00:00
sql = $"DROP TABLE IF EXISTS `app_{id}_folders`;" ;
2017-05-12 02:06:16 +01:00
dbcmd . CommandText = sql ;
dbcmd . ExecuteNonQuery ( ) ;
trans . Commit ( ) ;
dbcmd . Dispose ( ) ;
2017-12-30 00:32:21 +00:00
dbcmd = dbCon . CreateCommand ( ) ;
trans = dbCon . BeginTransaction ( ) ;
2017-05-12 02:06:16 +01:00
dbcmd . Transaction = trans ;
2018-02-23 03:33:22 +00:00
sql = $"DROP TABLE IF EXISTS `app_{id}_symlinks`;" ;
2017-08-22 18:05:18 +01:00
dbcmd . CommandText = sql ;
dbcmd . ExecuteNonQuery ( ) ;
trans . Commit ( ) ;
dbcmd . Dispose ( ) ;
2017-12-30 00:32:21 +00:00
dbcmd = dbCon . CreateCommand ( ) ;
trans = dbCon . BeginTransaction ( ) ;
2017-08-22 18:05:18 +01:00
dbcmd . Transaction = trans ;
2018-02-23 03:33:22 +00:00
sql = $"DELETE FROM apps WHERE id = '{id}';" ;
2017-05-11 14:50:29 +01:00
dbcmd . CommandText = sql ;
dbcmd . ExecuteNonQuery ( ) ;
trans . Commit ( ) ;
dbcmd . Dispose ( ) ;
return true ;
}
2017-04-23 06:09:57 +01:00
2018-02-23 03:33:22 +00:00
public bool CreateTableForApp ( long id )
2017-04-23 06:09:57 +01:00
{
2017-12-30 00:32:21 +00:00
IDbCommand dbcmd = dbCon . CreateCommand ( ) ;
2017-04-23 06:09:57 +01:00
IDbTransaction trans = dbCon . BeginTransaction ( ) ;
2018-03-15 15:55:59 +00:00
dbcmd . Transaction = trans ;
2017-04-23 06:09:57 +01:00
2020-08-22 21:37:02 +01:00
string sql = $"DROP TABLE IF EXISTS `app_{id}`;\n\n" + $"CREATE TABLE IF NOT EXISTS `app_{id}` (\n" +
" `id` INTEGER PRIMARY KEY AUTOINCREMENT,\n" + " `path` VARCHAR(8192) NOT NULL,\n" +
" `sha256` VARCHAR(64) NOT NULL,\n\n" + " `length` BIGINT NOT NULL,\n" +
" `creation` DATETIME NULL,\n" + " `access` DATETIME NULL,\n" +
" `modification` DATETIME NULL,\n" + " `attributes` INTEGER NULL);\n\n" +
2018-02-23 03:33:22 +00:00
$"CREATE UNIQUE INDEX `app_{id}_id_UNIQUE` ON `app_{id}` (`id` ASC);\n\n" +
$"CREATE INDEX `app_{id}_path_idx` ON `app_{id}` (`path` ASC);" ;
2017-05-12 02:06:16 +01:00
dbcmd . CommandText = sql ;
dbcmd . ExecuteNonQuery ( ) ;
trans . Commit ( ) ;
dbcmd . Dispose ( ) ;
2017-12-30 00:32:21 +00:00
dbcmd = dbCon . CreateCommand ( ) ;
trans = dbCon . BeginTransaction ( ) ;
2017-05-12 02:06:16 +01:00
dbcmd . Transaction = trans ;
2020-08-22 21:37:02 +01:00
sql = $"DROP TABLE IF EXISTS `app_{id}_folders`;\n\n" +
$"CREATE TABLE IF NOT EXISTS `app_{id}_folders` (\n" + " `id` INTEGER PRIMARY KEY AUTOINCREMENT,\n" +
" `path` VARCHAR(8192) NOT NULL,\n" + " `creation` DATETIME NULL,\n" +
" `access` DATETIME NULL,\n" + " `modification` DATETIME NULL,\n" +
" `attributes` INTEGER NULL);\n\n" +
2018-02-23 04:34:03 +00:00
$"CREATE UNIQUE INDEX `app_{id}_folders_id_UNIQUE` ON `app_{id}_folders` (`id` ASC);\n\n" +
$"CREATE INDEX `app_{id}_folders_path_idx` ON `app_{id}_folders` (`path` ASC);" ;
2017-04-23 06:09:57 +01:00
dbcmd . CommandText = sql ;
dbcmd . ExecuteNonQuery ( ) ;
trans . Commit ( ) ;
dbcmd . Dispose ( ) ;
return true ;
}
2017-04-23 21:25:47 +01:00
2018-02-23 03:33:22 +00:00
public bool ExistsFileInApp ( string hash , long appId )
2017-04-23 21:25:47 +01:00
{
2017-12-30 00:32:21 +00:00
IDbCommand dbcmd = dbCon . CreateCommand ( ) ;
2017-04-23 21:25:47 +01:00
IDbDataParameter param1 = dbcmd . CreateParameter ( ) ;
param1 . ParameterName = "@hash" ;
2017-12-30 00:32:21 +00:00
param1 . DbType = DbType . String ;
param1 . Value = hash ;
2017-04-23 21:25:47 +01:00
dbcmd . Parameters . Add ( param1 ) ;
2018-03-15 15:55:59 +00:00
dbcmd . CommandText = $"SELECT * FROM `app_{appId}` WHERE sha256 = @hash" ;
2020-08-22 21:37:02 +01:00
var dataSet = new DataSet ( ) ;
2017-04-23 21:25:47 +01:00
IDbDataAdapter dataAdapter = dbCore . GetNewDataAdapter ( ) ;
2018-03-15 15:55:59 +00:00
dataAdapter . SelectCommand = dbcmd ;
2017-04-23 21:25:47 +01:00
dataAdapter . Fill ( dataSet ) ;
DataTable dataTable = dataSet . Tables [ 0 ] ;
2020-08-22 21:37:02 +01:00
foreach ( DataRow dRow in dataTable . Rows )
return true ;
2017-04-23 21:25:47 +01:00
return false ;
}
2017-05-11 04:36:45 +01:00
2017-12-30 00:32:21 +00:00
public bool ExistsOs ( string mdid )
2017-05-11 04:36:45 +01:00
{
2017-12-30 00:32:21 +00:00
IDbCommand dbcmd = dbCon . CreateCommand ( ) ;
2017-05-11 04:36:45 +01:00
IDbDataParameter param1 = dbcmd . CreateParameter ( ) ;
param1 . ParameterName = "@mdid" ;
2017-12-30 00:32:21 +00:00
param1 . DbType = DbType . String ;
param1 . Value = mdid ;
2017-05-11 04:36:45 +01:00
dbcmd . Parameters . Add ( param1 ) ;
2018-03-15 15:55:59 +00:00
dbcmd . CommandText = "SELECT * FROM `apps` WHERE mdid = @mdid" ;
2020-08-22 21:37:02 +01:00
var dataSet = new DataSet ( ) ;
2017-05-11 04:36:45 +01:00
IDbDataAdapter dataAdapter = dbCore . GetNewDataAdapter ( ) ;
2018-03-15 15:55:59 +00:00
dataAdapter . SelectCommand = dbcmd ;
2017-05-11 04:36:45 +01:00
dataAdapter . Fill ( dataSet ) ;
DataTable dataTable = dataSet . Tables [ 0 ] ;
2020-08-22 21:37:02 +01:00
foreach ( DataRow dRow in dataTable . Rows )
return true ;
2017-05-11 04:36:45 +01:00
return false ;
}
2017-05-12 04:10:43 +01:00
2018-02-23 03:33:22 +00:00
public bool GetAllFilesInApp ( out List < DbAppFile > entries , long id )
2017-05-12 04:10:43 +01:00
{
2018-02-23 03:33:22 +00:00
entries = new List < DbAppFile > ( ) ;
2017-05-12 04:10:43 +01:00
2018-02-23 03:33:22 +00:00
string sql = $"SELECT * from app_{id}" ;
2017-05-12 04:10:43 +01:00
2017-12-30 00:32:21 +00:00
IDbCommand dbcmd = dbCon . CreateCommand ( ) ;
2017-05-12 04:10:43 +01:00
IDbDataAdapter dataAdapter = dbCore . GetNewDataAdapter ( ) ;
2018-03-15 15:55:59 +00:00
dbcmd . CommandText = sql ;
2020-08-22 21:37:02 +01:00
var dataSet = new DataSet ( ) ;
2018-03-15 15:55:59 +00:00
dataAdapter . SelectCommand = dbcmd ;
2017-05-12 04:10:43 +01:00
dataAdapter . Fill ( dataSet ) ;
DataTable dataTable = dataSet . Tables [ 0 ] ;
foreach ( DataRow dRow in dataTable . Rows )
{
2020-08-22 21:37:02 +01:00
var fEntry = new DbAppFile
2017-12-30 00:32:21 +00:00
{
Id = ulong . Parse ( dRow [ "id" ] . ToString ( ) ) ,
Path = dRow [ "path" ] . ToString ( ) ,
Sha256 = dRow [ "sha256" ] . ToString ( ) ,
Length = long . Parse ( dRow [ "length" ] . ToString ( ) ) ,
CreationTimeUtc = DateTime . Parse ( dRow [ "creation" ] . ToString ( ) ) ,
LastAccessTimeUtc = DateTime . Parse ( dRow [ "access" ] . ToString ( ) ) ,
LastWriteTimeUtc = DateTime . Parse ( dRow [ "modification" ] . ToString ( ) ) ,
Attributes = ( FileAttributes ) int . Parse ( dRow [ "attributes" ] . ToString ( ) )
} ;
2017-05-12 04:10:43 +01:00
entries . Add ( fEntry ) ;
}
return true ;
}
2017-12-30 00:32:21 +00:00
public bool GetAllFolders ( out List < DbFolder > entries , long id )
2017-05-12 04:10:43 +01:00
{
2017-12-30 00:32:21 +00:00
entries = new List < DbFolder > ( ) ;
2017-05-12 04:10:43 +01:00
2018-02-23 03:33:22 +00:00
string sql = $"SELECT * from app_{id}_folders" ;
2017-05-12 04:10:43 +01:00
2017-12-30 00:32:21 +00:00
IDbCommand dbcmd = dbCon . CreateCommand ( ) ;
2017-05-12 04:10:43 +01:00
IDbDataAdapter dataAdapter = dbCore . GetNewDataAdapter ( ) ;
2018-03-15 15:55:59 +00:00
dbcmd . CommandText = sql ;
2020-08-22 21:37:02 +01:00
var dataSet = new DataSet ( ) ;
2018-03-15 15:55:59 +00:00
dataAdapter . SelectCommand = dbcmd ;
2017-05-12 04:10:43 +01:00
dataAdapter . Fill ( dataSet ) ;
DataTable dataTable = dataSet . Tables [ 0 ] ;
foreach ( DataRow dRow in dataTable . Rows )
{
2020-08-22 21:37:02 +01:00
var fEntry = new DbFolder
2017-12-30 00:32:21 +00:00
{
Id = ulong . Parse ( dRow [ "id" ] . ToString ( ) ) ,
Path = dRow [ "path" ] . ToString ( ) ,
CreationTimeUtc = DateTime . Parse ( dRow [ "creation" ] . ToString ( ) ) ,
LastAccessTimeUtc = DateTime . Parse ( dRow [ "access" ] . ToString ( ) ) ,
LastWriteTimeUtc = DateTime . Parse ( dRow [ "modification" ] . ToString ( ) ) ,
Attributes = ( FileAttributes ) int . Parse ( dRow [ "attributes" ] . ToString ( ) )
} ;
2017-05-12 04:10:43 +01:00
entries . Add ( fEntry ) ;
}
return true ;
}
2017-05-18 17:56:28 +01:00
public bool ToggleCrack ( string hash , bool crack )
{
2017-12-30 00:32:21 +00:00
IDbCommand dbcmd = dbCon . CreateCommand ( ) ;
IDbTransaction trans = dbCon . BeginTransaction ( ) ;
2017-05-18 17:56:28 +01:00
IDbDataParameter param1 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param2 = dbcmd . CreateParameter ( ) ;
param1 . ParameterName = "@hash" ;
2017-12-30 00:32:21 +00:00
param1 . DbType = DbType . String ;
param1 . Value = hash ;
2017-05-18 17:56:28 +01:00
param2 . ParameterName = "@crack" ;
2017-12-30 00:32:21 +00:00
param2 . DbType = DbType . Boolean ;
param2 . Value = crack ;
2017-05-18 17:56:28 +01:00
dbcmd . Parameters . Add ( param1 ) ;
dbcmd . Parameters . Add ( param2 ) ;
dbcmd . CommandText = "UPDATE files SET crack = @crack WHERE sha256 = @hash" ;
dbcmd . ExecuteNonQuery ( ) ;
trans . Commit ( ) ;
dbcmd . Dispose ( ) ;
return true ;
}
2017-05-19 16:57:28 +01:00
public bool DeleteFile ( string hash )
{
2017-12-30 00:32:21 +00:00
IDbCommand dbcmd = dbCon . CreateCommand ( ) ;
2017-05-19 16:57:28 +01:00
IDbDataParameter param1 = dbcmd . CreateParameter ( ) ;
param1 . ParameterName = "@sha256" ;
2017-12-30 00:32:21 +00:00
param1 . DbType = DbType . String ;
param1 . Value = hash ;
2017-05-19 16:57:28 +01:00
dbcmd . Parameters . Add ( param1 ) ;
dbcmd . CommandText = "DELETE FROM `files` WHERE sha256 = @sha256" ;
dbcmd . ExecuteNonQuery ( ) ;
return true ;
}
2017-08-22 18:05:18 +01:00
2018-02-23 03:33:22 +00:00
public bool HasSymlinks ( long appId )
2017-08-22 18:05:18 +01:00
{
2018-03-15 15:55:59 +00:00
IDbCommand dbcmd = dbCon . CreateCommand ( ) ;
2020-08-22 21:37:02 +01:00
2017-12-30 00:32:21 +00:00
dbcmd . CommandText =
2018-02-23 03:33:22 +00:00
$"SELECT COUNT(*) FROM sqlite_master WHERE type = 'table' AND name = 'app_{appId}_symlinks'" ;
2020-08-22 21:37:02 +01:00
2017-08-22 18:05:18 +01:00
object count = dbcmd . ExecuteScalar ( ) ;
dbcmd . Dispose ( ) ;
return Convert . ToUInt64 ( count ) > 0 ;
}
2017-12-30 00:32:21 +00:00
public bool CreateSymlinkTableForOs ( long id )
2017-08-22 18:05:18 +01:00
{
2017-12-30 00:32:21 +00:00
IDbCommand dbcmd = dbCon . CreateCommand ( ) ;
2017-08-22 18:05:18 +01:00
IDbTransaction trans = dbCon . BeginTransaction ( ) ;
2018-03-15 15:55:59 +00:00
dbcmd . Transaction = trans ;
2017-08-22 18:05:18 +01:00
2020-08-22 21:37:02 +01:00
dbcmd . CommandText = $"DROP TABLE IF EXISTS `app_{id}_symlinks`;\n\n" +
$"CREATE TABLE IF NOT EXISTS `app_{id}_symlinks` (\n" +
" `path` VARCHAR(8192) PRIMARY KEY,\n" + " `target` VARCHAR(8192) NOT NULL);\n\n" +
$"CREATE UNIQUE INDEX `app_{id}_symlinks_path_UNIQUE` ON `app_{id}_symlinks` (`path` ASC);\n\n" +
$"CREATE INDEX `app_{id}_symlinks_target_idx` ON `app_{id}_symlinks` (`target` ASC);" ;
2017-08-22 18:05:18 +01:00
dbcmd . ExecuteNonQuery ( ) ;
trans . Commit ( ) ;
dbcmd . Dispose ( ) ;
return true ;
}
2018-02-23 03:33:22 +00:00
public bool AddSymlinkToApp ( string path , string target , long app )
2017-08-22 18:05:18 +01:00
{
IDbCommand dbcmd = dbCon . CreateCommand ( ) ;
IDbDataParameter param1 = dbcmd . CreateParameter ( ) ;
IDbDataParameter param2 = dbcmd . CreateParameter ( ) ;
param1 . ParameterName = "@path" ;
param2 . ParameterName = "@target" ;
param1 . DbType = DbType . String ;
param2 . DbType = DbType . String ;
param1 . Value = path ;
param2 . Value = target ;
dbcmd . Parameters . Add ( param1 ) ;
dbcmd . Parameters . Add ( param2 ) ;
IDbTransaction trans = dbCon . BeginTransaction ( ) ;
2018-03-15 15:55:59 +00:00
dbcmd . Transaction = trans ;
2017-08-22 18:05:18 +01:00
2018-02-23 03:33:22 +00:00
string sql = $"INSERT INTO `app_{app}_symlinks` (`path`, `target`)" + " VALUES (@path, @target)" ;
2017-08-22 18:05:18 +01:00
dbcmd . CommandText = sql ;
dbcmd . ExecuteNonQuery ( ) ;
trans . Commit ( ) ;
dbcmd . Dispose ( ) ;
return true ;
}
public bool GetAllSymlinks ( out Dictionary < string , string > entries , long id )
{
entries = new Dictionary < string , string > ( ) ;
2018-02-23 03:33:22 +00:00
string sql = $"SELECT * from app_{id}_symlinks" ;
2017-08-22 18:05:18 +01:00
2017-12-30 00:32:21 +00:00
IDbCommand dbcmd = dbCon . CreateCommand ( ) ;
2017-08-22 18:05:18 +01:00
IDbDataAdapter dataAdapter = dbCore . GetNewDataAdapter ( ) ;
2018-03-15 15:55:59 +00:00
dbcmd . CommandText = sql ;
2020-08-22 21:37:02 +01:00
var dataSet = new DataSet ( ) ;
2018-03-15 15:55:59 +00:00
dataAdapter . SelectCommand = dbcmd ;
2017-08-22 18:05:18 +01:00
dataAdapter . Fill ( dataSet ) ;
DataTable dataTable = dataSet . Tables [ 0 ] ;
foreach ( DataRow dRow in dataTable . Rows )
if ( ! entries . ContainsKey ( dRow [ "path" ] . ToString ( ) ) )
entries . Add ( dRow [ "path" ] . ToString ( ) , dRow [ "target" ] . ToString ( ) ) ;
return true ;
}
2017-04-20 06:56:49 +01:00
}
2017-12-30 00:32:21 +00:00
}