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 to be:


IPA Web UI uses AMD module format:
- https://dojotoolkit.org/documentation/tutorials/1.10/modules/
- http://requirejs.org/docs/whyamd.html#amd

I have some example plugins here:
- https://pvoborni.fedorapeople.org/plugins/

For your case I would look at:
- https://pvoborni.fedorapeople.org/plugins/employeenumber/employeenumber.js

Web UI basics and introspection:
(this section is little redundant to your question, but it might help others)

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 particular module.

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' property.


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 second facet:
  var details_facet = user_module.entity_spec.facets[1]

IF i simplify it a bit, we can say that fields on a page are organized in sections:

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.

In browser developer tools. There is javascript console (use in the text above), javascript debugger, network tab for inspecting loaded files.

For developing RHEL 7 plugin, I would suggest you to install test instance of FreeIPA 3.3 and use "Debugging with source codes" method described in:

- https://pvoborni.fedorapeople.org/doc/#!/guide/Debugging

Some tips:
- 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) - it's good to use some JavaScript liner - jsl or jshint to catch syntax errors early.

I  running version 3.3 on rhel 7. Any help or pointers to more
documentation would be greatly appreciated.

Petr Vobornik

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

Reply via email to