FileSystemShare.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /* Copyright (C) 2014-2017 Tal Aloni <tal.aloni.il@gmail.com>. All rights reserved.
  2. *
  3. * You can redistribute this program and/or modify it under the terms of
  4. * the GNU Lesser Public License as published by the Free Software Foundation,
  5. * either version 3 of the License, or (at your option) any later version.
  6. */
  7. using System;
  8. using System.Collections.Generic;
  9. using System.IO;
  10. using System.Net;
  11. using System.Text;
  12. using Utilities;
  13. namespace SMBLibrary.Server
  14. {
  15. public class AccessRequestArgs : EventArgs
  16. {
  17. public string UserName;
  18. public string Path;
  19. public FileAccess RequestedAccess;
  20. public IPEndPoint ClientEndPoint;
  21. public bool Allow = true;
  22. public AccessRequestArgs(string userName, string path, FileAccess requestedAccess, IPEndPoint clientEndPoint)
  23. {
  24. UserName = userName;
  25. Path = path;
  26. RequestedAccess = requestedAccess;
  27. ClientEndPoint = clientEndPoint;
  28. }
  29. }
  30. public class FileSystemShare : ISMBShare
  31. {
  32. private string m_name;
  33. public IFileSystem m_fileSystem;
  34. public event EventHandler<AccessRequestArgs> OnAccessRequest;
  35. public FileSystemShare(string shareName, IFileSystem fileSystem)
  36. {
  37. m_name = shareName;
  38. m_fileSystem = fileSystem;
  39. }
  40. public bool HasReadAccess(string userName, string path, IPEndPoint clientEndPoint)
  41. {
  42. return HasAccess(userName, path, FileAccess.Read, clientEndPoint);
  43. }
  44. public bool HasWriteAccess(string userName, string path, IPEndPoint clientEndPoint)
  45. {
  46. return HasAccess(userName, path, FileAccess.Write, clientEndPoint);
  47. }
  48. public bool HasAccess(string userName, string path, FileAccess requestedAccess, IPEndPoint clientEndPoint)
  49. {
  50. // To be thread-safe we must capture the delegate reference first
  51. EventHandler<AccessRequestArgs> handler = OnAccessRequest;
  52. if (handler != null)
  53. {
  54. AccessRequestArgs args = new AccessRequestArgs(userName, path, requestedAccess, clientEndPoint);
  55. handler(this, args);
  56. return args.Allow;
  57. }
  58. return true;
  59. }
  60. public string Name
  61. {
  62. get
  63. {
  64. return m_name;
  65. }
  66. }
  67. public IFileSystem FileSystem
  68. {
  69. get
  70. {
  71. return m_fileSystem;
  72. }
  73. }
  74. }
  75. }