OpenSim
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros
AssetPermissions.cs
Go to the documentation of this file.
1 using System;
2 using System.Collections.Generic;
3 using System.Reflection;
4 
5 using Nini.Config;
6 using log4net;
7 
8 using OpenMetaverse;
9 
10 namespace OpenSim.Framework
11 {
12  public class AssetPermissions
13  {
14  private static readonly ILog m_log =
15  LogManager.GetLogger(
16  MethodBase.GetCurrentMethod().DeclaringType);
17 
18  private bool[] m_DisallowExport, m_DisallowImport;
19  private string[] m_AssetTypeNames;
20 
21  public AssetPermissions(IConfig config)
22  {
23  Type enumType = typeof(AssetType);
24  m_AssetTypeNames = Enum.GetNames(enumType);
25  for (int i = 0; i < m_AssetTypeNames.Length; i++)
26  m_AssetTypeNames[i] = m_AssetTypeNames[i].ToLower();
27  int n = Enum.GetValues(enumType).Length;
28  m_DisallowExport = new bool[n];
29  m_DisallowImport = new bool[n];
30 
31  LoadPermsFromConfig(config, "DisallowExport", m_DisallowExport);
32  LoadPermsFromConfig(config, "DisallowImport", m_DisallowImport);
33 
34  }
35 
36  private void LoadPermsFromConfig(IConfig assetConfig, string variable, bool[] bitArray)
37  {
38  if (assetConfig == null)
39  return;
40 
41  string perms = assetConfig.GetString(variable, String.Empty);
42  string[] parts = perms.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
43  foreach (string s in parts)
44  {
45  int index = Array.IndexOf(m_AssetTypeNames, s.Trim().ToLower());
46  if (index >= 0)
47  bitArray[index] = true;
48  else
49  m_log.WarnFormat("[Asset Permissions]: Invalid AssetType {0}", s);
50  }
51 
52  }
53 
54  public bool AllowedExport(sbyte type)
55  {
56  string assetTypeName = ((AssetType)type).ToString();
57 
58  int index = Array.IndexOf(m_AssetTypeNames, assetTypeName.ToLower());
59  if (index >= 0 && m_DisallowExport[index])
60  {
61  m_log.DebugFormat("[Asset Permissions]: Export denied: configuration does not allow export of AssetType {0}", assetTypeName);
62  return false;
63  }
64 
65  return true;
66  }
67 
68  public bool AllowedImport(sbyte type)
69  {
70  string assetTypeName = ((AssetType)type).ToString();
71 
72  int index = Array.IndexOf(m_AssetTypeNames, assetTypeName.ToLower());
73  if (index >= 0 && m_DisallowImport[index])
74  {
75  m_log.DebugFormat("[Asset Permissions]: Import denied: configuration does not allow import of AssetType {0}", assetTypeName);
76  return false;
77  }
78 
79  return true;
80  }
81 
82 
83  }
84 }