module org-openroadm-user-mgmt {
  namespace "http://org/openroadm/user-mgmt";
  prefix org-openroadm-user-mgmt;

  organization "Open ROADM MSA";
  contact
    "OpenROADM.org";
  description
    "YANG definitions of user managements.
       
      Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
      AT&T Intellectual Property.  All other rights reserved.
      
      Redistribution and use in source and binary forms, with or without modification, 
      are permitted provided that the following conditions are met:
      
      * Redistributions of source code must retain the above copyright notice, this 
        list of conditions and the following disclaimer.
      * Redistributions in binary form must reproduce the above copyright notice, 
        this list of conditions and the following disclaimer in the documentation and/or 
        other materials provided with the distribution.
      * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
        contributors may be used to endorse or promote products derived from this software 
        without specific prior written permission.
      
      THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
      AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
      WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
      IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
      INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
      NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
      OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
      WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
      ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
      POSSIBILITY OF SUCH DAMAGE";

  revision 2016-10-14 {
    description
      "Version 1.2";
  }

  grouping user-profile {
    list user {
      key "name";
      description
        "The list of local users configured on this device.";
      leaf name {
        type string;
        description
          "The user name string identifying this entry.";
      }
      leaf password {
        type string;
        description
          "The password for this entry. This shouldn't be in clear text";
      }
      leaf group {
        type enumeration {
          enum "sudo";
        }
        description
          "The group to which the user is associated to.";
      }
    }
  }

  rpc chg-password {
    input {
      leaf currentPassword {
        type string;
        description
          "provide the current password";
        mandatory true;
      }
      leaf newPassword {
        type string;
        description
          "provide a new password";
        mandatory true;
      }
      leaf newPasswordConfirm {
        type string;
        description
          "re-enter the new password ";
        mandatory true;
      }
    }
    output {
      leaf status {
        type enumeration {
          enum "Successful" {
            value 1;
          }
          enum "Failed" {
            value 2;
          }
        }
        mandatory true;
        description
          "Successful or Failed";
      }
      leaf status-message {
        type string;
        description
          "Gives a more detailed reason for success / failure";
      }
    }
  }
}
