diff options
| author | Shlomo Hecht <shlomo@twine-s.com> | 2019-02-25 11:02:07 +0200 |
|---|---|---|
| committer | Shlomo Hecht <shlomo@twine-s.com> | 2019-02-25 11:02:07 +0200 |
| commit | b462fdd744f491b04137fd99863f6cb6c623cfa0 (patch) | |
| tree | 2f69f8e953450a0452442c24f3809aec84ce7db0 /Software/Visual_Studio/Web/Tango.MachineService/Security | |
| parent | a8ddb23154fe5111c9509fa0a83dcc36adcba4ee (diff) | |
| parent | 44a35db8a2929fb3f6aa56ed08185e066292f106 (diff) | |
| download | Tango-b462fdd744f491b04137fd99863f6cb6c623cfa0.tar.gz Tango-b462fdd744f491b04137fd99863f6cb6c623cfa0.zip | |
Merge branch 'master' of https://twinetfs.visualstudio.com/Tango/_git/Tango
Diffstat (limited to 'Software/Visual_Studio/Web/Tango.MachineService/Security')
3 files changed, 118 insertions, 0 deletions
diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Security/RefreshTokenEncoder.cs b/Software/Visual_Studio/Web/Tango.MachineService/Security/RefreshTokenEncoder.cs new file mode 100644 index 000000000..896788ffc --- /dev/null +++ b/Software/Visual_Studio/Web/Tango.MachineService/Security/RefreshTokenEncoder.cs @@ -0,0 +1,26 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using Tango.Core.Cryptography; + +namespace Tango.MachineService.Security +{ + public class RefreshTokenEncoder<T> + { + public String Encode(T obj) + { + String json = JsonConvert.SerializeObject(obj); + Rfc2898Cryptographer crypt = new Rfc2898Cryptographer(); + return crypt.Encrypt(json); + } + + public T Decode(String token) + { + Rfc2898Cryptographer crypt = new Rfc2898Cryptographer(); + String json = crypt.Decrypt(token); + return JsonConvert.DeserializeObject<T>(json); + } + } +}
\ No newline at end of file diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Security/RefreshTokenEntity.cs b/Software/Visual_Studio/Web/Tango.MachineService/Security/RefreshTokenEntity.cs new file mode 100644 index 000000000..2788799aa --- /dev/null +++ b/Software/Visual_Studio/Web/Tango.MachineService/Security/RefreshTokenEntity.cs @@ -0,0 +1,55 @@ +using Microsoft.WindowsAzure.Storage.Table; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Tango.MachineService.Security +{ + public class RefreshTokenEntity<T> : TableEntity where T : class + { + /// <summary> + /// Initializes a new instance of the <see cref="RefreshTokenEntity"/> class. + /// </summary> + public RefreshTokenEntity() + { + + } + + + public RefreshTokenEntity(String identity, String accessToken, String refreshToken, DateTime expiration, T obj) + { + PartitionKey = MachineServiceConfig.REFRESH_TOKENS_TABLE_PARTITION; + + Identity = identity; + AccessToken = accessToken; + RefreshToken = refreshToken; + Expiration = expiration; + + RefreshTokenEncoder<T> encoder = new RefreshTokenEncoder<T>(); + Object = encoder.Encode(obj); + } + + [IgnoreProperty] + public String RefreshToken + { + get { return RowKey; } + set { RowKey = value; } + } + + public String Identity { get; set; } + + public String AccessToken { get; set; } + + public DateTime Expiration { get; set; } + + public String Object { get; set; } + + public T GetObject() + { + RefreshTokenEncoder<T> encoder = new RefreshTokenEncoder<T>(); + return encoder.Decode(RefreshToken); + } + } +} diff --git a/Software/Visual_Studio/Web/Tango.MachineService/Security/RefreshTokensManager.cs b/Software/Visual_Studio/Web/Tango.MachineService/Security/RefreshTokensManager.cs new file mode 100644 index 000000000..06796c41e --- /dev/null +++ b/Software/Visual_Studio/Web/Tango.MachineService/Security/RefreshTokensManager.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using Tango.Web.Security; +using Tango.Web.Storage; + +namespace Tango.MachineService.Security +{ + public class RefreshTokensManager<T> where T : class + { + private TableStorageManager _manager; + + public RefreshTokensManager() + { + _manager = new TableStorageManager(); + } + + public RefreshTokenEntity<T> GetToken(String refreshToken) + { + var table = _manager.GetTable(MachineServiceConfig.REFRESH_TOKENS_TABLE_NAME); + return table.GetEntity<RefreshTokenEntity<T>>(MachineServiceConfig.REFRESH_TOKENS_TABLE_PARTITION, refreshToken); + } + + public RefreshTokenEntity<T> InsertOrUpdate(RefreshTokenEntity<T> refreshTokenEntity) + { + var table = _manager.GetTable(MachineServiceConfig.REFRESH_TOKENS_TABLE_NAME); + return table.InsertOrUpdateEntity(refreshTokenEntity); + } + + public void DeleteToken(RefreshTokenEntity<T> entity) + { + var table = _manager.GetTable(MachineServiceConfig.REFRESH_TOKENS_TABLE_NAME); + table.DeleteEntity(entity); + } + } +}
\ No newline at end of file |
