]> src.twobees.de Git - dotfiles.git/blob - stow/oh-my-zsh/.oh-my-zsh/plugins/ufw/_ufw
...
[dotfiles.git] / stow / oh-my-zsh / .oh-my-zsh / plugins / ufw / _ufw
1 #compdef ufw
2 #autoload
3
4 typeset -A opt_args
5
6 function _ufw_delete_rules {
7   if ufw status &> /dev/null ; then
8     ufw status numbered \
9       | perl -n -e'/\[ +(\d+)\] +([^ ].+)/ && print "\"$1\[$2\]\" "'
10   fi
11 }
12
13 function _ufw_app_profiles {
14   grep -rhoP "(?<=\[)[^\]]+" /etc/ufw/applications.d/ \
15     | awk '{ print "\""$0"\""}' \
16     | tr '\n' ' '
17 }
18
19 local -a _1st_arguments
20 _1st_arguments=(
21   'allow:add allow rule'
22   'app:Application profile commands'
23   'default:set default policy'
24   'delete:delete RULE'
25   'deny:add deny rule'
26   'disable:disables the firewall'
27   'enable:enables the firewall'
28   'insert:insert RULE at NUM'
29   'limit:add limit rule'
30   'logging:set logging to LEVEL'
31   'reject:add reject rule'
32   'reload:reloads firewall'
33   'reset:reset firewall'
34   'show:show firewall report'
35   'status:show firewall status'
36   'version:display version information'
37 )
38
39 local context state line curcontext="$curcontext"
40
41 _arguments -C \
42   '(--dry-run)--dry-run[dry run]' \
43   '1:: :->cmds' \
44   '2:: :->subcmds' \
45   '3:: :->subsubcmds' \
46 && return 0
47
48 local rules
49
50 case "$state" in
51   (cmds)
52     _describe -t commands "ufw commands" _1st_arguments
53     return 0
54     ;;
55   (subcmds)
56     case "$line[1]" in
57       (app)
58         _values 'app' \
59           'list[list application profiles]' \
60           'info[show information on PROFILE]' \
61           'update[update PROFILE]' \
62           'default[set default application policy]' \
63         && ret=0
64         ;;
65       (status)
66         _values 'status' \
67           'numbered[show firewall status as numbered list of RULES]' \
68           'verbose[show verbose firewall status]' \
69         && ret=0
70         ;;
71       (logging)
72         _values 'logging' \
73           'on' 'off' 'low' 'medium' 'high' 'full' \
74         && ret=0
75         ;;
76       (default)
77         _values 'default' \
78           'allow' 'deny' 'reject' \
79         && ret=0
80         ;;
81       (show)
82         _values 'show' \
83           'raw' 'builtins' 'before-rules' 'user-rules' 'after-rules' 'logging-rules' 'listening' 'added' \
84         && ret=0
85         ;;
86       (delete)
87         rules="$(_ufw_delete_rules)"
88         if [[ -n "$rules" ]] ; then
89           _values 'delete' \
90             ${(Q)${(z)"$(_ufw_delete_rules)"}} \
91           && ret=0
92         fi
93         ;;
94     esac
95     ;;
96   (subsubcmds)
97     case "$line[1]" in
98       (app)
99         case "$line[2]" in
100           (info|update)
101             _values 'profiles' \
102               ${(Q)${(z)"$(_ufw_app_profiles)"}} \
103             && ret=0
104             ;;
105         esac
106         ;;
107       (default)
108         _values 'default-direction' \
109           'incoming' 'outgoing' \
110         && ret=0
111         ;;
112     esac
113 esac
114
115 return