1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ 2 /* 3 * Copyright (C) 2016, 2017, 2018 Igalia S.L. 4 * Copyright (C) 2017, 2018 Metrological Group B.V. 5 */ 6 7 #ifndef __SOUP_HSTS_ENFORCER_H__ 8 #define __SOUP_HSTS_ENFORCER_H__ 1 9 10 #include <libsoup/soup-types.h> 11 12 G_BEGIN_DECLS 13 14 #define SOUP_TYPE_HSTS_ENFORCER (soup_hsts_enforcer_get_type ()) 15 #define SOUP_HSTS_ENFORCER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SOUP_TYPE_HSTS_ENFORCER, SoupHSTSEnforcer)) 16 #define SOUP_HSTS_ENFORCER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SOUP_TYPE_HSTS_ENFORCER, SoupHSTSEnforcerClass)) 17 #define SOUP_IS_HSTS_ENFORCER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SOUP_TYPE_HSTS_ENFORCER)) 18 #define SOUP_IS_HSTS_ENFORCER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((obj), SOUP_TYPE_HSTS_ENFORCER)) 19 #define SOUP_HSTS_ENFORCER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SOUP_TYPE_HSTS_ENFORCER, SoupHSTSEnforcerClass)) 20 21 typedef struct _SoupHSTSEnforcerPrivate SoupHSTSEnforcerPrivate; 22 23 struct _SoupHSTSEnforcer { 24 GObject parent; 25 26 SoupHSTSEnforcerPrivate *priv; 27 }; 28 29 /** 30 * SoupHSTSEnforcerClass: 31 * @parent_class: The parent class. 32 * @is_persistent: The @is_persistent function advertises whether the enforcer is persistent or 33 * whether changes made to it will be lost when the underlying #SoupSession is finished. 34 * @has_valid_policy: The @has_valid_policy function is called to check whether there is a valid 35 * policy for the given domain. This method should return %TRUE for #SoupHSTSEnforcer to 36 * change the scheme of the #SoupURI in the #SoupMessage to HTTPS. Implementations might want to 37 * chain up to the @has_valid_policy in the parent class to check, for instance, for runtime 38 * policies. 39 * @changed: the class closure for the #SoupHSTSEnforcer::changed signal. 40 **/ 41 typedef struct { 42 GObjectClass parent_class; 43 44 gboolean (*is_persistent) (SoupHSTSEnforcer *hsts_enforcer); 45 gboolean (*has_valid_policy) (SoupHSTSEnforcer *hsts_enforcer, const char *domain); 46 47 /* signals */ 48 void (*changed) (SoupHSTSEnforcer *enforcer, 49 SoupHSTSPolicy *old_policy, 50 SoupHSTSPolicy *new_policy); 51 52 void (*hsts_enforced) (SoupHSTSEnforcer *enforcer, 53 SoupMessage *message); 54 55 /* Padding for future expansion */ 56 void (*_libsoup_reserved1) (void); 57 void (*_libsoup_reserved2) (void); 58 void (*_libsoup_reserved3) (void); 59 void (*_libsoup_reserved4) (void); 60 } SoupHSTSEnforcerClass; 61 62 SOUP_AVAILABLE_IN_2_68 63 GType soup_hsts_enforcer_get_type (void); 64 SOUP_AVAILABLE_IN_2_68 65 SoupHSTSEnforcer *soup_hsts_enforcer_new (void); 66 SOUP_AVAILABLE_IN_2_68 67 gboolean soup_hsts_enforcer_is_persistent (SoupHSTSEnforcer *hsts_enforcer); 68 SOUP_AVAILABLE_IN_2_68 69 gboolean soup_hsts_enforcer_has_valid_policy (SoupHSTSEnforcer *hsts_enforcer, 70 const char *domain); 71 SOUP_AVAILABLE_IN_2_68 72 void soup_hsts_enforcer_set_session_policy (SoupHSTSEnforcer *hsts_enforcer, 73 const char *domain, 74 gboolean include_subdomains); 75 SOUP_AVAILABLE_IN_2_68 76 void soup_hsts_enforcer_set_policy (SoupHSTSEnforcer *hsts_enforcer, 77 SoupHSTSPolicy *policy); 78 79 SOUP_AVAILABLE_IN_2_68 80 GList *soup_hsts_enforcer_get_domains (SoupHSTSEnforcer *hsts_enforcer, 81 gboolean session_policies); 82 83 SOUP_AVAILABLE_IN_2_68 84 GList *soup_hsts_enforcer_get_policies (SoupHSTSEnforcer *hsts_enforcer, 85 gboolean session_policies); 86 87 G_END_DECLS 88 89 #endif /* __SOUP_HSTS_ENFORCER_H__ */ 90