6
6
7
7
namespace QPass . Entities
8
8
{
9
- class FileManager
9
+ public class FileManager
10
10
{
11
11
#region Member
12
12
13
13
private string _Location ;
14
- private byte [ ] _File ; //QPDB
14
+ private QPDB _QPDBFile ; //QPDB file
15
+ private string _Extension = ".QPDB" ;
15
16
16
17
#endregion Member
17
18
@@ -25,97 +26,112 @@ public FileManager(string location = "")
25
26
{
26
27
this . _Location = location ;
27
28
}
28
-
29
- /// <summary>
30
- ///
31
- /// </summary>
32
- /// <param name="location"></param>
33
- /// <param name="file"></param>
34
- protected FileManager ( string location , byte [ ] file )
35
- {
36
- this . _Location = location ;
37
- this . _File = file ;
38
- }
39
-
29
+
40
30
/// <summary>
41
31
/// Destructor.
42
32
/// </summary>
43
33
~ FileManager ( )
44
34
{
45
- Array . Clear ( this . _File , 0 , this . _File . Length ) ;
46
35
this . _Location = string . Empty ;
47
36
}
48
37
49
38
#endregion Constructor & Destructor
50
39
51
40
#region Protected
52
41
53
- protected void Save ( )
42
+ /// <summary>
43
+ /// write file to hard disk
44
+ /// </summary>
45
+ /// <param name="filename"></param>
46
+ /// <param name="data"></param>
47
+ public void Write ( string filename , byte [ ] data )
54
48
{
55
- using ( FileStream fs = new FileStream ( this . _Location , FileMode . Create ) )
49
+ using ( FileStream fs = new FileStream ( filename , FileMode . Create ) )
56
50
{
57
51
using ( BinaryWriter bw = new BinaryWriter ( fs ) )
58
52
{
59
- bw . Write ( this . _File ) ;
53
+ bw . Write ( data ) ;
60
54
fs . Close ( ) ;
61
55
bw . Close ( ) ;
62
56
}
63
57
}
64
58
}
65
59
66
- protected void Load ( )
60
+ /// <summary>
61
+ /// read file from hard disk
62
+ /// </summary>
63
+ /// <param name="filename"></param>
64
+ /// <returns></returns>
65
+ public byte [ ] Read ( string filename )
67
66
{
68
- if ( File . Exists ( this . _Location ) == false )
67
+ if ( File . Exists ( filename ) == false )
69
68
{
70
69
throw new Exception ( "File not exist." ) ;
71
70
}
72
71
73
- using ( FileStream fs = new FileStream ( this . _Location , FileMode . Open ) )
72
+ byte [ ] buffer ;
73
+
74
+ using ( FileStream fs = new FileStream ( filename , FileMode . Open ) )
74
75
{
75
76
using ( BinaryReader br = new BinaryReader ( fs ) )
76
77
{
77
- this . _File = br . ReadBytes ( ( int ) br . BaseStream . Length ) ;
78
+ buffer = br . ReadBytes ( ( int ) br . BaseStream . Length ) ;
78
79
fs . Close ( ) ;
79
80
br . Close ( ) ;
80
81
}
81
82
}
83
+
84
+ return buffer ;
82
85
}
83
-
84
- #endregion Protected
85
86
86
- #region Public
87
+ /// <summary>
88
+ /// save file
89
+ /// </summary>
90
+ protected void Save ( )
91
+ {
92
+ byte [ ] buffer = Core . Utilities . Convert . Objects . Serialize ( this . _QPDBFile ) ;
93
+ this . Write ( this . _Location , buffer ) ;
94
+ System . Array . Clear ( buffer , 0 , buffer . Length ) ;
95
+ }
87
96
88
- public void SaveData ( QPDB qpdb )
97
+ /// <summary>
98
+ /// load file
99
+ /// </summary>
100
+ protected void Load ( )
89
101
{
90
- if ( qpdb == null )
91
- {
92
- throw new Exception ( "QPDB can't be null." ) ;
93
- }
102
+ //read or load QPDB file
103
+ byte [ ] buffer = this . Read ( this . _Location ) ;
104
+ this . _QPDBFile = ( QPDB ) QPass . Core . Utilities . Convert . Objects . Deserialize ( buffer ) ;
94
105
95
- try
96
- {
97
- this . SaveData ( qpdb . GetBytes ( ) ) ;
98
- }
99
- catch
100
- {
101
- throw new Exception ( "QPDB can't be serialize." ) ;
102
- }
106
+ //delete QPDB file in hard disk
107
+ File . Delete ( this . _Location ) ;
108
+
109
+ System . Array . Clear ( buffer , 0 , buffer . Length ) ;
103
110
}
104
111
105
- public void SaveData ( byte [ ] file )
106
- {
107
- if ( file == null || file . Length == 0 )
108
- {
109
- throw new Exception ( "File can't empty." ) ;
110
- }
112
+ #endregion Protected
111
113
112
- this . _File = file ;
113
- this . Save ( ) ;
114
+ #region Public
115
+
116
+ public void SetMasterPassword ( byte [ ] password )
117
+ {
118
+ this . _QPDBFile . SetMasterPassword ( password ) ;
114
119
}
115
120
116
- public void LoadData ( )
121
+ public bool ValidMasterPassword ( byte [ ] password )
117
122
{
118
- this . Load ( ) ;
123
+ bool valid = true ;
124
+ byte [ ] temp = this . _QPDBFile . GetMasterPassword ( ) ;
125
+
126
+ for ( int i = 0 ; i < password . Length ; i ++ )
127
+ {
128
+ if ( password [ i ] != temp [ i ] )
129
+ {
130
+ valid = false ;
131
+ break ;
132
+ }
133
+ }
134
+ return valid ;
119
135
}
120
136
121
137
#endregion Public
0 commit comments