Use $HOME as a possible storage location
If LOCALAPPDATA and USERPROFILE are both null (as is the case on Linux/OSX) use "$HOME/.aspnet" as the root folder for data protection keys Fixes #76
This commit is contained in:
parent
8983a03fed
commit
d386e78ee6
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
|
|
@ -61,9 +62,11 @@ namespace Microsoft.AspNet.DataProtection.Repositories
|
||||||
/// </summary>
|
/// </summary>
|
||||||
protected IServiceProvider Services { get; }
|
protected IServiceProvider Services { get; }
|
||||||
|
|
||||||
|
private const string DataProtectionKeysFolderName = "DataProtection-Keys";
|
||||||
|
|
||||||
private static DirectoryInfo GetKeyStorageDirectoryFromBaseAppDataPath(string basePath)
|
private static DirectoryInfo GetKeyStorageDirectoryFromBaseAppDataPath(string basePath)
|
||||||
{
|
{
|
||||||
return new DirectoryInfo(Path.Combine(basePath, "ASP.NET", "DataProtection-Keys"));
|
return new DirectoryInfo(Path.Combine(basePath, "ASP.NET", DataProtectionKeysFolderName));
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual IReadOnlyCollection<XElement> GetAllElements()
|
public virtual IReadOnlyCollection<XElement> GetAllElements()
|
||||||
|
|
@ -103,10 +106,33 @@ namespace Microsoft.AspNet.DataProtection.Repositories
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
// On core CLR, we need to fall back to environment variables.
|
// On core CLR, we need to fall back to environment variables.
|
||||||
string folderPath = Environment.GetEnvironmentVariable("LOCALAPPDATA")
|
DirectoryInfo retVal;
|
||||||
?? Path.Combine(Environment.GetEnvironmentVariable("USERPROFILE"), "AppData", "Local");
|
|
||||||
|
var localAppDataPath = Environment.GetEnvironmentVariable("LOCALAPPDATA");
|
||||||
|
var userProfilePath = Environment.GetEnvironmentVariable("USERPROFILE");
|
||||||
|
var homePath = Environment.GetEnvironmentVariable("HOME");
|
||||||
|
|
||||||
|
if (localAppDataPath != null)
|
||||||
|
{
|
||||||
|
retVal = GetKeyStorageDirectoryFromBaseAppDataPath(localAppDataPath);
|
||||||
|
}
|
||||||
|
else if (userProfilePath != null)
|
||||||
|
{
|
||||||
|
retVal = GetKeyStorageDirectoryFromBaseAppDataPath(Path.Combine(userProfilePath, "AppData", "Local"));
|
||||||
|
}
|
||||||
|
else if (homePath != null)
|
||||||
|
{
|
||||||
|
// If LOCALAPPDATA and USERPROFILE are not present but HOME is,
|
||||||
|
// it's a good guess that this is a *NIX machine. Use *NIX conventions for a folder name.
|
||||||
|
retVal = new DirectoryInfo(Path.Combine(homePath, ".aspnet", DataProtectionKeysFolderName));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Debug.Assert(retVal != null);
|
||||||
|
|
||||||
DirectoryInfo retVal = GetKeyStorageDirectoryFromBaseAppDataPath(folderPath);
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
retVal.Create(); // throws if we don't have access, e.g., user profile not loaded
|
retVal.Create(); // throws if we don't have access, e.g., user profile not loaded
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue