Merge pull request #39 from bendooru/show-failed-attempts

Add option show-failed-attempts
This commit is contained in:
Drew DeVault 2019-01-29 14:48:00 -05:00 committed by GitHub
commit effdea5231
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 28 additions and 2 deletions

View File

@ -50,6 +50,7 @@ struct swaylock_args {
bool show_indicator; bool show_indicator;
bool show_caps_lock_text; bool show_caps_lock_text;
bool show_caps_lock_indicator; bool show_caps_lock_indicator;
bool show_failed_attempts;
bool daemonize; bool daemonize;
}; };
@ -73,6 +74,7 @@ struct swaylock_state {
struct swaylock_password password; struct swaylock_password password;
struct swaylock_xkb xkb; struct swaylock_xkb xkb;
enum auth_state auth_state; enum auth_state auth_state;
int failed_attempts;
bool run_display; bool run_display;
struct zxdg_output_manager_v1 *zxdg_output_manager; struct zxdg_output_manager_v1 *zxdg_output_manager;
}; };

15
main.c
View File

@ -508,6 +508,7 @@ static int parse_options(int argc, char **argv, struct swaylock_state *state,
{"scaling", required_argument, NULL, 's'}, {"scaling", required_argument, NULL, 's'},
{"tiling", no_argument, NULL, 't'}, {"tiling", no_argument, NULL, 't'},
{"no-unlock-indicator", no_argument, NULL, 'u'}, {"no-unlock-indicator", no_argument, NULL, 'u'},
{"show-failed-attempts", no_argument, NULL, 'F'},
{"version", no_argument, NULL, 'v'}, {"version", no_argument, NULL, 'v'},
{"bs-hl-color", required_argument, NULL, LO_BS_HL_COLOR}, {"bs-hl-color", required_argument, NULL, LO_BS_HL_COLOR},
{"caps-lock-bs-hl-color", required_argument, NULL, LO_CAPS_LOCK_BS_HL_COLOR}, {"caps-lock-bs-hl-color", required_argument, NULL, LO_CAPS_LOCK_BS_HL_COLOR},
@ -567,6 +568,8 @@ static int parse_options(int argc, char **argv, struct swaylock_state *state,
"Same as --scaling=tile.\n" "Same as --scaling=tile.\n"
" -u, --no-unlock-indicator " " -u, --no-unlock-indicator "
"Disable the unlock indicator.\n" "Disable the unlock indicator.\n"
" -F, --show-failed-attempts "
"Show current count of failed authentication attempts.\n"
" -v, --version " " -v, --version "
"Show the version number and quit.\n" "Show the version number and quit.\n"
" --bs-hl-color <color> " " --bs-hl-color <color> "
@ -644,7 +647,7 @@ static int parse_options(int argc, char **argv, struct swaylock_state *state,
optind = 1; optind = 1;
while (1) { while (1) {
int opt_idx = 0; int opt_idx = 0;
c = getopt_long(argc, argv, "c:defhi:Llnrs:tuvC:", long_options, c = getopt_long(argc, argv, "c:deFfhi:Llnrs:tuvC:", long_options,
&opt_idx); &opt_idx);
if (c == -1) { if (c == -1) {
break; break;
@ -716,6 +719,11 @@ static int parse_options(int argc, char **argv, struct swaylock_state *state,
state->args.show_indicator = false; state->args.show_indicator = false;
} }
break; break;
case 'F':
if (state) {
state->args.show_failed_attempts = true;
}
break;
case 'v': case 'v':
fprintf(stdout, "swaylock version " SWAYLOCK_VERSION "\n"); fprintf(stdout, "swaylock version " SWAYLOCK_VERSION "\n");
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);
@ -961,6 +969,7 @@ static void comm_in(int fd, short mask, void *data) {
} else { } else {
state.auth_state = AUTH_STATE_INVALID; state.auth_state = AUTH_STATE_INVALID;
schedule_indicator_clear(&state); schedule_indicator_clear(&state);
++state.failed_attempts;
damage_state(&state); damage_state(&state);
} }
} }
@ -970,6 +979,7 @@ int main(int argc, char **argv) {
initialize_pw_backend(argc, argv); initialize_pw_backend(argc, argv);
enum line_mode line_mode = LM_LINE; enum line_mode line_mode = LM_LINE;
state.failed_attempts = 0;
state.args = (struct swaylock_args){ state.args = (struct swaylock_args){
.mode = BACKGROUND_MODE_FILL, .mode = BACKGROUND_MODE_FILL,
.font = strdup("sans-serif"), .font = strdup("sans-serif"),
@ -978,7 +988,8 @@ int main(int argc, char **argv) {
.ignore_empty = false, .ignore_empty = false,
.show_indicator = true, .show_indicator = true,
.show_caps_lock_indicator = false, .show_caps_lock_indicator = false,
.show_caps_lock_text = true .show_caps_lock_text = true,
.show_failed_attempts = false
}; };
wl_list_init(&state.images); wl_list_init(&state.images);
set_default_colors(&state.args.colors); set_default_colors(&state.args.colors);

View File

@ -86,6 +86,7 @@ void render_frame(struct swaylock_surface *surface) {
// Draw a message // Draw a message
char *text = NULL; char *text = NULL;
char attempts[4]; // like i3lock: count no more than 999
set_color_for_state(cairo, state, &state->args.colors.text); set_color_for_state(cairo, state, &state->args.colors.text);
cairo_select_font_face(cairo, state->args.font, cairo_select_font_face(cairo, state->args.font,
CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
@ -103,8 +104,17 @@ void render_frame(struct swaylock_surface *surface) {
case AUTH_STATE_INPUT: case AUTH_STATE_INPUT:
case AUTH_STATE_INPUT_NOP: case AUTH_STATE_INPUT_NOP:
case AUTH_STATE_BACKSPACE: case AUTH_STATE_BACKSPACE:
// Caps Lock has higher priority
if (state->xkb.caps_lock && state->args.show_caps_lock_text) { if (state->xkb.caps_lock && state->args.show_caps_lock_text) {
text = "Caps Lock"; text = "Caps Lock";
} else if (state->args.show_failed_attempts &&
state->failed_attempts > 0) {
if (state->failed_attempts > 999) {
text = "999+";
} else {
snprintf(attempts, sizeof(attempts), "%d", state->failed_attempts);
text = attempts;
}
} }
break; break;
default: default:

View File

@ -54,6 +54,9 @@ Locks your Wayland session.
*-l, --indicator-caps-lock* *-l, --indicator-caps-lock*
Show the current Caps Lock state also on the indicator. Show the current Caps Lock state also on the indicator.
*-F, --show-failed-attempts*
Show the number of failed authentication attempts on the indicator.
*-s, --scaling* *-s, --scaling*
Scaling mode for images: _stretch_, _fill_, _fit_, _center_, or _tile_. Use Scaling mode for images: _stretch_, _fill_, _fit_, _center_, or _tile_. Use
the additional mode _solid\_color_ to display only the background color, even the additional mode _solid\_color_ to display only the background color, even