Blame src/goabackend/goamailauth.c

Packit 79f644
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
Packit 79f644
/*
Packit 79f644
 * Copyright © 2011 – 2017 Red Hat, Inc.
Packit 79f644
 *
Packit 79f644
 * This library is free software; you can redistribute it and/or
Packit 79f644
 * modify it under the terms of the GNU Lesser General Public
Packit 79f644
 * License as published by the Free Software Foundation; either
Packit 79f644
 * version 2 of the License, or (at your option) any later version.
Packit 79f644
 *
Packit 79f644
 * This library is distributed in the hope that it will be useful,
Packit 79f644
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 79f644
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 79f644
 * Lesser General Public License for more details.
Packit 79f644
 *
Packit 79f644
 * You should have received a copy of the GNU Lesser General
Packit 79f644
 * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
Packit 79f644
 */
Packit 79f644
Packit 79f644
#include "config.h"
Packit 79f644
Packit 79f644
#include <glib/gi18n-lib.h>
Packit 79f644
Packit 79f644
#include "goamailauth.h"
Packit 79f644
Packit 79f644
struct _GoaMailAuthPrivate
Packit 79f644
{
Packit 79f644
  GDataInputStream *input;
Packit 79f644
  GDataOutputStream *output;
Packit 79f644
};
Packit 79f644
Packit 79f644
enum
Packit 79f644
{
Packit 79f644
  PROP_0,
Packit 79f644
  PROP_INPUT,
Packit 79f644
  PROP_OUTPUT
Packit 79f644
};
Packit 79f644
Packit 79f644
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (GoaMailAuth, goa_mail_auth, G_TYPE_OBJECT);
Packit 79f644
Packit 79f644
/* ---------------------------------------------------------------------------------------------------- */
Packit 79f644
Packit 79f644
static void
Packit 79f644
mail_auth_run_in_thread_func (GTask *task,
Packit 79f644
                              gpointer object,
Packit 79f644
                              G_GNUC_UNUSED gpointer task_data,
Packit 79f644
                              GCancellable *cancellable)
Packit 79f644
{
Packit 79f644
  GError *error;
Packit 79f644
Packit 79f644
  error = NULL;
Packit 79f644
  if (!goa_mail_auth_run_sync (GOA_MAIL_AUTH (object), cancellable, &error))
Packit 79f644
    g_task_return_error (task, error);
Packit 79f644
  else
Packit 79f644
    g_task_return_boolean (task, TRUE);
Packit 79f644
}
Packit 79f644
Packit 79f644
/* ---------------------------------------------------------------------------------------------------- */
Packit 79f644
Packit 79f644
static void
Packit 79f644
mail_auth_starttls_in_thread_func (GTask *task,
Packit 79f644
                                   gpointer object,
Packit 79f644
                                   G_GNUC_UNUSED gpointer task_data,
Packit 79f644
                                   GCancellable *cancellable)
Packit 79f644
{
Packit 79f644
  GError *error;
Packit 79f644
Packit 79f644
  error = NULL;
Packit 79f644
  if (!goa_mail_auth_starttls_sync (GOA_MAIL_AUTH (object), cancellable, &error))
Packit 79f644
    g_task_return_error (task, error);
Packit 79f644
  else
Packit 79f644
    g_task_return_boolean (task, TRUE);
Packit 79f644
}
Packit 79f644
Packit 79f644
/* ---------------------------------------------------------------------------------------------------- */
Packit 79f644
Packit 79f644
static void
Packit 79f644
goa_mail_auth_dispose (GObject *object)
Packit 79f644
{
Packit 79f644
  GoaMailAuth *self = GOA_MAIL_AUTH (object);
Packit 79f644
  GoaMailAuthPrivate *priv;
Packit 79f644
Packit 79f644
  priv = goa_mail_auth_get_instance_private (self);
Packit 79f644
Packit 79f644
  g_clear_object (&priv->input);
Packit 79f644
  g_clear_object (&priv->output);
Packit 79f644
Packit 79f644
  G_OBJECT_CLASS (goa_mail_auth_parent_class)->dispose (object);
Packit 79f644
}
Packit 79f644
Packit 79f644
static void
Packit 79f644
goa_mail_auth_get_property (GObject      *object,
Packit 79f644
                            guint         prop_id,
Packit 79f644
                            GValue       *value,
Packit 79f644
                            GParamSpec   *pspec)
Packit 79f644
{
Packit 79f644
  GoaMailAuth *self = GOA_MAIL_AUTH (object);
Packit 79f644
  GoaMailAuthPrivate *priv;
Packit 79f644
Packit 79f644
  priv = goa_mail_auth_get_instance_private (self);
Packit 79f644
Packit 79f644
  switch (prop_id)
Packit 79f644
    {
Packit 79f644
    case PROP_INPUT:
Packit 79f644
      g_value_set_object (value, priv->input);
Packit 79f644
      break;
Packit 79f644
Packit 79f644
    case PROP_OUTPUT:
Packit 79f644
      g_value_set_object (value, priv->output);
Packit 79f644
      break;
Packit 79f644
Packit 79f644
    default:
Packit 79f644
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
Packit 79f644
      break;
Packit 79f644
    }
Packit 79f644
}
Packit 79f644
Packit 79f644
static void
Packit 79f644
goa_mail_auth_set_property (GObject      *object,
Packit 79f644
                            guint         prop_id,
Packit 79f644
                            const GValue *value,
Packit 79f644
                            GParamSpec   *pspec)
Packit 79f644
{
Packit 79f644
  GoaMailAuth *self = GOA_MAIL_AUTH (object);
Packit 79f644
  GoaMailAuthPrivate *priv;
Packit 79f644
Packit 79f644
  priv = goa_mail_auth_get_instance_private (self);
Packit 79f644
Packit 79f644
  switch (prop_id)
Packit 79f644
    {
Packit 79f644
    case PROP_INPUT:
Packit 79f644
      priv->input = g_value_dup_object (value);
Packit 79f644
      break;
Packit 79f644
Packit 79f644
    case PROP_OUTPUT:
Packit 79f644
      priv->output = g_value_dup_object (value);
Packit 79f644
      break;
Packit 79f644
Packit 79f644
    default:
Packit 79f644
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
Packit 79f644
      break;
Packit 79f644
    }
Packit 79f644
}
Packit 79f644
Packit 79f644
/* ---------------------------------------------------------------------------------------------------- */
Packit 79f644
Packit 79f644
static void
Packit 79f644
goa_mail_auth_init (GoaMailAuth *self)
Packit 79f644
{
Packit 79f644
}
Packit 79f644
Packit 79f644
static void
Packit 79f644
goa_mail_auth_class_init (GoaMailAuthClass *klass)
Packit 79f644
{
Packit 79f644
  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
Packit 79f644
Packit 79f644
  gobject_class->dispose      = goa_mail_auth_dispose;
Packit 79f644
  gobject_class->get_property = goa_mail_auth_get_property;
Packit 79f644
  gobject_class->set_property = goa_mail_auth_set_property;
Packit 79f644
Packit 79f644
  g_object_class_install_property (gobject_class,
Packit 79f644
                                   PROP_INPUT,
Packit 79f644
                                   g_param_spec_object ("input",
Packit 79f644
                                                        "input",
Packit 79f644
                                                        "input",
Packit 79f644
                                                        G_TYPE_DATA_INPUT_STREAM,
Packit 79f644
                                                        G_PARAM_READWRITE |
Packit 79f644
                                                        G_PARAM_STATIC_STRINGS));
Packit 79f644
Packit 79f644
  g_object_class_install_property (gobject_class,
Packit 79f644
                                   PROP_OUTPUT,
Packit 79f644
                                   g_param_spec_object ("output",
Packit 79f644
                                                        "output",
Packit 79f644
                                                        "output",
Packit 79f644
                                                        G_TYPE_DATA_OUTPUT_STREAM,
Packit 79f644
                                                        G_PARAM_READWRITE |
Packit 79f644
                                                        G_PARAM_STATIC_STRINGS));
Packit 79f644
}
Packit 79f644
Packit 79f644
/* ---------------------------------------------------------------------------------------------------- */
Packit 79f644
Packit 79f644
gboolean
Packit 79f644
goa_mail_auth_is_needed (GoaMailAuth *self)
Packit 79f644
{
Packit 79f644
  g_return_val_if_fail (GOA_IS_MAIL_AUTH (self), FALSE);
Packit 79f644
  return GOA_MAIL_AUTH_GET_CLASS (self)->is_needed (self);
Packit 79f644
}
Packit 79f644
Packit 79f644
/* ---------------------------------------------------------------------------------------------------- */
Packit 79f644
Packit 79f644
gboolean
Packit 79f644
goa_mail_auth_run_sync (GoaMailAuth         *self,
Packit 79f644
                        GCancellable        *cancellable,
Packit 79f644
                        GError             **error)
Packit 79f644
{
Packit 79f644
  g_return_val_if_fail (GOA_IS_MAIL_AUTH (self), FALSE);
Packit 79f644
  g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), FALSE);
Packit 79f644
  return GOA_MAIL_AUTH_GET_CLASS (self)->run_sync (self, cancellable, error);
Packit 79f644
}
Packit 79f644
Packit 79f644
/* ---------------------------------------------------------------------------------------------------- */
Packit 79f644
Packit 79f644
void
Packit 79f644
goa_mail_auth_run (GoaMailAuth         *self,
Packit 79f644
                   GCancellable        *cancellable,
Packit 79f644
                   GAsyncReadyCallback  callback,
Packit 79f644
                   gpointer             user_data)
Packit 79f644
{
Packit 79f644
  GTask *task;
Packit 79f644
Packit 79f644
  g_return_if_fail (GOA_IS_MAIL_AUTH (self));
Packit 79f644
  g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
Packit 79f644
Packit 79f644
  task = g_task_new (self, cancellable, callback, user_data);
Packit 79f644
  g_task_set_source_tag (task, goa_mail_auth_run);
Packit 79f644
Packit 79f644
  g_task_run_in_thread (task, mail_auth_run_in_thread_func);
Packit 79f644
Packit 79f644
  g_object_unref (task);
Packit 79f644
}
Packit 79f644
Packit 79f644
gboolean
Packit 79f644
goa_mail_auth_run_finish (GoaMailAuth         *self,
Packit 79f644
                          GAsyncResult        *res,
Packit 79f644
                          GError             **error)
Packit 79f644
{
Packit 79f644
  GTask *task;
Packit 79f644
Packit 79f644
  g_return_val_if_fail (GOA_IS_MAIL_AUTH (self), FALSE);
Packit 79f644
  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
Packit 79f644
Packit 79f644
  g_return_val_if_fail (g_task_is_valid (res, self), FALSE);
Packit 79f644
  task = G_TASK (res);
Packit 79f644
Packit 79f644
  g_return_val_if_fail (g_task_get_source_tag (task) == goa_mail_auth_run, FALSE);
Packit 79f644
Packit 79f644
  return g_task_propagate_boolean (task, error);
Packit 79f644
}
Packit 79f644
Packit 79f644
/* ---------------------------------------------------------------------------------------------------- */
Packit 79f644
Packit 79f644
gboolean
Packit 79f644
goa_mail_auth_starttls_sync (GoaMailAuth         *self,
Packit 79f644
                             GCancellable        *cancellable,
Packit 79f644
                             GError             **error)
Packit 79f644
{
Packit 79f644
  g_return_val_if_fail (GOA_IS_MAIL_AUTH (self), FALSE);
Packit 79f644
  g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), FALSE);
Packit 79f644
  return GOA_MAIL_AUTH_GET_CLASS (self)->starttls_sync (self, cancellable, error);
Packit 79f644
}
Packit 79f644
Packit 79f644
/* ---------------------------------------------------------------------------------------------------- */
Packit 79f644
Packit 79f644
void
Packit 79f644
goa_mail_auth_starttls (GoaMailAuth         *self,
Packit 79f644
                        GCancellable        *cancellable,
Packit 79f644
                        GAsyncReadyCallback  callback,
Packit 79f644
                        gpointer             user_data)
Packit 79f644
{
Packit 79f644
  GTask *task;
Packit 79f644
Packit 79f644
  g_return_if_fail (GOA_IS_MAIL_AUTH (self));
Packit 79f644
  g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
Packit 79f644
Packit 79f644
  task = g_task_new (self, cancellable, callback, user_data);
Packit 79f644
  g_task_set_source_tag (task, goa_mail_auth_starttls);
Packit 79f644
Packit 79f644
  g_task_run_in_thread (task, mail_auth_starttls_in_thread_func);
Packit 79f644
Packit 79f644
  g_object_unref (task);
Packit 79f644
}
Packit 79f644
Packit 79f644
gboolean
Packit 79f644
goa_mail_auth_starttls_finish (GoaMailAuth         *self,
Packit 79f644
                               GAsyncResult        *res,
Packit 79f644
                               GError             **error)
Packit 79f644
{
Packit 79f644
  GTask *task;
Packit 79f644
Packit 79f644
  g_return_val_if_fail (GOA_IS_MAIL_AUTH (self), FALSE);
Packit 79f644
  g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
Packit 79f644
Packit 79f644
  g_return_val_if_fail (g_task_is_valid (res, self), FALSE);
Packit 79f644
  task = G_TASK (res);
Packit 79f644
Packit 79f644
  g_return_val_if_fail (g_task_get_source_tag (task) == goa_mail_auth_starttls, FALSE);
Packit 79f644
Packit 79f644
  return g_task_propagate_boolean (task, error);
Packit 79f644
}
Packit 79f644
Packit 79f644
/* ---------------------------------------------------------------------------------------------------- */
Packit 79f644
Packit 79f644
GDataInputStream *
Packit 79f644
goa_mail_auth_get_input (GoaMailAuth *self)
Packit 79f644
{
Packit 79f644
  GoaMailAuthPrivate *priv;
Packit 79f644
Packit 79f644
  priv = goa_mail_auth_get_instance_private (self);
Packit 79f644
  return priv->input;
Packit 79f644
}
Packit 79f644
Packit 79f644
void
Packit 79f644
goa_mail_auth_set_input (GoaMailAuth      *self,
Packit 79f644
                         GDataInputStream *input)
Packit 79f644
{
Packit 79f644
  GoaMailAuthPrivate *priv;
Packit 79f644
Packit 79f644
  priv = goa_mail_auth_get_instance_private (self);
Packit 79f644
Packit 79f644
  if (priv->input == input)
Packit 79f644
    return;
Packit 79f644
Packit 79f644
  g_clear_object (&priv->input);
Packit 79f644
  priv->input = g_object_ref (input);
Packit 79f644
  g_object_notify (G_OBJECT (self), "input");
Packit 79f644
}
Packit 79f644
Packit 79f644
GDataOutputStream *
Packit 79f644
goa_mail_auth_get_output (GoaMailAuth  *self)
Packit 79f644
{
Packit 79f644
  GoaMailAuthPrivate *priv;
Packit 79f644
Packit 79f644
  priv = goa_mail_auth_get_instance_private (self);
Packit 79f644
  return priv->output;
Packit 79f644
}
Packit 79f644
Packit 79f644
void
Packit 79f644
goa_mail_auth_set_output (GoaMailAuth       *self,
Packit 79f644
                          GDataOutputStream *output)
Packit 79f644
{
Packit 79f644
  GoaMailAuthPrivate *priv;
Packit 79f644
Packit 79f644
  priv = goa_mail_auth_get_instance_private (self);
Packit 79f644
Packit 79f644
  if (priv->output == output)
Packit 79f644
    return;
Packit 79f644
Packit 79f644
  g_clear_object (&priv->output);
Packit 79f644
  priv->output = g_object_ref (output);
Packit 79f644
  g_object_notify (G_OBJECT (self), "output");
Packit 79f644
}