On 03/06/2015 03:54 AM, Corey Kovacs wrote:
After reading the extending freeipa training document I was able
successfully add us to meet attributes and add/modify them using the cli
which was pretty cool. Now that I got the cli out of the way I want to add
the fields to the ui. Because of the similarities between what I want to do
and the example given in the docs I just followed along and changed
variables where it made sense to do so. I cannot however get the new field
to show up. The Apache logs don't show any errors but they do show the
plugin being read as the page (user details) is loaded. After searching
around I found a document which attempts to explain the process but it
assumes some knowledge held by the reader which I don't possess.
It looks like I supposed to create some sort of index loader which loads
all of the modules which are part of the plugin. I can't seem to find any
good documents telling the whole process or least non that I can make sense
Plugin could be just one file, if the plugin name is "myplugin" it has
IPA Web UI uses AMD module format:
I have some example plugins here:
For your case I would look at:
Web UI basics and introspection:
(this section is little redundant to your question, but it might help
FreeIPA Web UI is semi declarative. That means that part of the pages
could be thrown away, modified or extended by plugins before the page is
constructed. To do that, one has to modify specification object of
Here, I would assume that you don't have UI sources(before
minification), so all introspection will be done in running web ui.
Otherwise it's easier to inspect sources in install/ui/src/freeipa, i.e.
checkout ipa-3-3 branch from upstream git.
List of modules could be find(after authentication) in browse developer
tools console in object:
or (depends on IPA version)
One can then obtain the module by:
var user_module = require('freeipa/user')
specification object is usually in 'entity_spec' or '$enity_name_spec'
UI is internally organized into entities. Entity corresponds to ipalib
object. Entity, e.g. user, usually have multiple pages called facets. To
get a list of facets:
The one with fields has usually a name "details". For users it's the
var details_facet = user_module.entity_spec.facets
IF i simplify it a bit, we can say that fields on a page are organized
Section has fields. A field usually represents an editable element on
page, e.g. a textbox with label, validators and other stuff.
Example of inspection:
Your goal is to pick a section, or create a new one an add a field
there. To know what to define, just examine a definition of already
existing field and just amend name, label, ...
It would help also to understand how to debug such a thing.
For developing RHEL 7 plugin, I would suggest you to install test
instance of FreeIPA 3.3 and use "Debugging with source codes" method
- if you get a weird dojo loader messegate, you probably have a syntax
error in the plugin or you don't return a plugin object or the plugin
could not be loaded (bad name)
I running version 3.3 on rhel 7. Any help or pointers to more
documentation would be greatly appreciated.
Manage your subscription for the Freeipa-devel mailing list:
Go to http://www.freeipa.org/page/Contribute/Code for more info on how to
contribute to the project