Skip to content

Commit

Permalink
Adding new README, help page and TODO.
Browse files Browse the repository at this point in the history
  • Loading branch information
Macmod committed Feb 19, 2024
1 parent 2a40403 commit 385bdb4
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 52 deletions.
88 changes: 53 additions & 35 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,18 @@

`godap` is a complete TUI for LDAP written in Golang.

# Summary

* [Screenshots](https://github.com/Macmod/godap?tab=readme-ov-file#screenshots)
* [Features](https://github.com/Macmod/godap?tab=readme-ov-file#features)
* [Installation](https://github.com/Macmod/godap?tab=readme-ov-file#installation)
* [Usage](https://github.com/Macmod/godap?tab=readme-ov-file#usage)
* [Flags](https://github.com/Macmod/godap?tab=readme-ov-file#flags)
* [Keybindings](https://github.com/Macmod/godap?tab=readme-ov-file#keybindings)
* [Contributing](https://github.com/Macmod/godap?tab=readme-ov-file#contributing)
* [Acknowledgements](https://github.com/Macmod/godap?tab=readme-ov-file#acknowledgements)
* [Disclaimers](https://github.com/Macmod/godap?tab=readme-ov-file#disclaimers)

# Screenshots

![images/page1.png](images/page1.png)
Expand All @@ -16,19 +28,18 @@

# Features

* Formats date/time, boolean and other categorical attributes into readable text
* Supports changing the search filter & base DN for the query
* LDAPS & StartTLS support
* Pretty colors & cool emojis
* Quick explorer that loads objects on demand
* Recursive object search bundled with useful saved searches
* Group members & user groups lookup
* Supports creation, editing and removal of objects and attributes
* Supports moving and renaming objects
* Supports exporting specific subtrees of the directory into JSON files
* Interactive userAccountControl editor
* DACL viewer
* SOCKS support
* 🗒️ Formats date/time, boolean and other categorical attributes into readable text
* 😎 Pretty colors & cool emojis
* 🔐 LDAPS & StartTLS support
* ⏩ Fast explorer that loads objects on demand
* 🔎 Recursive object search bundled with useful saved searches
* 👥 Group members & user groups lookup
* 🎡 Supports creation, editing and removal of objects and attributes
* 🚙 Supports moving and renaming objects
* 📁 Supports exporting specific subtrees of the directory into JSON files
* 🕹️ Interactive userAccountControl editor
* 🔥 Interactive DACL editor
* 🧦 SOCKS support

# Installation

Expand Down Expand Up @@ -102,26 +113,32 @@ Note that when using a proxy you might want to consider including the `-M` flag

## Keybindings

| Keybinding | Context | Action |
| --------------------------------- | ----------------------------------------------------------- | ------------------------------------------------------------- |
| `Ctrl` + `J` | Global | Next panel |
| `f` / `F` | Global | Toggle attribute formatting |
| `e` / `E` | Global | Toggle emojis |
| `c` / `C` | Global | Toggle colors |
| `a` / `A` | Global | Toggle attribute expansion for multi-value attributes |
| `l` / `L` | Global | Change current server address & credentials |
| `r` / `R` | Global | Reconnect to the server |
| `u` / `U` | Global | Upgrade connection to use TLS (with StartTLS) |
| `Ctrl` + `e / E` | Attributes panel | Edit the selected attribute of the selected object |
| `Ctrl` + `n / N` | Attributes panel | Create a new attribute in the selected object |
| `Ctrl` + `n / N` | Explorer panel | Create a new object under the selected object |
| `Ctrl` + `s / S` | Explorer panel | Export all loaded nodes in the selected subtree into a JSON file |
| `Ctrl` + `p / P` | Explorer panel | Change the password of the selected user or computer account |
| `Ctrl` + `a / A` | Explorer panel | Update the userAccountControl of the object interactively |
| `Ctrl` + `l / L` | Explorer panel | Move the selected object to another location |
| `Delete` | Explorer/attributes panel | Deletes the selected object or attribute |
| `h` / `H` | Global | Show/hide headers |
| `q` | Global | Exit the program |
| Keybinding | Context | Action |
| --------------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------------- |
| `Ctrl` + `J` | Global | Next panel |
| `f` / `F` | Global | Toggle attribute formatting |
| `e` / `E` | Global | Toggle emojis |
| `c` / `C` | Global | Toggle colors |
| `a` / `A` | Global | Toggle attribute expansion for multi-value attributes |
| `l` / `L` | Global | Change current server address & credentials |
| `r` / `R` | Global | Reconnect to the server |
| `u` / `U` | Global | Upgrade connection to use TLS (with StartTLS) |
| `Ctrl` + `n / N` | Explorer panel | Create a new object under the selected object |
| `Ctrl` + `s / S` | Explorer panel | Export all loaded nodes in the selected subtree into a JSON file |
| `Ctrl` + `p / P` | Explorer panel | Change the password of the selected user or computer account |
| `Ctrl` + `a / A` | Explorer panel | Update the userAccountControl of the object interactively |
| `Ctrl` + `l / L` | Explorer panel | Move the selected object to another location |
| `Delete` | Explorer panel | Delete the selected object |
| `Ctrl` + `e / E` | Attributes panel | Edit the selected attribute of the selected object |
| `Ctrl` + `n / N` | Attributes panel | Create a new attribute in the selected object |
| `Delete` | Attributes panel | Delete the selected attribute of the selected object |
| `Ctrl` + `o / O` | DACL page | Change the owner of the current DACL |
| `Ctrl` + `k / K` | DACL page | Change the control flags of the current DACL |
| `Ctrl` + `n / N` | DACL entries panel | Create a new ACE in the current DACL |
| `Ctrl` + `e / E` | DACL entries panel | Edit the selected ACE of the current DACL |
| `Delete` | DACL entries panel | Deletes the selected ACE of the current DACL |
| `h` / `H` | Global | Show/hide headers |
| `q` | Global | Exit the program |

# Contributing

Expand All @@ -136,9 +153,10 @@ Contributions are welcome by [opening an issue](https://github.com/Macmod/godap/

* [BadBlood](https://github.com/davidprowe/BadBlood) was also very useful for testing during the development of the tool.

# Disclaimer
# Disclaimers

I'm not prioritizing Kerberos authentication at the moment. Although `ldapper` (which was a great source of inspiration and useful code) supports it, the `ldapper` authors chose to rewrite lots of dependencies maintained by third parties in order to provide this feature. This does not seem like the best approach in terms of long-term support. Nonetheless, `go-ldap` (which is godap's main dependency) currently has [an open issue](https://github.com/go-ldap/ldap/issues/115) from 2017 regarding the lack of GSSAPI support. A pull request [has been merged](https://github.com/go-ldap/ldap/pull/402) in 2022 to deal with the issue on Windows platforms only, but that isn't a suitable option for this tool. I hope someone finds a solution for this issue (maybe [go-ldap/ldap/pull/449](https://github.com/go-ldap/ldap/pull/449)) that doesn't involve rewriting dependencies I won't have time to maintain :-)
* I'm not prioritizing Kerberos authentication at the moment. Although `ldapper` (which was a great source of inspiration and useful code) supports it, the `ldapper` authors chose to rewrite lots of dependencies maintained by third parties in order to provide this feature. This does not seem like the best approach in terms of long-term support. Nonetheless, `go-ldap` (which is godap's main dependency) currently has [an open issue](https://github.com/go-ldap/ldap/issues/115) from 2017 regarding the lack of GSSAPI support. A pull request [has been merged](https://github.com/go-ldap/ldap/pull/402) in 2022 to deal with the issue on Windows platforms only, but that isn't a suitable option for this tool. I hope someone finds a solution for this issue (maybe [go-ldap/ldap/pull/449](https://github.com/go-ldap/ldap/pull/449)) that doesn't involve rewriting dependencies I won't have time to maintain :-)
* All features were tested and seem to be working properly on a Windows Server 2019 lab, but this tool is highly experimental and I cannot test it extensively - I don't take responsibility for modifications that you execute and end up impacting your environment. If you observe any unexpected behaviors please [let me know](https://github.com/Macmod/godap/issues/new) so I can try to fix it.

# License

Expand Down
12 changes: 4 additions & 8 deletions TODO.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,13 @@
# TODO (priority)

* Feature: Basic DACL editing features (edit ACE rights / trustee / type / scope)
* Feature: Basic DACL editing features (delete ACE rights)
* Feature: Basic DACL editing features (delete ACE)
* Fix: Long searches in search page are blocking the UI
* Feature: Monitor object for real-time changes
* Feature: Keybinding to refresh the page contents

# TODO (later)

* Feature: Basic DACL editing features (create ACE)
* Fix: Long searches in search page are blocking the UI
* Feature: Improve object creation form (implement customizations)
* Idea: Utilities for group policy manipulation
* Feature: Utilities for group policy manipulation
* Feature: Some way to copy data from panels
* Feature: Assign DS-Replication right
* Feature: Customizable keybindings
* Feature: Kerberos authentication
* Feature: Customizable keybindings
24 changes: 15 additions & 9 deletions help.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import (
var helpPage *tview.Flex
var keybindingsPanel *tview.Table

func InitHelpPage() {
helpText := `
func initHelpPage() {
helpText := `[blue]
_______ _______ ______ _______ _______
( ____ \( ___ )( __ \ ( ___ )( ____ )
| ( \/| ( ) || ( \ )| ( ) || ( )|
Expand All @@ -18,7 +18,7 @@ func InitHelpPage() {
| (___) || (___) || (__/ )| ) ( || )
(_______)(_______)(______/ |/ \||/
v1.7.0
v2.0.0 - Ace of Spades
`

keybindings := [][]string{
Expand All @@ -30,22 +30,29 @@ v1.7.0
{"l / L", "Global", "Change current server address & credentials"},
{"r / R", "Global", "Reconnect to the server"},
{"u / U", "Global", "Upgrade connection to use TLS (with StartTLS)"},
{"Ctrl + e / E", "Attributes panel", "Edit the selected attribute of the selected object"},
{"Ctrl + n / N", "Attributes panel", "Create a new attribute in the selected object"},
{"Ctrl + n / N", "Explorer panel", "Create a new object under the selected object"},
{"Ctrl + s / S", "Explorer panel", "Export all loaded nodes in the selected subtree into a JSON file"},
{"Ctrl + p / P", "Explorer panel", "Change the password of the selected user or computer account"},
{"Ctrl + a / A", "Explorer panel", "Update the userAccountControl of the object interactively"},
{"Ctrl + l / L", "Explorer panel", "Move the selected object to another location"},
{"Delete", "Explorer/attributes panel", "Deletes the selected object or attribute"},
{"Delete", "Explorer panel", "Delete the selected object"},
{"Ctrl + e / E", "Attributes panel", "Edit the selected attribute of the selected object"},
{"Ctrl + n / N", "Attributes panel", "Create a new attribute in the selected object"},
{"Delete", "Attributes panel", "Delete the selected attribute of the selected object"},
{"Ctrl + o / O", "DACL page", "Change the owner of the current DACL"},
{"Ctrl + k / K", "DACL page", "Change the control flags of the current DACL"},
{"Ctrl + n / N", "DACL entries panel", "Create a new ACE in the current DACL"},
{"Ctrl + e / E", "DACL entries panel", "Edit the selected ACE of the current DACL"},
{"Delete", "DACL entries panel", "Deletes the selected ACE of the current DACL"},
{"h / H", "Global", "Show/hide headers"},
{"q", "Global", "Exit the program"},
}

// Create a table
keybindingsPanel = tview.NewTable().
SetBorders(true).
SetSelectable(true, false)
SetSelectable(true, false).
SetEvaluateAllRows(true).
SetFixed(1, 0)

headers := []string{"Keybinding", "Context", "Action"}
for col, header := range headers {
Expand Down Expand Up @@ -74,7 +81,6 @@ v1.7.0
frame := tview.NewFrame(keybindingsPanel)
frame.SetBorders(0, 0, 0, 0, 0, 0).
SetTitleAlign(tview.AlignCenter).
SetBorder(true).
SetTitle(" Keybindings ")

helpPage = tview.NewFlex().
Expand Down

0 comments on commit 385bdb4

Please sign in to comment.