diff options
-rw-r--r-- | OpenSim/Data/IAuthenticationData.cs | 4 | ||||
-rw-r--r-- | OpenSim/Data/MySQL/MySQLAuthenticationData.cs | 52 | ||||
-rw-r--r-- | OpenSim/Services/AuthenticationService/AuthenticationServiceBase.cs | 11 |
3 files changed, 64 insertions, 3 deletions
diff --git a/OpenSim/Data/IAuthenticationData.cs b/OpenSim/Data/IAuthenticationData.cs index f848716..7753e04 100644 --- a/OpenSim/Data/IAuthenticationData.cs +++ b/OpenSim/Data/IAuthenticationData.cs | |||
@@ -48,5 +48,9 @@ namespace OpenSim.Data | |||
48 | bool Store(AuthenticationData data); | 48 | bool Store(AuthenticationData data); |
49 | 49 | ||
50 | bool SetDataItem(UUID principalID, string item, string value); | 50 | bool SetDataItem(UUID principalID, string item, string value); |
51 | |||
52 | bool SetToken(UUID principalID, string token, int lifetime); | ||
53 | |||
54 | bool CheckToken(UUID principalID, string token, int lifetime); | ||
51 | } | 55 | } |
52 | } | 56 | } |
diff --git a/OpenSim/Data/MySQL/MySQLAuthenticationData.cs b/OpenSim/Data/MySQL/MySQLAuthenticationData.cs index 19575ec..1ee64ce 100644 --- a/OpenSim/Data/MySQL/MySQLAuthenticationData.cs +++ b/OpenSim/Data/MySQL/MySQLAuthenticationData.cs | |||
@@ -39,6 +39,7 @@ namespace OpenSim.Data.MySQL | |||
39 | { | 39 | { |
40 | private string m_Realm; | 40 | private string m_Realm; |
41 | private List<string> m_ColumnNames = null; | 41 | private List<string> m_ColumnNames = null; |
42 | private int m_LastExpire = 0; | ||
42 | 43 | ||
43 | public MySqlAuthenticationData(string connectionString, string realm) | 44 | public MySqlAuthenticationData(string connectionString, string realm) |
44 | : base(connectionString) | 45 | : base(connectionString) |
@@ -153,5 +154,56 @@ namespace OpenSim.Data.MySQL | |||
153 | 154 | ||
154 | return false; | 155 | return false; |
155 | } | 156 | } |
157 | |||
158 | public bool SetToken(UUID principalID, string token, int lifetime) | ||
159 | { | ||
160 | if (System.Environment.TickCount - m_LastExpire > 30000) | ||
161 | DoExpire(); | ||
162 | |||
163 | MySqlCommand cmd = new MySqlCommand("insert into tokens (UUID, token, validity) values (?principalID, ?token, date_add(now(), interval ?lifetime minute))"); | ||
164 | cmd.Parameters.AddWithValue("?principalID", principalID.ToString()); | ||
165 | cmd.Parameters.AddWithValue("?token", token); | ||
166 | cmd.Parameters.AddWithValue("?lifetime", lifetime.ToString()); | ||
167 | |||
168 | if (ExecuteNonQuery(cmd) > 0) | ||
169 | { | ||
170 | cmd.Dispose(); | ||
171 | return true; | ||
172 | } | ||
173 | |||
174 | cmd.Dispose(); | ||
175 | return false; | ||
176 | } | ||
177 | |||
178 | public bool CheckToken(UUID principalID, string token, int lifetime) | ||
179 | { | ||
180 | if (System.Environment.TickCount - m_LastExpire > 30000) | ||
181 | DoExpire(); | ||
182 | |||
183 | MySqlCommand cmd = new MySqlCommand("update tokens set validity = date_add(now(), interval ?lifetime minute) where UUID = ?principalID and token = ?token and validity > now()"); | ||
184 | cmd.Parameters.AddWithValue("?principalID", principalID.ToString()); | ||
185 | cmd.Parameters.AddWithValue("?token", token); | ||
186 | cmd.Parameters.AddWithValue("?lifetime", lifetime.ToString()); | ||
187 | |||
188 | if (ExecuteNonQuery(cmd) > 0) | ||
189 | { | ||
190 | cmd.Dispose(); | ||
191 | return true; | ||
192 | } | ||
193 | |||
194 | cmd.Dispose(); | ||
195 | |||
196 | return false; | ||
197 | } | ||
198 | |||
199 | private void DoExpire() | ||
200 | { | ||
201 | MySqlCommand cmd = new MySqlCommand("delete from tokens where validity < now()"); | ||
202 | ExecuteNonQuery(cmd); | ||
203 | |||
204 | cmd.Dispose(); | ||
205 | |||
206 | m_LastExpire = System.Environment.TickCount; | ||
207 | } | ||
156 | } | 208 | } |
157 | } | 209 | } |
diff --git a/OpenSim/Services/AuthenticationService/AuthenticationServiceBase.cs b/OpenSim/Services/AuthenticationService/AuthenticationServiceBase.cs index dab0598..5056db3 100644 --- a/OpenSim/Services/AuthenticationService/AuthenticationServiceBase.cs +++ b/OpenSim/Services/AuthenticationService/AuthenticationServiceBase.cs | |||
@@ -97,7 +97,7 @@ namespace OpenSim.Services.AuthenticationService | |||
97 | 97 | ||
98 | public bool Verify(UUID principalID, string token, int lifetime) | 98 | public bool Verify(UUID principalID, string token, int lifetime) |
99 | { | 99 | { |
100 | return false; | 100 | return m_Database.CheckToken(principalID, token, lifetime); |
101 | } | 101 | } |
102 | 102 | ||
103 | public bool VerifyEncrypted(byte[] cyphertext, byte[] key) | 103 | public bool VerifyEncrypted(byte[] cyphertext, byte[] key) |
@@ -107,7 +107,7 @@ namespace OpenSim.Services.AuthenticationService | |||
107 | 107 | ||
108 | public virtual bool Release(UUID principalID, string token) | 108 | public virtual bool Release(UUID principalID, string token) |
109 | { | 109 | { |
110 | return false; | 110 | return m_Database.CheckToken(principalID, token, 0); |
111 | } | 111 | } |
112 | 112 | ||
113 | public virtual bool ReleaseEncrypted(byte[] cyphertext, byte[] key) | 113 | public virtual bool ReleaseEncrypted(byte[] cyphertext, byte[] key) |
@@ -117,7 +117,12 @@ namespace OpenSim.Services.AuthenticationService | |||
117 | 117 | ||
118 | protected string GetToken(UUID principalID, int lifetime) | 118 | protected string GetToken(UUID principalID, int lifetime) |
119 | { | 119 | { |
120 | return "OK"; | 120 | UUID token = UUID.Random(); |
121 | |||
122 | if (m_Database.SetToken(principalID, token.ToString(), lifetime)) | ||
123 | return token.ToString(); | ||
124 | |||
125 | return String.Empty; | ||
121 | } | 126 | } |
122 | } | 127 | } |
123 | } | 128 | } |