.ts
TypeScript
(application/typescript)
// 1st-party
import { ReqHandler } from "@ethicdevs/react-monolith";
// app
import { buildRouteLink } from "../../../utils/shared";
import { makeUsersService } from "../../../services/user";
import { AppRoute, AppRouteParams } from "../../../routes.defs";

const postKeyAddAction: ReqHandler<
  AppRouteParams,
  AppRoute.SETTINGS_KEY_ADD_ACTION
> = async (request, reply) => {
  const { curr_user_username } = request.session.data;
  if (curr_user_username == null) {
    return reply.status(404).callNotFound();
  }

  const usersService = makeUsersService({ request });
  const user = await usersService.getUserByUsername(curr_user_username);

  if (user == null) {
    return reply.status(404).callNotFound();
  }

  const { username } = request.params;
  const { name, key } = request.body;

  try {
    await usersService.addUserSSHKey(user, name, key);
  } catch (err) {
    const error = err as Error;
    request.session.data.flash_message = error.message;
    request.session.data.flash_data = {
      keyName: name,
      key: key,
    };
  }

  if (request.session.data.flash_message != null) {
    return reply.redirect(
      302,
      buildRouteLink(
        AppRoute.SETTINGS_KEY_ADD,
        { username },
        { encodeURIComponent: 0 }
      )
    );
  }

  return reply.redirect(
    302,
    buildRouteLink(AppRoute.SETTINGS, { username }, { encodeURIComponent: 0 })
  );
};

export default postKeyAddAction;